-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
146 lines (126 loc) · 3.38 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
cmake_minimum_required(VERSION 3.20)
project(carimbo LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(SDL2_DIR "${CMAKE_BINARY_DIR}")
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type (Debug or Release)" FORCE)
endif()
if(NOT CMAKE_SYSTEM_NAME MATCHES "Emscripten")
find_package(Boost CONFIG REQUIRED)
find_package(OpenAL CONFIG REQUIRED)
find_package(OpenSSL CONFIG REQUIRED)
endif()
find_package(fmt CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
find_package(Ogg CONFIG REQUIRED)
find_package(PhysFS CONFIG REQUIRED)
find_package(SDL2 CONFIG REQUIRED)
find_package(sol2 CONFIG REQUIRED)
find_package(SPNG CONFIG REQUIRED)
find_package(Vorbis CONFIG REQUIRED)
file(GLOB SOURCE_FILES "src/*.cpp")
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
file(GLOB HEADER_FILES "src/*.hpp")
target_precompile_headers(${PROJECT_NAME} PRIVATE ${HEADER_FILES})
file(GLOB TEMPLATE_FILES "src/*.tpp")
target_sources(${PROJECT_NAME} PRIVATE ${TEMPLATE_FILES})
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE /W4)
else()
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Werror -pedantic)
endif()
option(HITBOX "Enable HITBOX flag" OFF)
if(HITBOX)
target_compile_definitions(${PROJECT_NAME} PRIVATE HITBOX)
endif()
option(LOCAL "Enable LOCAL flag" OFF)
if(LOCAL)
target_compile_definitions(${PROJECT_NAME} PRIVATE LOCAL)
endif()
option(SANDBOX "Enable SANDBOX flag" OFF)
if(SANDBOX)
target_compile_definitions(${PROJECT_NAME} PRIVATE SANDBOX)
endif()
if(EMSCRIPTEN)
set(EMSDK_COMPILE_DEBUG_FLAGS
-O0
-g3
-gsource-map
-fexperimental-library
)
set(EMSDK_LINK_DEBUG_FLAGS
-g3
-gsource-map
-sASSERTIONS=1
-sSAFE_HEAP=0
-sSTACK_OVERFLOW_CHECK=2
-sDISABLE_EXCEPTION_CATCHING=0
)
set(EMSDK_COMPILE_RELEASE_FLAGS
-Oz
-flto
-fexperimental-library
)
set(EMSDK_LINK_RELEASE_FLAGS
-Oz
-flto
--strip-all
-sASSERTIONS=0
-sDISABLE_EXCEPTION_CATCHING=1
)
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:${EMSDK_COMPILE_DEBUG_FLAGS}>
$<$<CONFIG:Release>:${EMSDK_COMPILE_RELEASE_FLAGS}>
)
target_link_options(${PROJECT_NAME} PRIVATE
-sEVAL_CTORS=1
-sWASM_BIGINT=1
-sALLOW_MEMORY_GROWTH=1
-sINITIAL_MEMORY=128MB
-lwebsocket.js
-sUSE_SDL=2
-sWEBSOCKET_SUBPROTOCOL=text
-sEXPORTED_RUNTIME_METHODS=['callMain']
$<$<CONFIG:Debug>:${EMSDK_LINK_DEBUG_FLAGS}>
$<$<CONFIG:Release>:${EMSDK_LINK_RELEASE_FLAGS}>
)
else()
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:/Od;/Zi>
$<$<CONFIG:Release>:/O2>
)
else()
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:-O0;-g>
$<$<CONFIG:Release>:-O2;-flto>
)
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:-flto>
)
endif()
endif()
target_compile_definitions(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:DEBUG>
)
target_link_libraries(${PROJECT_NAME} PRIVATE
fmt::fmt
nlohmann_json::nlohmann_json
Ogg::ogg
physfs-static
SDL2::SDL2-static
SDL2::SDL2main
sol2::sol2
spng::spng_static
vorbis::vorbis
)
if(NOT CMAKE_SYSTEM_NAME MATCHES "Emscripten")
target_link_libraries(${PROJECT_NAME} PRIVATE
Boost::boost
OpenAL::OpenAL
openssl::openssl
)
endif()