

63 changed files with 5852 additions and 8906 deletions
@ -0,0 +1,65 @@
@@ -0,0 +1,65 @@
|
||||
################################################################################ |
||||
# Command for variable_watch. This command issues error message, if a variable |
||||
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens |
||||
# variable_watch(<variable> property_reader_guard) |
||||
################################################################################ |
||||
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK) |
||||
if("${PROPERTY_READER_GUARD_DISABLED}") |
||||
return() |
||||
endif() |
||||
|
||||
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS") |
||||
message(FATAL_ERROR |
||||
" Variable ${VARIABLE} is not supposed to be changed.\n" |
||||
" It is used only for reading target property ${VARIABLE}.\n" |
||||
" Use\n" |
||||
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n" |
||||
" or\n" |
||||
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n" |
||||
" instead.\n") |
||||
endif() |
||||
endfunction() |
||||
|
||||
################################################################################ |
||||
# Create variable <name> with generator expression that expands to value of |
||||
# target property <name>_<CONFIG>. If property is empty or not set then property |
||||
# <name> is used instead. Variable <name> has watcher property_reader_guard that |
||||
# doesn't allow to edit it. |
||||
# create_property_reader(<name>) |
||||
# Input: |
||||
# name - Name of watched property and output variable |
||||
################################################################################ |
||||
function(create_property_reader NAME) |
||||
set(PROPERTY_READER_GUARD_DISABLED TRUE) |
||||
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>") |
||||
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>") |
||||
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>") |
||||
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE) |
||||
variable_watch("${NAME}" property_reader_guard) |
||||
endfunction() |
||||
|
||||
################################################################################ |
||||
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value> |
||||
# set_config_specific_property(<name> <value>) |
||||
# Input: |
||||
# name - Prefix of property name |
||||
# value - New value |
||||
################################################################################ |
||||
function(set_config_specific_property NAME VALUE) |
||||
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}") |
||||
endfunction() |
||||
|
||||
################################################################################ |
||||
|
||||
create_property_reader("TARGET_NAME") |
||||
create_property_reader("OUTPUT_DIRECTORY") |
||||
|
||||
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}") |
||||
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}") |
||||
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}") |
||||
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}") |
||||
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}") |
||||
|
||||
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") |
||||
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") |
||||
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") |
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake") |
||||
|
||||
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}") |
||||
|
||||
if(MSVC) |
||||
create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING") |
||||
create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT") |
||||
|
||||
set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL") |
||||
set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc") |
||||
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi") |
||||
endif() |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) |
||||
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0) |
||||
set(CPACK_COMPONENTS_ALL "ship" "appimage") |
||||
|
||||
if (NOT CPACK_GENERATOR STREQUAL "External") |
||||
list(REMOVE_ITEM CPACK_COMPONENTS_ALL "appimage") |
||||
endif() |
||||
|
||||
if (CPACK_GENERATOR MATCHES "DEB|RPM") |
||||
# https://unix.stackexchange.com/a/11552/254512 |
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/ship/bin")#/${CMAKE_PROJECT_VERSION}") |
||||
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0) |
||||
elseif (CPACK_GENERATOR MATCHES "ZIP") |
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "") |
||||
endif() |
||||
|
||||
if (CPACK_GENERATOR MATCHES "External") |
||||
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) |
||||
SET(CPACK_MONOLITHIC_INSTALL 1) |
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/bin") |
||||
endif() |
||||
|
||||
if (CPACK_GENERATOR MATCHES "Bundle") |
||||
set(CPACK_BUNDLE_NAME "soh") |
||||
set(CPACK_BUNDLE_PLIST "../soh/macosx/Info.plist") |
||||
set(CPACK_BUNDLE_ICON "macosx/soh.icns") |
||||
set(CPACK_BUNDLE_STARTUP_COMMAND "../soh/macosx/soh-macos.sh") |
||||
set(CPACK_BUNDLE_APPLE_CERT_APP "-") |
||||
endif() |
||||
|
@ -0,0 +1,90 @@
@@ -0,0 +1,90 @@
|
||||
# these are cache variables, so they could be overwritten with -D, |
||||
|
||||
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}" |
||||
CACHE STRING "The resulting package name" |
||||
) |
||||
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simple C++ application" |
||||
CACHE STRING "Package description for the package metadata" |
||||
) |
||||
set(CPACK_PACKAGE_VENDOR "Some Company") |
||||
|
||||
set(CPACK_VERBATIM_VARIABLES YES) |
||||
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) |
||||
SET(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_SOURCE_DIR}/_packages") |
||||
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) |
||||
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) |
||||
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) |
||||
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") |
||||
|
||||
set(CPACK_PACKAGE_CONTACT "YOUR@E-MAIL.net") |
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "YOUR NAME") |
||||
|
||||
#set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") |
||||
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") |
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
||||
set(CPACK_SYSTEM_NAME ${LSB_RELEASE_CODENAME_SHORT}) |
||||
# package name for deb |
||||
# if set, then instead of some-application-0.9.2-Linux.deb |
||||
# you'll get some-application_0.9.2_amd64.deb (note the underscores too) |
||||
#set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) |
||||
execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) |
||||
set( CPACK_DEBIAN_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}-${ARCHITECTURE}.deb ) |
||||
# if you want every group to have its own package, |
||||
# although the same happens if this is not sent (so it defaults to ONE_PER_GROUP) |
||||
# and CPACK_DEB_COMPONENT_INSTALL is set to YES |
||||
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)#ONE_PER_GROUP) |
||||
# without this you won't be able to pack only specified component |
||||
set(CPACK_DEB_COMPONENT_INSTALL YES) |
||||
|
||||
set(CPACK_EXTERNAL_ENABLE_STAGING YES) |
||||
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/appimage-generate.cmake") |
||||
|
||||
file(GENERATE |
||||
OUTPUT "${PROJECT_BINARY_DIR}/appimage-generate.cmake" |
||||
CONTENT [[ |
||||
include(CMakePrintHelpers) |
||||
cmake_print_variables(CPACK_TEMPORARY_DIRECTORY) |
||||
cmake_print_variables(CPACK_TOPLEVEL_DIRECTORY) |
||||
cmake_print_variables(CPACK_PACKAGE_DIRECTORY) |
||||
cmake_print_variables(CPACK_PACKAGE_FILE_NAME) |
||||
|
||||
find_program(LINUXDEPLOY_EXECUTABLE |
||||
NAMES linuxdeploy linuxdeploy-x86_64.AppImage |
||||
PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy) |
||||
|
||||
if (NOT LINUXDEPLOY_EXECUTABLE) |
||||
message(STATUS "Downloading linuxdeploy") |
||||
set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy) |
||||
file(DOWNLOAD |
||||
https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage |
||||
${LINUXDEPLOY_EXECUTABLE} |
||||
INACTIVITY_TIMEOUT 10 |
||||
LOG ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/download.log |
||||
STATUS LINUXDEPLOY_DOWNLOAD) |
||||
execute_process(COMMAND chmod +x ${LINUXDEPLOY_EXECUTABLE} COMMAND_ECHO STDOUT) |
||||
endif() |
||||
|
||||
execute_process( |
||||
COMMAND |
||||
${CMAKE_COMMAND} -E env |
||||
OUTPUT=${CPACK_PACKAGE_FILE_NAME}.appimage |
||||
VERSION=$<IF:$<BOOL:${CPACK_PACKAGE_VERSION}>,${CPACK_PACKAGE_VERSION},0.1.0> |
||||
${LINUXDEPLOY_EXECUTABLE} |
||||
--appimage-extract-and-run |
||||
--appdir=${CPACK_TEMPORARY_DIRECTORY} |
||||
--executable=$<TARGET_FILE:soh> |
||||
$<$<BOOL:$<TARGET_PROPERTY:soh,APPIMAGE_DESKTOP_FILE>>:--desktop-file=$<TARGET_PROPERTY:soh,APPIMAGE_DESKTOP_FILE>> |
||||
$<$<BOOL:$<TARGET_PROPERTY:soh,APPIMAGE_ICON_FILE>>:--icon-file=$<TARGET_PROPERTY:soh,APPIMAGE_ICON_FILE>> |
||||
--output=appimage |
||||
# --verbosity=2 |
||||
) |
||||
]]) |
||||
|
||||
endif() |
||||
|
||||
include(CPack) |
||||
|
@ -0,0 +1,248 @@
@@ -0,0 +1,248 @@
|
||||
# utils file for projects came from visual studio solution with cmake-converter. |
||||
|
||||
################################################################################ |
||||
# Wrap each token of the command with condition |
||||
################################################################################ |
||||
cmake_policy(PUSH) |
||||
cmake_policy(SET CMP0054 NEW) |
||||
macro(prepare_commands) |
||||
unset(TOKEN_ROLE) |
||||
unset(COMMANDS) |
||||
foreach(TOKEN ${ARG_COMMANDS}) |
||||
if("${TOKEN}" STREQUAL "COMMAND") |
||||
set(TOKEN_ROLE "KEYWORD") |
||||
elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD") |
||||
set(TOKEN_ROLE "CONDITION") |
||||
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION") |
||||
set(TOKEN_ROLE "COMMAND") |
||||
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND") |
||||
set(TOKEN_ROLE "ARG") |
||||
endif() |
||||
|
||||
if("${TOKEN_ROLE}" STREQUAL "KEYWORD") |
||||
list(APPEND COMMANDS "${TOKEN}") |
||||
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION") |
||||
set(CONDITION ${TOKEN}) |
||||
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND") |
||||
list(APPEND COMMANDS "$<$<NOT:${CONDITION}>:${DUMMY}>$<${CONDITION}:${TOKEN}>") |
||||
elseif("${TOKEN_ROLE}" STREQUAL "ARG") |
||||
list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>") |
||||
endif() |
||||
endforeach() |
||||
endmacro() |
||||
cmake_policy(POP) |
||||
|
||||
################################################################################ |
||||
# Transform all the tokens to absolute paths |
||||
################################################################################ |
||||
macro(prepare_output) |
||||
unset(OUTPUT) |
||||
foreach(TOKEN ${ARG_OUTPUT}) |
||||
if(IS_ABSOLUTE ${TOKEN}) |
||||
list(APPEND OUTPUT "${TOKEN}") |
||||
else() |
||||
list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}") |
||||
endif() |
||||
endforeach() |
||||
endmacro() |
||||
|
||||
################################################################################ |
||||
# Parse add_custom_command_if args. |
||||
# |
||||
# Input: |
||||
# PRE_BUILD - Pre build event option |
||||
# PRE_LINK - Pre link event option |
||||
# POST_BUILD - Post build event option |
||||
# TARGET - Target |
||||
# OUTPUT - List of output files |
||||
# DEPENDS - List of files on which the command depends |
||||
# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND |
||||
# condition2 commannd2 args2 ...) |
||||
# Output: |
||||
# OUTPUT - Output files |
||||
# DEPENDS - Files on which the command depends |
||||
# COMMENT - Comment |
||||
# PRE_BUILD - TRUE/FALSE |
||||
# PRE_LINK - TRUE/FALSE |
||||
# POST_BUILD - TRUE/FALSE |
||||
# TARGET - Target name |
||||
# COMMANDS - Prepared commands(every token is wrapped in CONDITION) |
||||
# NAME - Unique name for custom target |
||||
# STEP - PRE_BUILD/PRE_LINK/POST_BUILD |
||||
################################################################################ |
||||
function(add_custom_command_if_parse_arguments) |
||||
cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN}) |
||||
|
||||
if(WIN32) |
||||
set(DUMMY "cd.") |
||||
elseif(UNIX) |
||||
set(DUMMY "true") |
||||
endif() |
||||
|
||||
prepare_commands() |
||||
prepare_output() |
||||
|
||||
set(DEPENDS "${ARG_DEPENDS}") |
||||
set(COMMENT "${ARG_COMMENT}") |
||||
set(PRE_BUILD "${ARG_PRE_BUILD}") |
||||
set(PRE_LINK "${ARG_PRE_LINK}") |
||||
set(POST_BUILD "${ARG_POST_BUILD}") |
||||
set(TARGET "${ARG_TARGET}") |
||||
if(PRE_BUILD) |
||||
set(STEP "PRE_BUILD") |
||||
elseif(PRE_LINK) |
||||
set(STEP "PRE_LINK") |
||||
elseif(POST_BUILD) |
||||
set(STEP "POST_BUILD") |
||||
endif() |
||||
set(NAME "${TARGET}_${STEP}") |
||||
|
||||
set(OUTPUT "${OUTPUT}" PARENT_SCOPE) |
||||
set(DEPENDS "${DEPENDS}" PARENT_SCOPE) |
||||
set(COMMENT "${COMMENT}" PARENT_SCOPE) |
||||
set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE) |
||||
set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE) |
||||
set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE) |
||||
set(TARGET "${TARGET}" PARENT_SCOPE) |
||||
set(COMMANDS "${COMMANDS}" PARENT_SCOPE) |
||||
set(STEP "${STEP}" PARENT_SCOPE) |
||||
set(NAME "${NAME}" PARENT_SCOPE) |
||||
endfunction() |
||||
|
||||
################################################################################ |
||||
# Add conditional custom command |
||||
# |
||||
# Generating Files |
||||
# The first signature is for adding a custom command to produce an output: |
||||
# add_custom_command_if( |
||||
# <OUTPUT output1 [output2 ...]> |
||||
# <COMMANDS> |
||||
# <COMMAND condition command1 [args1...]> |
||||
# [COMMAND condition command2 [args2...]] |
||||
# [DEPENDS [depends...]] |
||||
# [COMMENT comment] |
||||
# |
||||
# Build Events |
||||
# add_custom_command_if( |
||||
# <TARGET target> |
||||
# <PRE_BUILD | PRE_LINK | POST_BUILD> |
||||
# <COMMAND condition command1 [args1...]> |
||||
# [COMMAND condition command2 [args2...]] |
||||
# [COMMENT comment] |
||||
# |
||||
# Input: |
||||
# output - Output files the command is expected to produce |
||||
# condition - Generator expression for wrapping the command |
||||
# command - Command-line(s) to execute at build time. |
||||
# args - Command`s args |
||||
# depends - Files on which the command depends |
||||
# comment - Display the given message before the commands are executed at |
||||
# build time. |
||||
# PRE_BUILD - Run before any other rules are executed within the target |
||||
# PRE_LINK - Run after sources have been compiled but before linking the |
||||
# binary |
||||
# POST_BUILD - Run after all other rules within the target have been |
||||
# executed |
||||
################################################################################ |
||||
function(add_custom_command_if) |
||||
add_custom_command_if_parse_arguments(${ARGN}) |
||||
|
||||
if(OUTPUT AND TARGET) |
||||
message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.") |
||||
endif() |
||||
|
||||
if(OUTPUT) |
||||
add_custom_command(OUTPUT ${OUTPUT} |
||||
${COMMANDS} |
||||
DEPENDS ${DEPENDS} |
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
||||
COMMENT ${COMMENT}) |
||||
elseif(TARGET) |
||||
if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio") |
||||
add_custom_target( |
||||
${NAME} |
||||
${COMMANDS} |
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
||||
COMMENT ${COMMENT}) |
||||
add_dependencies(${TARGET} ${NAME}) |
||||
else() |
||||
add_custom_command( |
||||
TARGET ${TARGET} |
||||
${STEP} |
||||
${COMMANDS} |
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
||||
COMMENT ${COMMENT}) |
||||
endif() |
||||
else() |
||||
message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.") |
||||
endif() |
||||
endfunction() |
||||
|
||||
################################################################################ |
||||
# Use props file for a target and configs |
||||
# use_props(<target> <configs...> <props_file>) |
||||
# Inside <props_file> there are following variables: |
||||
# PROPS_TARGET - <target> |
||||
# PROPS_CONFIG - One of <configs...> |
||||
# PROPS_CONFIG_U - Uppercase PROPS_CONFIG |
||||
# Input: |
||||
# target - Target to apply props file |
||||
# configs - Build configurations to apply props file |
||||
# props_file - CMake script |
||||
################################################################################ |
||||
macro(use_props TARGET CONFIGS PROPS_FILE) |
||||
set(PROPS_TARGET "${TARGET}") |
||||
foreach(PROPS_CONFIG ${CONFIGS}) |
||||
string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U) |
||||
|
||||
get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}") |
||||
if(EXISTS "${ABSOLUTE_PROPS_FILE}") |
||||
include("${ABSOLUTE_PROPS_FILE}") |
||||
else() |
||||
message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist") |
||||
endif() |
||||
endforeach() |
||||
endmacro() |
||||
|
||||
################################################################################ |
||||
# Add compile options to source file |
||||
# source_file_compile_options(<source_file> [compile_options...]) |
||||
# Input: |
||||
# source_file - Source file |
||||
# compile_options - Options to add to COMPILE_FLAGS property |
||||
################################################################################ |
||||
function(source_file_compile_options SOURCE_FILE) |
||||
if("${ARGC}" LESS_EQUAL "1") |
||||
return() |
||||
endif() |
||||
|
||||
get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS) |
||||
|
||||
if(COMPILE_OPTIONS) |
||||
list(APPEND COMPILE_OPTIONS ${ARGN}) |
||||
else() |
||||
set(COMPILE_OPTIONS "${ARGN}") |
||||
endif() |
||||
|
||||
set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}") |
||||
endfunction() |
||||
|
||||
################################################################################ |
||||
# Default properties of visual studio projects |
||||
################################################################################ |
||||
set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake") |
||||
|
||||
function(get_linux_lsb_release_information) |
||||
find_program(LSB_RELEASE_EXEC lsb_release) |
||||
if(NOT LSB_RELEASE_EXEC) |
||||
message(FATAL_ERROR "Could not detect lsb_release executable, can not gather required information") |
||||
endif() |
||||
|
||||
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE) |
||||
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE) |
||||
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --codename OUTPUT_VARIABLE LSB_RELEASE_CODENAME_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE) |
||||
|
||||
set(LSB_RELEASE_ID_SHORT "${LSB_RELEASE_ID_SHORT}" PARENT_SCOPE) |
||||
set(LSB_RELEASE_VERSION_SHORT "${LSB_RELEASE_VERSION_SHORT}" PARENT_SCOPE) |
||||
set(LSB_RELEASE_CODENAME_SHORT "${LSB_RELEASE_CODENAME_SHORT}" PARENT_SCOPE) |
||||
endfunction() |
@ -0,0 +1,191 @@
@@ -0,0 +1,191 @@
|
||||
#------------------------------------------------------------------------------------------------------------ |
||||
# |
||||
# Automate-VCPKG by Andre Taulien |
||||
# =============================== |
||||
# |
||||
# Project Repository: https://github.com/REGoth-project/Automate-VCPKG |
||||
# License ..........: MIT, see end of file. |
||||
# |
||||
# Based on: https://github.com/sutambe/cpptruths/blob/vcpkg_cmake_blog/cpp0x/vcpkg_test/CMakeLists.txt |
||||
# |
||||
# |
||||
# While [Vcpkg](https://github.com/microsoft/vcpkg) on it's own is awesome, it does add |
||||
# a little bit of complexity to getting a project to build. Even more if the one trying |
||||
# to compile your application is not too fond of the commandline. Additionally, CMake |
||||
# commands tend to get rather long with the toolchain path. |
||||
# |
||||
# To keep things simple for new users who just want to get the project to build, this |
||||
# script offers a solution. |
||||
# |
||||
# Lets assume your main `CMakelists.txt` looks something like this: |
||||
# |
||||
# cmake_minimum_required (VERSION 3.12.0) |
||||
# project (MyProject) |
||||
# |
||||
# add_executable(MyExecutable main.c) |
||||
# |
||||
# To integrate Vcpkg into that `CMakelists.txt`, simple put the following lines before the |
||||
# call to `project(MyProject)`: |
||||
# |
||||
# include(cmake/automate-vcpkg.cmake) |
||||
# |
||||
# vcpkg_bootstrap() |
||||
# vcpkg_install_packages(libsquish physfs) |
||||
# |
||||
# The call to `vcpkg_bootstrap()` will clone the official Vcpkg repository and bootstrap it. |
||||
# If it detected an existing environment variable defining a valid `VCPKG_ROOT`, it will |
||||
# update the existing installation of Vcpkg. |
||||
# |
||||
# Arguments to `vcpkg_install_packages()` are the packages you want to install using Vcpkg. |
||||
# |
||||
# If you want to keep the possibility for users to chose their own copy of Vcpkg, you can |
||||
# simply not run the code snippet mentioned above, something like this will work: |
||||
# |
||||
# option(SKIP_AUTOMATE_VCPKG "When ON, you will need to built the packages |
||||
# required by MyProject on your own or supply your own vcpkg toolchain.") |
||||
# |
||||
# if (NOT SKIP_AUTOMATE_VCPKG) |
||||
# include(cmake/automate-vcpkg.cmake) |
||||
# |
||||
# vcpkg_bootstrap() |
||||
# vcpkg_install_packages(libsquish physfs) |
||||
# endif() |
||||
# |
||||
# Then, the user has to supply the packages on their own, be it through Vcpkg or manually |
||||
# specifying their locations. |
||||
#------------------------------------------------------------------------------------------------------------ |
||||
|
||||
cmake_minimum_required (VERSION 3.12) |
||||
|
||||
if(WIN32) |
||||
set(VCPKG_FALLBACK_ROOT ${CMAKE_CURRENT_BINARY_DIR}/vcpkg CACHE STRING "vcpkg configuration directory to use if vcpkg was not installed on the system before") |
||||
else() |
||||
set(VCPKG_FALLBACK_ROOT ${CMAKE_CURRENT_BINARY_DIR}/.vcpkg CACHE STRING "vcpkg configuration directory to use if vcpkg was not installed on the system before") |
||||
endif() |
||||
|
||||
# On Windows, Vcpkg defaults to x86, even on x64 systems. If we're |
||||
# doing a 64-bit build, we need to fix that. |
||||
if (WIN32) |
||||
|
||||
# Since the compiler checks haven't run yet, we need to figure |
||||
# out the value of CMAKE_SIZEOF_VOID_P ourselfs |
||||
|
||||
include(CheckTypeSize) |
||||
enable_language(C) |
||||
check_type_size("void*" SIZEOF_VOID_P BUILTIN_TYPES_ONLY) |
||||
|
||||
if (SIZEOF_VOID_P EQUAL 8) |
||||
message(STATUS "Using Vcpkg triplet 'x64-windows'") |
||||
|
||||
set(VCPKG_TRIPLET x64-windows) |
||||
endif() |
||||
endif() |
||||
|
||||
if(NOT DEFINED VCPKG_ROOT) |
||||
if(NOT DEFINED ENV{VCPKG_ROOT}) |
||||
set(VCPKG_ROOT ${VCPKG_FALLBACK_ROOT}) |
||||
else() |
||||
set(VCPKG_ROOT $ENV{VCPKG_ROOT}) |
||||
endif() |
||||
endif() |
||||
|
||||
# Installs a new copy of Vcpkg or updates an existing one |
||||
macro(vcpkg_bootstrap) |
||||
_install_or_update_vcpkg() |
||||
|
||||
# Find out whether the user supplied their own VCPKG toolchain file |
||||
if(NOT DEFINED ${CMAKE_TOOLCHAIN_FILE}) |
||||
# We know this wasn't set before so we need point the toolchain file to the newly found VCPKG_ROOT |
||||
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake CACHE STRING "") |
||||
|
||||
# Just setting vcpkg.cmake as toolchain file does not seem to actually pull in the code |
||||
include(${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake) |
||||
|
||||
set(AUTOMATE_VCPKG_USE_SYSTEM_VCPKG OFF) |
||||
else() |
||||
# VCPKG_ROOT has been defined by the toolchain file already |
||||
set(AUTOMATE_VCPKG_USE_SYSTEM_VCPKG ON) |
||||
endif() |
||||
|
||||
message(STATUS "Automate VCPKG status:") |
||||
message(STATUS " VCPKG_ROOT.....: ${VCPKG_ROOT}") |
||||
message(STATUS " VCPKG_EXEC.....: ${VCPKG_EXEC}") |
||||
message(STATUS " VCPKG_BOOTSTRAP: ${VCPKG_BOOTSTRAP}") |
||||
endmacro() |
||||
|
||||
macro(_install_or_update_vcpkg) |
||||
if(NOT EXISTS ${VCPKG_ROOT}) |
||||
message(STATUS "Cloning vcpkg in ${VCPKG_ROOT}") |
||||
execute_process(COMMAND git clone https://github.com/Microsoft/vcpkg.git ${VCPKG_ROOT}) |
||||
|
||||
# If a reproducible build is desired (and potentially old libraries are # ok), uncomment the |
||||
# following line and pin the vcpkg repository to a specific githash. |
||||
# execute_process(COMMAND git checkout 745a0aea597771a580d0b0f4886ea1e3a94dbca6 WORKING_DIRECTORY ${VCPKG_ROOT}) |
||||
else() |
||||
# The following command has no effect if the vcpkg repository is in a detached head state. |
||||
message(STATUS "Auto-updating vcpkg in ${VCPKG_ROOT}") |
||||
execute_process(COMMAND git pull WORKING_DIRECTORY ${VCPKG_ROOT}) |
||||
endif() |
||||
|
||||
if(NOT EXISTS ${VCPKG_ROOT}/README.md) |
||||
message(FATAL_ERROR "***** FATAL ERROR: Could not clone vcpkg *****") |
||||
endif() |
||||
|
||||
if(WIN32) |
||||
set(VCPKG_EXEC ${VCPKG_ROOT}/vcpkg.exe) |
||||
set(VCPKG_BOOTSTRAP ${VCPKG_ROOT}/bootstrap-vcpkg.bat) |
||||
else() |
||||
set(VCPKG_EXEC ${VCPKG_ROOT}/vcpkg) |
||||
set(VCPKG_BOOTSTRAP ${VCPKG_ROOT}/bootstrap-vcpkg.sh) |
||||
endif() |
||||
|
||||
if(NOT EXISTS ${VCPKG_EXEC}) |
||||
message("Bootstrapping vcpkg in ${VCPKG_ROOT}") |
||||
execute_process(COMMAND ${VCPKG_BOOTSTRAP} WORKING_DIRECTORY ${VCPKG_ROOT}) |
||||
endif() |
||||
|
||||
if(NOT EXISTS ${VCPKG_EXEC}) |
||||
message(FATAL_ERROR "***** FATAL ERROR: Could not bootstrap vcpkg *****") |
||||
endif() |
||||
|
||||
endmacro() |
||||
|
||||
# Installs the list of packages given as parameters using Vcpkg |
||||
macro(vcpkg_install_packages) |
||||
|
||||
# Need the given list to be space-separated |
||||
#string (REPLACE ";" " " PACKAGES_LIST_STR "${ARGN}") |
||||
|
||||
message(STATUS "Installing/Updating the following vcpkg-packages: ${PACKAGES_LIST_STR}") |
||||
|
||||
if (VCPKG_TRIPLET) |
||||
set(ENV{VCPKG_DEFAULT_TRIPLET} "${VCPKG_TRIPLET}") |
||||
endif() |
||||
|
||||
execute_process( |
||||
COMMAND ${VCPKG_EXEC} install ${ARGN} |
||||
WORKING_DIRECTORY ${VCPKG_ROOT} |
||||
) |
||||
endmacro() |
||||
|
||||
# MIT License |
||||
# |
||||
# Copyright (c) 2019 REGoth-project |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
# of this software and associated documentation files (the "Software"), to deal |
||||
# in the Software without restriction, including without limitation the rights |
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
# copies of the Software, and to permit persons to whom the Software is |
||||
# furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included in all |
||||
# copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
# SOFTWARE. |
@ -0,0 +1,192 @@
@@ -0,0 +1,192 @@
|
||||
cmake_minimum_required(VERSION 3.19.0 FATAL_ERROR) |
||||
|
||||
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE) |
||||
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use") |
||||
#set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard to use") - issue with soh compile with MSVC |
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
||||
set(MACOSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) |
||||
endif() |
||||
|
||||
project(Ship C CXX) |
||||
|
||||
set(PROJECT_VERSION_MAJOR "3") |
||||
set(PROJECT_VERSION_MINOR "0") |
||||
set(PROJECT_VERSION_PATCH "0") |
||||
|
||||
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT soh) |
||||
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>) |
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows") |
||||
include(cmake/automate-vcpkg.cmake) |
||||
|
||||
vcpkg_bootstrap() |
||||
vcpkg_install_packages(zlib bzip2 libpng) |
||||
endif() |
||||
|
||||
################################################################################ |
||||
# Set target arch type if empty. Visual studio solution generator provides it. |
||||
################################################################################ |
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows") |
||||
if(NOT CMAKE_VS_PLATFORM_NAME) |
||||
set(CMAKE_VS_PLATFORM_NAME "x64") |
||||
endif() |
||||
message("${CMAKE_VS_PLATFORM_NAME} architecture in use") |
||||
|
||||
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64" |
||||
OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")) |
||||
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!") |
||||
endif() |
||||
endif() |
||||
|
||||
################################################################################ |
||||
# Global configuration types |
||||
################################################################################ |
||||
set(CMAKE_CONFIGURATION_TYPES |
||||
"Debug" |
||||
"Release" |
||||
CACHE STRING "" FORCE |
||||
) |
||||
|
||||
if(NOT CMAKE_BUILD_TYPE ) |
||||
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE) |
||||
endif() |
||||
|
||||
################################################################################ |
||||
# Global compiler options |
||||
################################################################################ |
||||
if(MSVC) |
||||
# remove default flags provided with CMake for MSVC |
||||
set(CMAKE_C_FLAGS "") |
||||
set(CMAKE_C_FLAGS_DEBUG "") |
||||
set(CMAKE_C_FLAGS_RELEASE "") |
||||
set(CMAKE_CXX_FLAGS "") |
||||
set(CMAKE_CXX_FLAGS_DEBUG "") |
||||
set(CMAKE_CXX_FLAGS_RELEASE "") |
||||
endif() |
||||
|
||||
################################################################################ |
||||
# Global linker options |
||||
################################################################################ |
||||
if(MSVC) |
||||
# remove default flags provided with CMake for MSVC |
||||
set(CMAKE_EXE_LINKER_FLAGS "") |
||||
set(CMAKE_MODULE_LINKER_FLAGS "") |
||||
set(CMAKE_SHARED_LINKER_FLAGS "") |
||||
set(CMAKE_STATIC_LINKER_FLAGS "") |
||||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}") |
||||
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}") |
||||
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}") |
||||
set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}") |
||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}") |
||||
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}") |
||||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}") |
||||
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}") |
||||
endif() |
||||
|
||||
################################################################################ |
||||
# Common utils |
||||
################################################################################ |
||||
include(CMake/Utils.cmake) |
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux") |
||||
get_linux_lsb_release_information() |
||||
message(STATUS "Linux ${LSB_RELEASE_ID_SHORT} ${LSB_RELEASE_VERSION_SHORT} ${LSB_RELEASE_CODENAME_SHORT}") |
||||
else() |
||||
message(STATUS ${CMAKE_SYSTEM_NAME}) |
||||
endif() |
||||
|
||||
################################################################################ |
||||
# Additional Global Settings(add specific info there) |
||||
################################################################################ |
||||
include(CMake/GlobalSettingsInclude.cmake OPTIONAL) |
||||
|
||||
################################################################################ |
||||
# Use solution folders feature |
||||
################################################################################ |
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
||||
|
||||
################################################################################ |
||||
# Sub-projects |
||||
################################################################################ |
||||
add_subdirectory(libultraship/libultraship ${CMAKE_BINARY_DIR}/libultraship) |
||||
add_subdirectory(ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD) |
||||
add_subdirectory(ZAPDTR/ZAPDUtils ${CMAKE_BINARY_DIR}/ZAPDUtils) |
||||
add_subdirectory(OTRExporter) |
||||
add_subdirectory(soh) |
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|NintendoSwitch") |
||||
add_subdirectory(OTRGui) |
||||
endif() |
||||
|
||||
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL YES) |
||||
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.desktop") |
||||
set_property(TARGET soh PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon.png") |
||||
|
||||
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") |
||||
INSTALL(PROGRAMS "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.sh" DESTINATION . COMPONENT appimage) |
||||
endif() |
||||
|
||||
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py filedata) |
||||
string(REGEX REPLACE "../ZAPDTR/ZAPD.out" "${CMAKE_BINARY_DIR}/ZAPD/ZAPD.out" filedata "${filedata}") |
||||
string(REGEX REPLACE "x64" "..\\\\\\\\x64" filedata "${filedata}") |
||||
string(REGEX REPLACE "Release" "${CMAKE_BUILD_TYPE}" filedata "${filedata}") |
||||
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets_cmake2.py" "${filedata}") |
||||
file(CHMOD "${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets_cmake2.py" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) |
||||
|
||||
find_package(Python3 COMPONENTS Interpreter) |
||||
|
||||
add_custom_target( |
||||
ExtractAssets |
||||
COMMAND ${CMAKE_COMMAND} -E rm -f oot.otr |
||||
COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets_cmake2.py |
||||
COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${CMAKE_SOURCE_DIR} |
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter |
||||
COMMENT "Running asset extraction..." |
||||
DEPENDS ZAPD |
||||
|
||||
) |
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux") |
||||
find_package(ImageMagick COMPONENTS convert) |
||||
if (ImageMagick_FOUND) |
||||
execute_process ( |
||||
COMMAND ${ImageMagick_convert_EXECUTABLE} soh/macosx/sohIcon.png -resize 512x512 ${CMAKE_BINARY_DIR}/sohIcon.png |
||||
OUTPUT_VARIABLE outVar |
||||
) |
||||
endif() |
||||
endif() |
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin") |
||||
add_custom_target(CreateOSXIcons |
||||
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/macosx/soh.iconset |
||||
COMMAND sips -z 16 16 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16.png |
||||
COMMAND sips -z 32 32 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16@2x.png |
||||
COMMAND sips -z 32 32 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32.png |
||||
COMMAND sips -z 64 64 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32@2x.png |
||||
COMMAND sips -z 128 128 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128.png |
||||
COMMAND sips -z 256 256 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128@2x.png |
||||
COMMAND sips -z 256 256 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256.png |
||||
COMMAND sips -z 512 512 soh/macosx/sohIcon.png --out $ |