]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/CMakeLists.txt
13c78b541e5786115bec4b33f72b537767d6eed1
[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 foreach(DEP glfw glew-cmake sqlite3-cmake perlin asprintf dragonnet dragonstd getline stpcpy linenoise zlib freetype)
33         if(EXISTS "${DEPS_DIR}/${DEP}/CMakeLists.txt")
34                 add_subdirectory("${DEPS_DIR}/${DEP}" EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/${DEP}")
35         else()
36                 message(FATAL_ERROR "Submodule ${DEPS_DIR}/${DEP} does not contain CMakeLists.txt. This is most likely due to submodules not being updated. Use this command to fix the issue:\n\tgit submodule update --init --recursive\nAfter that, run CMake again.")
37         endif()
38 endforeach()
39
40 # Options
41
42 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
43         add_compile_definitions("ENABLE_GL_DEBUG")
44 endif()
45
46 add_compile_definitions("USE_DRAGONNET")
47 add_compile_definitions("GLEW_STATIC")
48 add_compile_definitions("ASSET_PATH=\"${ASSET_PATH}\"")
49 add_compile_definitions("__USE_MINGW_ANSI_STDIO")
50
51 add_compile_options(
52         -Wall
53         -Wextra
54         -Werror
55         -Wno-address-of-packed-member
56         -fmax-errors=4
57 )
58
59 # System specific options
60
61 if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
62         link_directories("/usr/local/lib")
63         include_directories("/usr/local/include")
64 endif()
65
66 if("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
67         link_directories("/usr/X11R6/lib")
68         include_directories("/usr/X11R6/include")
69 endif()
70
71 # Common sources
72
73 add_library(dragonblocks
74         "${CMAKE_CURRENT_BINARY_DIR}/types.c"
75         common/color.c
76         common/config.c
77         common/day.c
78         common/environment.c
79         common/facedir.c
80         common/interrupt.c
81         common/item.c
82         common/node.c
83         common/perlin.c
84         common/physics.c
85         common/terrain.c
86 )
87
88 target_include_directories(dragonblocks
89         PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
90         PUBLIC ${CMAKE_CURRENT_BINARY_DIR}
91         PUBLIC "${DEPS_DIR}/linmath.h"
92         PUBLIC "${DEPS_DIR}/endian.h"
93         PUBLIC "${DEPS_DIR}/stb"
94 )
95
96 target_link_libraries(dragonblocks
97         PUBLIC pthread
98         PUBLIC m
99         PUBLIC ${CMAKE_DL_LIBS}
100         PUBLIC perlin
101         PUBLIC dragonnet
102         PUBLIC dragonstd
103         PUBLIC getline
104         PUBLIC zlibstatic
105         PUBLIC stpcpy
106 )
107
108 # Client
109
110 add_executable(dragonblocks_client
111         client/camera.c
112         client/client.c
113         client/client_auth.c
114         client/client_config.c
115         client/client_entity.c
116         client/client_inventory.c
117         client/client_item.c
118         client/client_node.c
119         client/client_player.c
120         client/client_terrain.c
121         client/cube.c
122         client/debug_menu.c
123         client/facecache.c
124         client/font.c
125         client/frustum.c
126         client/game.c
127         client/gui.c
128         client/input.c
129         client/interact.c
130         client/light.c
131         client/mesh.c
132         client/model.c
133         client/opengl.c
134         client/raycast.c
135         client/screenshot.c
136         client/shader.c
137         client/sky.c
138         client/terrain_gfx.c
139         client/texture.c
140         client/window.c
141 )
142
143 target_link_libraries(dragonblocks_client
144         PUBLIC dragonblocks
145         PUBLIC libglew_static
146         PUBLIC glfw
147         PUBLIC asprintf
148         PUBLIC linenoise
149         PUBLIC freetype
150 )
151
152 # Server
153
154 add_executable(dragonblocks_server
155         server/biomes.c
156         server/database.c
157         server/schematic.c
158         server/server.c
159         server/server_config.c
160         server/server_item.c
161         server/server_node.c
162         server/server_player.c
163         server/server_terrain.c
164         server/terrain_gen.c
165         server/tree.c
166         server/tree_physics.c
167         server/voxel_depth_search.c
168         server/voxel_procedural.c
169 )
170
171 target_link_libraries(dragonblocks_server
172         PUBLIC dragonblocks
173         PUBLIC sqlite3
174 )
175
176 # Version
177
178 add_custom_target(version
179         COMMAND ${CMAKE_COMMAND} -DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
180         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
181 )
182
183 add_dependencies(dragonblocks version)
184
185 # Types
186
187 add_custom_command(
188         OUTPUT types.c types.h
189         MAIN_DEPENDENCY types.def
190         DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../deps/protogen/protogen.lua"
191         COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/mktypes.sh" "${CMAKE_CURRENT_SOURCE_DIR}"
192         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
193 )
194
195 add_custom_target(types
196         DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/types.c" "${CMAKE_CURRENT_BINARY_DIR}/types.h"
197 )
198
199 add_dependencies(dragonblocks types)