blob: 0eb4900bb8c045d04cb198cd66ecd287d6720032 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
option(BUILD_CORE_WITH_UNITY_BUILD OFF)
option(BUILD_CORE_MAIN "Whether to compile the main executable or not." ON)
option(BUILD_CORE_TESTS "Whether to compile the tests executable or not." OFF)
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
src/Entrypoint/main.cpp
src/Entrypoint/Common.hpp
src/Entrypoint/Common.cpp
src/Entrypoint/OpenGL2.hpp
src/Entrypoint/OpenGL2.cpp
src/Entrypoint/OpenGL3.hpp
src/Entrypoint/OpenGL3.cpp
src/Entrypoint/Vulkan.hpp
src/Entrypoint/Vulkan.cpp
src/Entrypoint/DirectX11.hpp
src/Entrypoint/DirectX11.cpp
src/Entrypoint/DirectX12.hpp
src/Entrypoint/DirectX12.cpp
src/Entrypoint/Metal.hpp
src/Entrypoint/Metal.mm
)
add_source_group(UI_MODULE_SOURCES
src/UI/Export.hpp
src/UI/Export.cpp
)
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)
find_library(COCOA_LIBRARY Cocoa)
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)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
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}
imgui
imnodes
)
target_compile_definitions(${TARGET_NAME}
PRIVATE
PLATFORM_WIN32=$<BOOL:${WIN32}>
PLATFORM_MACOS=$<BOOL:${APPLE}>
PLATFORM_LINUX=$<BOOL:${LINUX}>
IMGUI_INCLUDE_OPENGL2_BACKEND=$<BOOL:${IMGUI_INCLUDE_OPENGL2_BACKEND}>
IMGUI_INCLUDE_OPENGL3_BACKEND=$<BOOL:${IMGUI_INCLUDE_OPENGL3_BACKEND}>
IMGUI_INCLUDE_VULKAN_BACKEND=$<BOOL:${IMGUI_INCLUDE_VULKAN_BACKEND}>
IMGUI_INCLUDE_DX11_BACKEND=$<BOOL:${IMGUI_INCLUDE_DX11_BACKEND}>
IMGUI_INCLUDE_DX12_BACKEND=$<BOOL:${IMGUI_INCLUDE_DX12_BACKEND}>
IMGUI_INCLUDE_METAL_BACKEND=$<BOOL:${IMGUI_INCLUDE_METAL_BACKEND}>
)
if(APPLE)
target_link_libraries(${TARGET_NAME} PUBLIC ${COCOA_LIBRARY})
elseif(LINUX)
target_link_libraries(${TARGET_NAME} PUBLIC ${GTK3_LIBRARIES})
target_include_directories(${TARGET_NAME} PRIVATE ${GTK3_INCLUDE_DIRS})
endif()
# 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(BUILD_CORE_WITH_UNITY_BUILD)
message("CpltCore: - using unity build")
set_target_properties(${TARGET_NAME}
PROPERTIES
UNITY_BUILD ON
UNITY_BUILD_MODE GROUP
)
else()
message("CpltCore: - using regular build")
endif()
endfunction()
if(BUILD_CORE_MAIN)
add_executable_variant(CpltCore_main)
target_compile_definitions(CpltCore_main PRIVATE DOCTEST_CONFIG_DISABLE=1)
endif()
if(BUILD_CORE_TESTS)
add_executable_variant(CpltCore_test)
endif()
|