diff options
Diffstat (limited to 'core/CMakeLists.txt')
-rw-r--r-- | core/CMakeLists.txt | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt new file mode 100644 index 0000000..f2077a3 --- /dev/null +++ b/core/CMakeLists.txt @@ -0,0 +1,99 @@ +project(CpltCore LANGUAGES CXX) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +function(add_source_group GROUP_NAME GROUP_SOURCES) + set(${GROUP_NAME} ${GROUP_SOURCES}) + set_source_files_properties(${GROUP_SOURCES} + PROPERTIES + UNITY_GROUP "${GROUP_NAME}" + ) +endfunction() + +set(ENTRYPOINT_MODULE_SOURCES +) + +add_source_group(UI_MODULE_SOURCES +) + +add_source_group(UTILS_MODULE_SOURCES + src/Utils/Enum.hpp + src/Utils/I18n.hpp + src/Utils/I18n.cpp + src/Utils/Sigslot.hpp + src/Utils/Sigslot.cpp + src/Utils/String.hpp + src/Utils/String.cpp +) + +# These files are compiled individually, hence no UNITY_GROUP property +# This is because the files here may contain non-c++ languages +set(UTILS_DIALOG_MODULE_SOURCES + src/Utils/Dialog/Dialog.hpp + src/Utils/Dialog/Dialog.cpp +) +if(APPLE) + list(APPEND UTILS_DIALOG_MODULE_SOURCES + src/Utils/Dialog/Dialog_macos.mm + ) +elseif(WIN32) + list(APPEND UTILS_DIALOG_MODULE_SOURCES + src/Utils/Dialog/Dialog_win32.cpp + ) +elseif(LINUX) + list(APPEND UTILS_DIALOG_MODULE_SOURCES + src/Utils/Dialog/Dialog_linux.cpp + ) +endif() + +function(add_executable_variant TARGET_NAME) + message("CpltCore: generating executable ${TARGET_NAME}") + + add_executable(${TARGET_NAME} + ${ENTRYPOINT_MODULE_SOURCES} + ${UI_MODULE_SOURCES} + ${UTILS_MODULE_SOURCES} + ${UTILS_DIALOG_MODULE_SOURCES} + ) + target_include_directories(${TARGET_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src + ${CMAKE_SOURCE_DIR}/3rdparty/imgui + ${CMAKE_SOURCE_DIR}/3rdparty/imnodes + ) + target_link_libraries(${TARGET_NAME} PRIVATE ${CONAN_LIBS}) + target_compile_definitions(${TARGET_NAME} + PRIVATE + PLATFORM_WIN32=$<BOOL:${WIN32}> + PLATFORM_MACOS=$<BOOL:${APPLE}> + PLATFORM_LINUX=$<BOOL:${LINUX}> + ) + + # No console window when targetting windows + if(WIN32) + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # Supposedly the flag -mwindows would automatically make the executable use GUI subsystem + # But, when subsystem is set to GUI, linker will only search WinMain and wWinMain but not the standard main (it seems like) + # so creating GUI executable fails and the linker silently reverts to the default, CUI subsystem + target_link_options(${TARGET_NAME} PRIVATE -Wl,-subsystem:windows) + target_link_options(${TARGET_NAME} PRIVATE -Wl,-entry:mainCRTStartup) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + target_link_options(${TARGET_NAME} PRIVATE /SUBSYSTEM:windows /ENTRY:mainCRTStartup) + endif() + endif() + + if(${CMAKE_UNITY_BUILD}) + message("CpltCore: - using unity build") + set_target_properties(${TARGET_NAME} + PROPERTIES + # UNITY_BUILD property is automatically set when CMAKE_UNITY_BUILD is set + UNITY_BUILD_MODE GROUP + ) + else() + message("CpltCore: - using regular build") + endif() +endfunction() + +add_executable_variant(CpltCore_main) +target_compile_definitions(CpltCore_main PRIVATE DOCTEST_CONFIG_DISABLE=1) + +add_executable_variant(CpltCore_test) |