aboutsummaryrefslogtreecommitdiff
path: root/core/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'core/CMakeLists.txt')
-rw-r--r--core/CMakeLists.txt99
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)