-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
165 lines (145 loc) · 5.44 KB
/
Copy pathCMakeLists.txt
File metadata and controls
165 lines (145 loc) · 5.44 KB
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
cmake_minimum_required(VERSION 3.14)
project(frame DESCRIPTION "Frame Graphic Library." LANGUAGES CXX)
function(frame_enable_internal_backend_access target_name)
target_compile_definitions(${target_name}
PRIVATE
FRAME_INTERNAL_BACKEND_ACCESS)
endfunction()
# To put executables next to the runtime libraries generated by conan.
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# For fPIC / position independent code.
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# C++ standard version.
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(MSVC)
add_compile_options(/FS)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
"$<$<CONFIG:Debug>:Embedded>$<$<CONFIG:RelWithDebInfo>:ProgramDatabase>")
endif()
# Adding subfolder property.
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Enable testing.
set(CMAKE_CTEST_ARGUMENTS "--output-on-failure")
enable_testing()
# External packages.
find_package(absl CONFIG REQUIRED)
find_package(assimp CONFIG REQUIRED)
find_package(glad CONFIG REQUIRED)
find_package(glm CONFIG REQUIRED)
find_package(GTest CONFIG REQUIRED)
find_package(protobuf CONFIG REQUIRED)
find_package(SDL3 CONFIG REQUIRED)
find_package(spdlog CONFIG REQUIRED)
find_package(imgui CONFIG REQUIRED)
find_package(shaderc CONFIG QUIET)
if(NOT shaderc_FOUND)
find_package(unofficial-shaderc CONFIG REQUIRED)
if(NOT TARGET shaderc::shaderc_combined)
if(TARGET unofficial::shaderc::shaderc_combined)
add_library(shaderc::shaderc_combined INTERFACE IMPORTED)
target_link_libraries(shaderc::shaderc_combined INTERFACE unofficial::shaderc::shaderc_combined)
elseif(TARGET unofficial::shaderc::shaderc)
add_library(shaderc::shaderc_combined INTERFACE IMPORTED)
target_link_libraries(shaderc::shaderc_combined INTERFACE unofficial::shaderc::shaderc)
endif()
endif()
if(NOT TARGET shaderc::shaderc_shared AND TARGET unofficial::shaderc::shaderc_shared)
add_library(shaderc::shaderc_shared INTERFACE IMPORTED)
target_link_libraries(shaderc::shaderc_shared INTERFACE unofficial::shaderc::shaderc_shared)
endif()
endif()
find_package(Vulkan REQUIRED)
if(UNIX AND NOT APPLE AND TARGET Vulkan::Vulkan)
set(_frame_vulkan_system_loader "")
set(_frame_vulkan_system_candidates
/usr/lib/x86_64-linux-gnu/libvulkan.so.1
/usr/lib/x86_64-linux-gnu/libvulkan.so
/usr/lib/aarch64-linux-gnu/libvulkan.so.1
/usr/lib/aarch64-linux-gnu/libvulkan.so
/usr/lib64/libvulkan.so.1
/usr/lib64/libvulkan.so
/usr/lib/libvulkan.so.1
/usr/lib/libvulkan.so
/lib64/libvulkan.so.1
/lib64/libvulkan.so
/lib/libvulkan.so.1
/lib/libvulkan.so)
if(CMAKE_LIBRARY_ARCHITECTURE)
list(PREPEND _frame_vulkan_system_candidates
/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libvulkan.so.1
/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libvulkan.so
/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libvulkan.so.1
/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libvulkan.so)
endif()
foreach(_frame_vulkan_system ${_frame_vulkan_system_candidates})
if(EXISTS "${_frame_vulkan_system}")
set(_frame_vulkan_system_loader "${_frame_vulkan_system}")
break()
endif()
endforeach()
foreach(_frame_vulkan_prop IN ITEMS "" "_DEBUG" "_RELEASE" "_RELWITHDEBINFO" "_MINSIZEREL")
if(_frame_vulkan_prop STREQUAL "")
get_target_property(_frame_vulkan_loc Vulkan::Vulkan IMPORTED_LOCATION)
else()
get_target_property(_frame_vulkan_loc Vulkan::Vulkan "IMPORTED_LOCATION${_frame_vulkan_prop}")
endif()
if(NOT _frame_vulkan_loc)
continue()
endif()
set(_frame_vulkan_should_override OFF)
if(NOT EXISTS "${_frame_vulkan_loc}")
set(_frame_vulkan_should_override ON)
elseif(_frame_vulkan_loc MATCHES "/vcpkg_installed/.*/(debug/)?lib/")
set(_frame_vulkan_should_override ON)
endif()
if(_frame_vulkan_should_override AND _frame_vulkan_system_loader)
if(_frame_vulkan_prop STREQUAL "")
set_property(TARGET Vulkan::Vulkan PROPERTY IMPORTED_LOCATION "${_frame_vulkan_system_loader}")
set_property(TARGET Vulkan::Vulkan PROPERTY IMPORTED_SONAME "")
else()
set_property(TARGET Vulkan::Vulkan PROPERTY "IMPORTED_LOCATION${_frame_vulkan_prop}" "${_frame_vulkan_system_loader}")
set_property(TARGET Vulkan::Vulkan PROPERTY "IMPORTED_SONAME${_frame_vulkan_prop}" "")
endif()
endif()
endforeach()
if(_frame_vulkan_system_loader)
message(STATUS "System Vulkan loader configured at ${_frame_vulkan_system_loader}")
endif()
unset(_frame_vulkan_loc)
unset(_frame_vulkan_prop)
unset(_frame_vulkan_system_loader)
endif()
if(UNIX AND NOT APPLE)
set(FRAME_LINK_GROUP_BEGIN "-Wl,--start-group")
set(FRAME_LINK_GROUP_END "-Wl,--end-group")
endif()
set(FRAME_CORE_LIBS
Frame
FrameFile
FrameJson
FrameOpenGL
FrameOpenGLFile
FrameOpenGLGui
# Keep both Vulkan static archives inside the final GNU ld rescan group.
FrameVulkan
FrameVulkanJson
FrameVulkanGui
FrameGui
FrameProto
)
set(FRAME_VULKAN_LIBS
FrameVulkan
)
# Sources.
add_subdirectory(external/ImGuiColorTextEdit)
set_property(TARGET ImGuiColorTextEdit PROPERTY FOLDER "external/ImGuiColorTextEditor")
add_subdirectory(asset/shader/opengl)
add_subdirectory(asset/shader/vulkan)
add_subdirectory(asset/json)
add_subdirectory(frame)
add_subdirectory(examples)
add_subdirectory(tools/model_converter)
add_subdirectory(tests/frame)