-
Notifications
You must be signed in to change notification settings - Fork 62
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
140 lines (116 loc) · 4.24 KB
/
CMakeLists.txt
File metadata and controls
140 lines (116 loc) · 4.24 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
cmake_minimum_required(VERSION 3.20)
project(IXRay)
# CMake options
option(IXRAY_UTILS "Apply utils to solution" OFF)
option(IXRAY_EDITORS "Apply editors to solution" OFF)
option(IXRAY_MP "Apply multiplayer xrGame and multiplayer utilities to solution" OFF)
option(IXRAY_MP_SQL "Use SQL Database system for FreeMP mode" ON)
option(IXRAY_PLUGINS "Enable X-Ray Plugins" OFF)
option(IXRAY_ASAN "Enable Address Sanitizer" OFF)
option(IXRAY_LDEBUG "Enable LUA_DEBUG mode" OFF)
option(IXRAY_USE_R1 "Enable DirectX 9 static render" ON)
option(IXRAY_USE_R2 "Enable DirectX 9 dynamic render" ON)
option(IXRAY_USE_COMPRESSOR "Enable xrCompresor" ON)
option(IXRAY_UNITYBUILD "Enable UnityBuild for xrGame" ON)
option(IXRAY_PROFILER "Enable Optick for perf debug" OFF)
# CI trash
option(IXRAY_COMPRESSOR_ONLY "Build only compressor" OFF)
option(IXRAY_CI "GitHub Actions build" OFF)
set(IXR_TEST_CI NOT IXRAY_UTILS OR NOT IXRAY_CI)
# SDL stuff
set(SDL_STATIC OFF)
set(SDL_TEST_LIBRARY OFF)
set(SDL_SHARED ON)
# CMake Dev options
option(DEVIXRAY_ENABLE_SHIPPING "Enable shipping build cfg" OFF)
option(DEVIXRAY_ENABLE_OGL_RENDER "Enable OGL Render" OFF)
# CXX options
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if (MSVC)
include("cmake/msvc.cmake")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR NOT WIN32)
include("cmake/clang.cmake")
endif()
# Add new build types
include("cmake/shipping.cmake")
# Wrap CMake general configs
set(CMAKE_CONFIGURATION_TYPES ${IXR_CONFIGURATIONS_STR} CACHE STRING "" FORCE)
set(PREDEFINED_TARGETS_FOLDER "CustomTargets")
# ASan
if (IXRAY_ASAN)
add_compile_options(-fsanitize=address)
endif()
## Disable user-cheats for Release/Shipping build
add_compile_definitions("$<$<CONFIG:Debug>:DEBUG>")
add_compile_definitions("$<$<CONFIG:Debug>:DEBUG_DRAW>")
add_compile_definitions("$<$<CONFIG:RelWithDebInfo>:DEBUG_DRAW>")
add_compile_definitions("$<$<CONFIG:Release>:MASTER_GOLD>")
if (DEVIXRAY_ENABLE_SHIPPING)
add_compile_definitions("$<$<CONFIG:Shipping>:MASTER_GOLD>")
add_compile_definitions("$<$<CONFIG:Shipping>:SHIPPING_BUILD>")
endif()
# Download API from GitHub Releases
include("cmake/github.cmake")
# Help functions
function(target_copy_dependency TARGET_NAME FILE_PATH)
if(WIN32)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${FILE_PATH}
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/
)
else()
get_filename_component(FILE_NAME ${FILE_PATH} NAME)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Copying ${FILE_NAME}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${FILE_PATH}
$<TARGET_FILE_DIR:${TARGET_NAME}>/${FILE_NAME}
COMMENT "Copying ${FILE_NAME} to output directory"
)
endif()
endfunction()
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH})
# Configure NuGet
if (WIN32)
include("cmake/windows/nuget.cmake")
else()
include("cmake/linux/nuget.cmake")
endif()
# SDK folders
set(IXRAY_SDK_LIB ${CMAKE_CURRENT_SOURCE_DIR}/sdk/libraries/${CMAKE_VS_PLATFORM_NAME}/)
set(IXRAY_SDK_BIN ${CMAKE_CURRENT_SOURCE_DIR}/sdk/binaries/${CMAKE_VS_PLATFORM_NAME}/)
set(IXRAY_SDK_INC ${CMAKE_CURRENT_SOURCE_DIR}/sdk/include/)
set(IXRAY_OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/)
include("${CMAKE_MODULE_PATH}/FindSDL3.cmake")
include("${CMAKE_MODULE_PATH}/FindLuaBind.cmake")
# CMake targets
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# 3rd libraries
add_subdirectory("src/3rd-party")
# Engine libraries
add_subdirectory("src")
# Plugins
if (IXRAY_PLUGINS)
add_subdirectory("src/plugins")
endif()
# Utils
add_subdirectory("src/utils")
# Editors
add_subdirectory("src/Editors")
# Startup project (Visual Studio only)
if (WIN32)
if (IXRAY_COMPRESSOR_ONLY)
if (TARGET xrCompress)
set_property(DIRECTORY ${CMAKE_SOURCE_DIR}
PROPERTY VS_STARTUP_PROJECT xrCompress)
endif()
else()
if (TARGET xrEngine)
set_property(DIRECTORY ${CMAKE_SOURCE_DIR}
PROPERTY VS_STARTUP_PROJECT xrEngine)
endif()
endif()
endif()