-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
CMakeLists.txt
132 lines (106 loc) · 3.74 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
cmake_minimum_required(VERSION 3.19)
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
# Ensure to pick up the default triplet from the environment if any. This helps
# driving the vcpkg triplet in the same way either when starting vcpkg directly,
# or when letting CMake start vcpkg at configure/generate time.
# Note: this logic must happen before PROJECT command.
if (DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "The vcpkg triplet")
endif()
set(BOOST_REQUIRED_VERSION 1.71.0)
option(HTTP "Enable HTTP support" ON)
if (HTTP)
list(APPEND VCPKG_MANIFEST_FEATURES "http")
set(BOOST_REQUIRED_VERSION 1.75.0)
endif()
option(BUILD_TESTING "Build unit tests" OFF)
if (BUILD_TESTING)
list(APPEND VCPKG_MANIFEST_FEATURES "unit-tests")
endif()
option(USE_LUAJIT "Use LuaJIT" OFF)
if (USE_LUAJIT)
list(APPEND VCPKG_MANIFEST_FEATURES "luajit")
else()
list(APPEND VCPKG_MANIFEST_FEATURES "lua")
endif()
project(tfs CXX)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
if (NOT WIN32)
add_compile_options(-Wall -Wextra -Wnon-virtual-dtor -Wold-style-cast -pedantic -Werror -pipe -fvisibility=hidden)
endif ()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
add_compile_options(-fno-strict-aliasing)
endif ()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_compile_options(-Wimplicit-fallthrough -Wmove)
endif ()
# Find packages.
find_package(OpenSSL 3.0.0 REQUIRED COMPONENTS Crypto)
find_package(fmt 8.1.1 CONFIG)
if (NOT fmt_FOUND)
find_package(fmt 8.1.1 REQUIRED)
endif()
# Look for vcpkg-provided libmariadb first
# If we link to the file directly, we might miss its dependencies from vcpkg
find_package(unofficial-libmariadb CONFIG)
if (unofficial-libmariadb_FOUND)
set(MYSQL_CLIENT_LIBS "unofficial::libmariadb")
else ()
find_package(MySQL REQUIRED)
endif ()
find_package(Threads REQUIRED)
find_package(PugiXML CONFIG REQUIRED)
# Selects LuaJIT if user defines or auto-detected
if (USE_LUAJIT)
find_package(LuaJIT REQUIRED)
else ()
find_package(Lua REQUIRED)
endif ()
if (APPLE)
find_package(Iconv REQUIRED)
endif()
set(BOOST_REQUIRED_COMPONENTS system iostreams locale)
if (HTTP)
list(APPEND BOOST_REQUIRED_COMPONENTS json)
endif ()
if (BUILD_TESTING)
list(APPEND BOOST_REQUIRED_COMPONENTS unit_test_framework)
endif ()
find_package(Boost ${BOOST_REQUIRED_VERSION} REQUIRED COMPONENTS ${BOOST_REQUIRED_COMPONENTS})
include_directories(${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${LUA_INCLUDE_DIR} ${MYSQL_INCLUDE_DIR} ${PUGIXML_INCLUDE_DIR})
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (BUILD_TESTING)
message(STATUS "Building unit tests")
enable_testing()
endif()
# Option to disable unity builds
option(ENABLE_UNITY_BUILD "Enable unity build" ON)
add_subdirectory(src)
add_executable(tfs ${tfs_MAIN})
target_link_libraries(tfs tfslib)
### INTERPROCEDURAL_OPTIMIZATION ###
include(CheckIPOSupported)
check_ipo_supported(RESULT result OUTPUT error)
if (result)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
else ()
message(STATUS "IPO is not supported: ${error}")
endif ()
### END INTERPROCEDURAL_OPTIMIZATION ###
### Git Version ###
# Define the two required variables before including
# the source code for watching a git repository.
option(SKIP_GIT "Skip checking for git updates" OFF)
if(NOT SKIP_GIT)
set(PRE_CONFIGURE_FILE "cmake/gitmetadata.h.in")
set(POST_CONFIGURE_FILE "${CMAKE_CURRENT_BINARY_DIR}/gitmetadata.h")
include(git_watcher)
if(Git_FOUND)
add_dependencies(tfs check_git)
target_include_directories(tfs PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
endif()
endif()
### END Git Version ###
target_precompile_headers(tfs PUBLIC src/otpch.h)