-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
132 lines (111 loc) · 3.91 KB
/
Copy pathCMakeLists.txt
File metadata and controls
132 lines (111 loc) · 3.91 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
cmake_minimum_required(VERSION 3.20)
project(vix_engine VERSION 0.1.0 LANGUAGES CXX)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
option(VIX_ENGINE_BUILD_TESTS "Build Vix Engine tests" OFF)
option(VIX_ENGINE_FETCH_JSON "Auto-fetch nlohmann_json if vix::json is unavailable" ON)
if (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD)
set(VIX_ENGINE_EXPORT_SET VixTargets)
else()
set(VIX_ENGINE_EXPORT_SET vix_engineTargets)
endif()
if (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD)
if (NOT TARGET vix::json)
message(FATAL_ERROR "[engine] Umbrella build: vix::json must be provided before engine.")
endif()
else()
if (NOT TARGET vix::json)
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/../json/CMakeLists.txt")
set(VIX_JSON_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(VIX_JSON_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../json" "json")
else()
find_package(vix_json CONFIG QUIET)
endif()
endif()
if (NOT TARGET vix::json)
find_package(nlohmann_json QUIET CONFIG)
if (nlohmann_json_FOUND AND TARGET nlohmann_json::nlohmann_json)
add_library(vix_engine_json INTERFACE)
add_library(vix::json ALIAS vix_engine_json)
target_link_libraries(vix_engine_json INTERFACE nlohmann_json::nlohmann_json)
elseif (VIX_ENGINE_FETCH_JSON)
include(FetchContent)
FetchContent_Declare(
nlohmann_json_fallback
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(nlohmann_json_fallback)
add_library(vix_engine_json INTERFACE)
add_library(vix::json ALIAS vix_engine_json)
target_link_libraries(vix_engine_json INTERFACE nlohmann_json::nlohmann_json)
else()
message(FATAL_ERROR "vix::json or nlohmann_json is required by vix::engine.")
endif()
endif()
endif()
file(GLOB_RECURSE VIX_ENGINE_SOURCES CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
)
add_library(vix_engine STATIC ${VIX_ENGINE_SOURCES})
add_library(vix::engine ALIAS vix_engine)
target_compile_features(vix_engine PUBLIC cxx_std_20)
target_include_directories(vix_engine
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_link_libraries(vix_engine
PUBLIC
vix::json
)
set_target_properties(vix_engine PROPERTIES
OUTPUT_NAME vix_engine
VERSION ${PROJECT_VERSION}
SOVERSION 0
EXPORT_NAME engine
)
install(TARGETS vix_engine
EXPORT ${VIX_ENGINE_EXPORT_SET}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
if (NOT (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD))
install(DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h"
)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/vix_engineConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/vix_engineConfig.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/vix_engine"
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/vix_engineConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/vix_engineConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/vix_engineConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/vix_engine"
)
install(EXPORT vix_engineTargets
FILE vix_engineTargets.cmake
NAMESPACE vix::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/vix_engine"
)
endif()
if (VIX_ENGINE_BUILD_TESTS)
include(CTest)
enable_testing()
add_subdirectory(tests)
endif()
message(STATUS "vix::engine configured (${PROJECT_VERSION})")