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=$ PLATFORM_MACOS=$ PLATFORM_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)