forked from tswow/TrinityCore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
223 lines (186 loc) · 5.93 KB
/
CMakeLists.txt
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
cmake_minimum_required(VERSION 3.11)
# add this options before PROJECT keyword
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
# Set projectname (must be done AFTER setting configurationtypes)
project(TrinityCore)
#tswow-begin add tswow sources
include(FetchContent)
SET(LUA_ROOT ${CMAKE_SOURCE_DIR}/../../misc/client-extensions/lua-5.1/src)
file(GLOB SRC_LUA ${LUA_ROOT}/*.h ${LUA_ROOT}/*.c)
LIST(REMOVE_ITEM SRC_LUA ${CMAKE_SOURCE_DIR}/../../misc/client-extensions/lua-5.1/src/lua.c)
add_library ( liblua STATIC ${SRC_LUA} )
if(NOT WIN32)
target_compile_options(liblua PUBLIC -fPIC)
endif()
#
# sol2
#
FetchContent_Declare (sol2
GIT_REPOSITORY https://github.com/tswow/sol2
GIT_TAG b9c83d5ecf6bc9503dc66779f2395dc32dffb1e5
)
FetchContent_MakeAvailable (sol2)
add_library (sane-sol2 INTERFACE)
add_library (sol2::sane ALIAS sane-sol2)
target_link_libraries (sane-sol2 INTERFACE liblua)
target_include_directories (sane-sol2 SYSTEM INTERFACE "${sol2_SOURCE_DIR}/include")
#
# sourcemap
#
FetchContent_Declare (sourcemap
GIT_REPOSITORY https://github.com/tswow/sourcemap.cpp.git
GIT_TAG 79a901a367fdc1482306661eadfbb7d0ec50f2c2
)
FetchContent_MakeAvailable (sourcemap)
file(GLOB SOURCEMAP_SRC
${sourcemap_SOURCE_DIR}/src/*
${sourcemap_SOURCE_DIR}/src/format/*
${sourcemap_SOURCE_DIR}/deps/json/*
${sourcemap_SOURCE_DIR}/deps/cencode/*
)
add_library(sourcemaps STATIC ${SOURCEMAP_SRC})
target_include_directories(sourcemaps PUBLIC
${sourcemap_SOURCE_DIR}/src
${sourcemap_SOURCE_DIR}/deps/json
${sourcemap_SOURCE_DIR}/deps/cencode
)
if(NOT WIN32)
target_compile_options(sourcemaps PUBLIC -fPIC)
endif()
#
# tracy
#
SET(TRACY_ON_DEMAND ON CACHE BOOL "")
FetchContent_Declare (
tracy
GIT_REPOSITORY https://github.com/wolfpld/tracy.git
GIT_TAG 80f6a93da79af94fc4604e37439f5a75d5e7dfbd
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
)
FetchContent_MakeAvailable (tracy)
target_compile_definitions(TracyClient
PRIVATE
TRACY_DATA_PORT=8084
TRACY_ON_DEMAND=1
)
# note: temporary workaround until the latest server that tracy publishes
# does this automatically via CMake.
if(TRACY_TIMER_FALLBACK)
target_compile_definitions(TracyClient PRIVATE TRACY_TIMER_FALLBACK=1)
endif()
function(add_tracy_categories tgt)
if(TRACY_CATEGORIES)
foreach(category ${TRACY_CATEGORIES})
target_compile_definitions(${tgt}
PRIVATE
"PROFILE_${category}=1"
)
endforeach()
endif()
endfunction()
add_tracy_categories(TracyClient)
#
# tswow
#
get_filename_component(
TSWOW_CORE_PRIVATE ${CMAKE_SOURCE_DIR}/../../tswow-core/Private ABSOLUTE
)
get_filename_component(
TSWOW_CORE_PUBLIC ${CMAKE_SOURCE_DIR}/../../tswow-core/Public ABSOLUTE
)
get_filename_component(
TSWOW_MESSAGES_INCLUDES ${CMAKE_SOURCE_DIR}/../../misc/client-extensions/CustomPackets ABSOLUTE
)
SET(TSWOW_INCLUDES
${TSWOW_CORE_PRIVATE}
${TSWOW_CORE_PUBLIC}
${TSWOW_MESSAGES_INCLUDES}
)
ADD_COMPILE_DEFINITIONS(USE_STD_SHARED_PTR=1)
FILE(GLOB_RECURSE TSWOW_SOURCES
${TSWOW_CORE_PRIVATE}/*
${TSWOW_CORE_PUBLIC}/*
${TSWOW_MESSAGES_INCLUDES}/*.h
${TSWOW_MESSAGES_INCLUDES}/*.cpp
)
#tswow-end
# CMake policies (can not be handled elsewhere)
cmake_policy(SET CMP0005 NEW)
if(CMAKE_VERSION VERSION_LESS "3.16.0")
cmake_policy(SET CMP0043 OLD) # Disable 'Ignore COMPILE_DEFINITIONS_<Config> properties'
else()
cmake_policy(SET CMP0043 NEW) # Cotire isn't used so set to NEW
endif()
cmake_policy(SET CMP0054 NEW) # Only interpret if() arguments as variables or keywords when unquoted - prevents intepreting if(SOME_STRING_VARIABLE MATCHES "MSVC") as if(SOME_STRING_VARIABLE MATCHES "1")
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW) # find_package() uses <PackageName>_ROOT variables
endif()
# Set RPATH-handing (CMake parameters)
set(CMAKE_SKIP_BUILD_RPATH 0)
set(CMAKE_BUILD_WITH_INSTALL_RPATH 0)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH 1)
# set macro-directory
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}/cmake/macros")
if(CMAKE_VERSION VERSION_LESS "3.16.0")
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}/dep/cotire/CMake")
endif()
# build in Release-mode by default if not explicitly set
if(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config")
set(CMAKE_DEFAULT_BUILD_TYPE "RelWithDebInfo" CACHE INTERNAL "")
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
endif()
include(CheckCXXSourceRuns)
include(CheckIncludeFiles)
include(ConfigureScripts)
# set default buildoptions and print them
include(cmake/options.cmake)
# turn off PCH totally if enabled (hidden setting, mainly for devs)
if(NOPCH)
set(USE_COREPCH 0)
set(USE_SCRIPTPCH 0)
endif()
include(ConfigureBaseTargets)
include(CheckPlatform)
include(GroupSources)
include(AutoCollect)
find_package(PCHSupport)
find_package(MySQL)
if(NOT WITHOUT_GIT)
find_package(Git 1.7)
endif()
# Find revision ID and hash of the sourcetree
include(cmake/genrev.cmake)
# print out the results before continuing
include(cmake/showoptions.cmake)
# add dependencies
add_subdirectory(dep)
# add core sources
add_subdirectory(src)
include(CTest)
if(BUILD_TESTING)
list(APPEND CMAKE_MODULE_PATH
"${Catch2_SOURCE_DIR}/contrib")
include(Catch)
add_subdirectory(tests)
# Catch cmakefile messes with our settings we explicitly leave up to the user
# restore user preference
if (NOT WITH_SOURCE_TREE STREQUAL "hierarchical-folders")
set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
endif()
endif()