-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
138 lines (108 loc) · 4.54 KB
/
CMakeLists.txt
File metadata and controls
138 lines (108 loc) · 4.54 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
cmake_minimum_required(VERSION 3.14)
# Use packagename_ROOT for FindPackage.
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
# Disable default MSVC setting CRT type so we can set it ourselves.
if(POLICY CMP0091)
cmake_policy(SET CMP0091 NEW)
endif()
# Disable default MSVC warning level so we can set it ourselves.
if(POLICY CMP0092)
cmake_policy(SET CMP0092 NEW)
endif()
# Allow specifying MSVC debug configurations.
if(POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
endif()
project(gamespy VERSION 2.06 LANGUAGES C CXX)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
include(FeatureSummary)
# Default to release for single target generators if nothing specified.
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "No build type selected, default to Release")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo" FORCE)
endif()
# We don't support in tree builds, so help people make the right choice.
if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
endif()
# Decide if this project is the top level project, if so enable development targets.
string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" is_top_level)
# Do we want OpenSSL support or integrated GameSpy SSLv3 engine support?
option(GS_OPENSSL "Enable OpenSSL support" ON)
option(GS_HTTPLOG "Enable HTTP logging" OFF)
option(GS_SECURESECONNECT "Enable connecting to GameSpy services with a secure protocol (HTTPS)" ON)
option(GS_BUILD_TESTS "Builds test executables." ${is_top_level})
option(GS_INCLUDE_VOICE "Build the Voice2 SDK component." OFF)
add_feature_info(OpenSSL GS_OPENSSL "Use OpenSSL library for HTTPS support.")
add_feature_info(HttpLogging GS_HTTPLOG "Log HTTP activity.")
add_feature_info(SecureConnections GS_SECURESECONNECT "Connect to services using HTTPS.")
add_feature_info(BuildTests GS_BUILD_TESTS "Build small test applications to demo the library.")
add_feature_info(IncludeVoiceSDK GS_INCLUDE_VOICE "Library will include the Voice2 SDK component.")
if(WIN32 OR "${CMAKE_SYSTEM}" MATCHES "Windows")
list(APPEND GS_COMPILE_DEFS _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE _WINSOCK_DEPRECATED_NO_WARNINGS)
# WinSock1 is deprecated, it's better to use WinSock2
option(GS_WINSOCK2 "Link against Windows Socket 2 instead of Windows Socket 1." ON)
add_feature_info(UseWinsock2 GS_WINSOCK2 "Library will link against winsock2 instead of winsock1.")
endif()
if(GAMESPY_SERVER_NAME)
add_definitions(-DGSI_DOMAIN_NAME="${GAMESPY_SERVER_NAME}")
message(STATUS "GameSpy server name is set to ${GAMESPY_SERVER_NAME}")
endif()
list(APPEND GS_COMPILE_DEFS GS_PEER)
if(GS_WINSOCK2)
list(APPEND GS_COMPILE_DEFS GSI_WINSOCK2)
endif()
if(GS_SECURESECONNECT)
list(APPEND GS_COMPILE_DEFS GS_HTTPS)
endif()
if(GS_MEM_MANAGED)
list(APPEND GS_COMPILE_DEFS GSI_MEM_MANAGED)
endif()
if(is_top_level)
# Set up a format target to do automated clang format checking.
find_package(ClangFormat)
include(ClangFormat)
endif()
if(DEFINED gamespy_SHARED_LIBS)
set(BUILD_SHARED_LIBS "${gamespy_SHARED_LIBS}")
elseif(NOT DEFINED BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS OFF)
endif()
if(GS_INCLUDE_VOICE)
# Speex is needed to build the voice2 SDK.
find_package(Speex)
if(NOT SPEEX_FOUND)
include(FetchContent)
FetchContent_Declare(
speex_git
GIT_REPOSITORY https://github.com/TheAssemblyArmada/speex.git
GIT_TAG a9a8d07faab4851869f0c683e9d9e38a7ec6069f
EXCLUDE_FROM_ALL
)
set(ENABLE_PACKAGE_CONFIG FALSE)
FetchContent_MakeAvailable(speex_git)
set(SPEEX_LIBRARIES speex)
endif()
endif()
if(GS_OPENSSL)
find_package(OpenSSL COMPONENTS SSL)
if (NOT OPENSSL_FOUND)
include(FetchContent)
FetchContent_Declare(
openssl_git
GIT_REPOSITORY https://github.com/janbar/openssl-cmake.git
GIT_TAG b0ac69581958cd658364147da9057da89a01c394
EXCLUDE_FROM_ALL
)
set(ENABLE_PACKAGE_CONFIG FALSE)
set(MSVC_DYNAMIC_RUNTIME TRUE)
FetchContent_MakeAvailable(openssl_git)
add_library(OpenSSL::SSL ALIAS ssl)
endif()
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
add_subdirectory(src)