aboutsummaryrefslogtreecommitdiff
path: root/app/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'app/CMakeLists.txt')
-rw-r--r--app/CMakeLists.txt184
1 files changed, 184 insertions, 0 deletions
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
new file mode 100644
index 0000000..e898800
--- /dev/null
+++ b/app/CMakeLists.txt
@@ -0,0 +1,184 @@
+option(BUILD_CORE_TESTS "Whether to make executable tests or not." OFF)
+
+set(TARGET_LOCALE "en_US" CACHE STRING "Locale to build.")
+
+option(BUILD_CORE_WITH_OPENGL2_BACKEND ON)
+option(BUILD_CORE_WITH_OPENGL3_BACKEND ON)
+option(BUILD_CORE_WITH_VULKAN_BACKEND ON)
+if(WIN32)
+ option(BUILD_CORE_WITH_DX11_BACKEND ON)
+ option(BUILD_CORE_WITH_DX12_BACKEND ON)
+elseif(APPLE)
+ option(BUILD_CORE_WITH_METAL_BACKEND ON)
+endif()
+
+message("CpltCore: generating executable CpltCore")
+
+if(BUILD_CORE_WITH_OPENGL2_BACKEND OR
+ BUILD_CORE_WITH_OPENGL3_BACKEND OR
+ BUILD_CORE_WITH_VULKAN_BACKEND OR
+ BUILD_CORE_WITH_METAL_BACKEND)
+ list(APPEND CPLT_CORE_SOURCES_SPECIAL
+ ${CMAKE_SOURCE_DIR}/3rdparty/imgui/backend/imgui_impl_glfw.cpp
+)
+endif()
+if(BUILD_CORE_WITH_DX11_BACKEND OR BUILD_CORE_WITH_DX12_BACKEND)
+ list(APPEND CPLT_CORE_SOURCES_SPECIAL
+ ${CMAKE_SOURCE_DIR}/3rdparty/imgui/backend/imgui_impl_win32.cpp
+ )
+endif()
+
+file(GLOB_RECURSE CPLT_CORE_SOURCES_NORMAL
+ ${CMAKE_CURRENT_LIST_DIR}/source/*.h
+ ${CMAKE_CURRENT_LIST_DIR}/source/*.c
+ ${CMAKE_CURRENT_LIST_DIR}/source/*.m
+ ${CMAKE_CURRENT_LIST_DIR}/source/*.hpp
+ ${CMAKE_CURRENT_LIST_DIR}/source/*.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/source/*.mm
+)
+
+add_executable(CpltCore ${CPLT_CORE_SOURCES_SPECIAL} ${CPLT_CORE_SOURCES_NORMAL})
+set_target_properties(CpltCore
+PROPERTIES
+ CXX_STANDARD 20
+ CXX_STANDARD_REQUIRED ON
+ CXX_EXTENSIONS OFF
+)
+
+set(CPLT_CORE_SOURCES_NORMAL_UNITY_EXCLUDED
+ source/Cplt/Entrypoint/main.cpp
+ source/Cplt/Entrypoint/Backend_OpenGL2.cpp
+ source/Cplt/Entrypoint/Backend_OpenGL3.cpp
+ source/Cplt/Entrypoint/Backend_Vulkan.cpp
+ source/Cplt/Entrypoint/Backend_DirectX11.cpp
+ source/Cplt/Entrypoint/Backend_DirectX12.cpp
+ source/Cplt/Entrypoint/Backend_Metal.mm
+ source/Cplt/UI/UI_DatabaseView.cpp
+ source/Cplt/UI/UI_Items.cpp
+ source/Cplt/UI/UI_MainWindow.cpp
+ source/Cplt/UI/UI_Settings.cpp
+ source/Cplt/UI/UI_Templates.cpp
+ source/Cplt/UI/UI_Utils.cpp
+ source/Cplt/UI/UI_Workflows.cpp
+ source/Cplt/Utils/IO/FileStream.cpp
+)
+set_source_files_properties(
+ ${CPLT_CORE_SOURCES_SPECIAL}
+ ${CPLT_CORE_SOURCES_NORMAL_UNITY_EXCLUDED}
+PROPERTIES
+ SKIP_UNITY_BUILD_INCLUSION ON
+)
+
+target_include_directories(CpltCore PRIVATE
+ ${CMAKE_CURRENT_LIST_DIR}/source
+)
+target_link_libraries(CpltCore
+PRIVATE
+ ${CONAN_LIBS}
+ icon-font-headers
+ imgui
+ implot
+ imgui-node-editor
+ SQLiteCpp
+)
+
+if(NOT BUILD_CORE_TESTS)
+ target_compile_definitions(CpltCore PRIVATE DOCTEST_CONFIG_DISABLE=1)
+endif()
+
+if(NOT TARGET_LOCALE STREQUAL "en_US")
+ target_compile_definitions(CpltCore
+ PRIVATE
+ TARGET_LOCALE=${TARGET_LOCALE}
+ TARGET_LOCALE_FILE="Locale/${TARGET_LOCALE}.h"
+ )
+endif()
+
+if(WIN32)
+ message("CpltCore: - building with DirectX11 backend ${BUILD_CORE_WITH_DX11_BACKEND}")
+ message("CpltCore: - building with DirectX12 backend ${BUILD_CORE_WITH_DX12_BACKEND}")
+ target_compile_definitions(CpltCore
+ PRIVATE
+ BUILD_CORE_WITH_DX11_BACKEND=$<BOOL:${BUILD_CORE_WITH_DX11_BACKEND}>
+ BUILD_CORE_WITH_DX12_BACKEND=$<BOOL:${BUILD_CORE_WITH_DX12_BACKEND}>
+ )
+
+ if(BUILD_CORE_WITH_DX11_BACKEND)
+ target_link_libraries(CpltCore PRIVATE dxgi.lib d3d11.lib)
+ endif()
+ if(BUILD_CORE_WITH_DX12_BACKEND)
+ target_link_libraries(CpltCore PRIVATE dxgi.lib d3d12.lib)
+ endif()
+endif()
+
+if(APPLE)
+ message("CpltCore: - building with Metal backend ${BUILD_CORE_WITH_METAL_BACKEND}")
+ target_compile_definitions(CpltCore
+ PRIVATE
+ BUILD_CORE_WITH_METAL_BACKEND=$<BOOL:${BUILD_CORE_WITH_METAL_BACKEND}>
+ )
+endif()
+
+if(NOT APPLE)
+ message("CpltCore: - building with OpenGL2 backend ${BUILD_CORE_WITH_OPENGL2_BACKEND}")
+ message("CpltCore: - building with OpenGL3 backend ${BUILD_CORE_WITH_OPENGL3_BACKEND}")
+ message("CpltCore: - building with Vulkan backend ${BUILD_CORE_WITH_VULKAN_BACKEND}")
+ target_compile_definitions(CpltCore
+ PRIVATE
+ BUILD_CORE_WITH_OPENGL2_BACKEND=$<BOOL:${BUILD_CORE_WITH_OPENGL2_BACKEND}>
+ BUILD_CORE_WITH_OPENGL3_BACKEND=$<BOOL:${BUILD_CORE_WITH_OPENGL3_BACKEND}>
+ BUILD_CORE_WITH_VULKAN_BACKEND=$<BOOL:${BUILD_CORE_WITH_VULKAN_BACKEND}>
+ )
+
+ # TODO conditionally add opengl libraries
+ if(BUILD_CORE_WITH_VULKAN_BACKEND)
+ find_package(Vulkan REQUIRED FATAL_ERROR)
+ target_include_directories(CpltCore PRIVATE ${Vulkan_INCLUDE_DIRS})
+ target_link_libraries(CpltCore PRIVATE ${Vulkan_LIBRARIES})
+ endif()
+endif()
+
+if(WIN32)
+ function(handle_gnu_style_compiler)
+ # No console window when targeting windows
+ # 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(CpltCore PRIVATE -Wl,-subsystem:windows)
+ target_link_options(CpltCore PRIVATE -Wl,-entry:mainCRTStartup)
+ endfunction()
+
+ function(handle_msvc_style_compiler)
+ # No console window when targeting windows
+ target_link_options(CpltCore PRIVATE /SUBSYSTEM:windows /ENTRY:mainCRTStartup)
+ endfunction()
+
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ # GCC (MinGW)
+ handle_gnu_style_compiler()
+ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
+ # MSVC-style argument clang (clang-cl.exe)
+ handle_msvc_style_compiler()
+ elseif(CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
+ # GNU-style argument clang (clang.exe and clang++.exe)
+ handle_gnu_style_compiler()
+ endif()
+ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+ handle_msvc_style_compiler()
+
+ # Use updated __cplusplus macro
+ # https://docs.microsoft.com/en-us/cpp/build/reference/zc-cplusplus
+ target_compile_options(CpltCore PUBLIC /Zc:__cplusplus)
+ endif()
+endif()
+
+if(CMAKE_UNITY_BUILD)
+ message("CpltCore: - using unity build")
+ set_target_properties(CpltCore PROPERTIES
+ UNITY_BUILD_MODE BATCH
+ UNITY_BUILD_UNIQUE_ID "CPLT_UNITY_ID"
+ )
+else()
+ message("CpltCore: - using regular build")
+endif()