]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/CMakeLists.txt
48801d91803e50b26bcb49fc47caa0ee957163b1
[dragonblocks_alpha.git] / src / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.14)
2 project(Dragonblocks)
3
4 # Variables
5
6 set(DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../deps")
7
8 if(NOT CMAKE_BUILD_TYPE)
9         set(CMAKE_BUILD_TYPE Debug)
10 endif()
11
12 if(NOT ASSET_PATH)
13         set(ASSET_PATH "../assets/")
14 endif()
15
16 # Dependencies
17
18 set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
19
20 set(SKIP_INSTALL_ALL ON)
21 set(BUILD_SHARED_LIBS OFF)
22
23 set(ZLIB_LIBRARY zlibstatic)
24 set(ZLIB_INCLUDE_DIR "${DEPS_DIR}/zlib")
25
26 set(FT_DISABLE_ZLIB OFF)
27 set(FT_DISABLE_BZIP2 ON)
28 set(FT_DISABLE_PNG ON)
29 set(FT_DISABLE_HARFBUZZ ON)
30 set(FT_DISABLE_BROTLI ON)
31
32 add_subdirectory("${DEPS_DIR}/glfw" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/glfw")
33 add_subdirectory("${DEPS_DIR}/glew-cmake" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/glew")
34 add_subdirectory("${DEPS_DIR}/sqlite3-cmake" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/sqlite3")
35 add_subdirectory("${DEPS_DIR}/perlin" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/perlin")
36 add_subdirectory("${DEPS_DIR}/asprintf" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/asprintf")
37 add_subdirectory("${DEPS_DIR}/dragonnet" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/dragonnet")
38 add_subdirectory("${DEPS_DIR}/dragonstd" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/dragonstd")
39 add_subdirectory("${DEPS_DIR}/getline" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/getline")
40 add_subdirectory("${DEPS_DIR}/stpcpy" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/stpcpy")
41 add_subdirectory("${DEPS_DIR}/linenoise" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/linenoise")
42 add_subdirectory("${DEPS_DIR}/zlib" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/zlib")
43 add_subdirectory("${DEPS_DIR}/freetype" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/freetype")
44
45 # Options
46
47 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
48         add_compile_definitions("ENABLE_GL_DEBUG")
49 endif()
50
51 add_compile_definitions("USE_DRAGONNET")
52 add_compile_definitions("GLEW_STATIC")
53 add_compile_definitions("ASSET_PATH=\"${ASSET_PATH}\"")
54 add_compile_definitions("__USE_MINGW_ANSI_STDIO")
55
56 add_compile_options(
57         -Wall
58         -Wextra
59         -Werror
60         -Wno-address-of-packed-member
61         -fmax-errors=4
62 )
63
64 # System specific options
65
66 if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
67         link_directories("/usr/local/lib")
68         include_directories("/usr/local/include")
69 endif()
70
71 if("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
72         link_directories("/usr/X11R6/lib")
73         include_directories("/usr/X11R6/include")
74 endif()
75
76 # Common sources
77
78 add_library(dragonblocks
79         "${CMAKE_CURRENT_BINARY_DIR}/types.c"
80         common/color.c
81         common/config.c
82         common/day.c
83         common/environment.c
84         common/facedir.c
85         common/interrupt.c
86         common/item.c
87         common/node.c
88         common/perlin.c
89         common/physics.c
90         common/terrain.c
91 )
92
93 target_include_directories(dragonblocks
94         PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
95         PUBLIC ${CMAKE_CURRENT_BINARY_DIR}
96         PUBLIC "${DEPS_DIR}/linmath.h"
97         PUBLIC "${DEPS_DIR}/endian.h"
98         PUBLIC "${DEPS_DIR}/stb"
99 )
100
101 target_link_libraries(dragonblocks
102         PUBLIC pthread
103         PUBLIC m
104         PUBLIC ${CMAKE_DL_LIBS}
105         PUBLIC perlin
106         PUBLIC dragonnet
107         PUBLIC dragonstd
108         PUBLIC getline
109         PUBLIC zlibstatic
110         PUBLIC stpcpy
111 )
112
113 # Client
114
115 add_executable(dragonblocks_client
116         client/camera.c
117         client/client.c
118         client/client_auth.c
119         client/client_config.c
120         client/client_entity.c
121         client/client_inventory.c
122         client/client_item.c
123         client/client_node.c
124         client/client_player.c
125         client/client_terrain.c
126         client/cube.c
127         client/debug_menu.c
128         client/facecache.c
129         client/font.c
130         client/frustum.c
131         client/game.c
132         client/gl_debug.c
133         client/gui.c
134         client/input.c
135         client/interact.c
136         client/light.c
137         client/mesh.c
138         client/model.c
139         client/raycast.c
140         client/screenshot.c
141         client/shader.c
142         client/sky.c
143         client/terrain_gfx.c
144         client/texture.c
145         client/window.c
146 )
147
148 target_link_libraries(dragonblocks_client
149         PUBLIC dragonblocks
150         PUBLIC libglew_static
151         PUBLIC glfw
152         PUBLIC asprintf
153         PUBLIC linenoise
154         PUBLIC freetype
155 )
156
157 # Server
158
159 add_executable(dragonblocks_server
160         server/biomes.c
161         server/database.c
162         server/schematic.c
163         server/server.c
164         server/server_config.c
165         server/server_item.c
166         server/server_node.c
167         server/server_player.c
168         server/server_terrain.c
169         server/terrain_gen.c
170         server/tree.c
171         server/tree_physics.c
172         server/voxel_depth_search.c
173         server/voxel_procedural.c
174 )
175
176 target_link_libraries(dragonblocks_server
177         PUBLIC dragonblocks
178         PUBLIC sqlite3
179 )
180
181 # Version
182
183 add_custom_target(version
184         COMMAND ${CMAKE_COMMAND} -DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
185         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
186 )
187
188 add_dependencies(dragonblocks version)
189
190 # Types
191
192 add_custom_command(
193         OUTPUT types.c types.h
194         MAIN_DEPENDENCY types.def
195         DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../deps/protogen/protogen.lua"
196         COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/mktypes.sh" "${CMAKE_CURRENT_SOURCE_DIR}"
197         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
198 )
199
200 add_custom_target(types
201         DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/types.c" "${CMAKE_CURRENT_BINARY_DIR}/types.h"
202 )
203
204 add_dependencies(dragonblocks types)