]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/CMakeLists.txt
6b28b7f2c5c870a97e8ef37186775b0b3228ec0a
[dragonblocks_alpha.git] / src / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.12)
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 RESSOURCE_PATH)
13         set(RESSOURCE_PATH "../")
14 endif()
15
16 # Dependencies
17
18 find_package(OpenGL REQUIRED)
19
20 if(NOT GLEW_LIBRARIES OR NOT GLEW_INCLUDE_DIRS)
21         find_package(GLEW REQUIRED)
22 endif()
23
24 if(NOT GLFW_LIBRARIES OR NOT GLFW_INCLUDE_DIRS)
25         find_package(glfw3 3.3 REQUIRED)
26         set(GLFW_LIBRARIES glfw)
27         set(GLFW_INCLUDE_DIRS)
28 endif()
29
30 if(NOT FREETYPE_LIBRARIES OR NOT FREETYPE_INCLUDE_DIRS)
31         find_package(Freetype REQUIRED)
32 endif()
33
34 if(NOT ZLIB_LIBRARIES OR NOT ZLIB_INCLUDE_DIRS)
35         find_package(ZLIB REQUIRED)
36         set(ZLIB_LIBRARIES ZLIB::ZLIB)
37         set(ZLIB_INCLUDE_DIRS)
38 endif()
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("RESSOURCE_PATH=\"${RESSOURCE_PATH}\"")
48
49 add_compile_options(-Wall -Wextra -Werror -Wno-address-of-packed-member -Wno-implicit-fallthrough -fmax-errors=4)
50
51 link_libraries(
52         pthread
53         m
54         ${ZLIB_LIBRARIES}
55 )
56
57 include_directories(SYSTEM ${DEPS_DIR})
58 include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR})
59 include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
60 include_directories(${ZLIB_INCLUDE_DIRS})
61
62 # System specific options
63
64 if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
65         link_directories("/usr/local/lib")
66         include_directories("/usr/local/include")
67 endif()
68
69 if("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
70         link_directories("/usr/X11R6/lib")
71         include_directories("/usr/X11R6/include")
72 endif()
73
74 # Common sources
75
76 set(COMMON_SOURCES
77         "${CMAKE_CURRENT_BINARY_DIR}/types.c"
78         "${DEPS_DIR}/asprintf/asprintf.c"
79         "${DEPS_DIR}/dragonnet/addr.c"
80         "${DEPS_DIR}/dragonnet/listen.c"
81         "${DEPS_DIR}/dragonnet/peer.c"
82         "${DEPS_DIR}/dragonnet/recv.c"
83         "${DEPS_DIR}/dragonnet/recv_thread.c"
84         "${DEPS_DIR}/dragonnet/send.c"
85         "${DEPS_DIR}/dragonstd/array.c"
86         "${DEPS_DIR}/dragonstd/flag.c"
87         "${DEPS_DIR}/dragonstd/list.c"
88         "${DEPS_DIR}/dragonstd/map.c"
89         "${DEPS_DIR}/dragonstd/queue.c"
90         "${DEPS_DIR}/dragonstd/refcount.c"
91         "${DEPS_DIR}/dragonstd/tree.c"
92         "${DEPS_DIR}/dragonstd/bits/compare.c"
93         "${DEPS_DIR}/linenoise/linenoise.c"
94         "${DEPS_DIR}/linenoise/stringbuf.c"
95         "${DEPS_DIR}/linenoise/utf8.c"
96         "${DEPS_DIR}/perlin/perlin.c"
97         color.c
98         config.c
99         day.c
100         environment.c
101         facedir.c
102         interrupt.c
103         item.c
104         node.c
105         perlin.c
106         physics.c
107         terrain.c
108 )
109
110 # Client
111
112 add_executable(dragonblocks
113         ${COMMON_SOURCES}
114         client/camera.c
115         client/client.c
116         client/client_auth.c
117         client/client_config.c
118         client/client_entity.c
119         client/client_inventory.c
120         client/client_item.c
121         client/client_node.c
122         client/client_player.c
123         client/client_terrain.c
124         client/cube.c
125         client/debug_menu.c
126         client/facecache.c
127         client/font.c
128         client/frustum.c
129         client/game.c
130         client/gl_debug.c
131         client/gui.c
132         client/input.c
133         client/interact.c
134         client/light.c
135         client/mesh.c
136         client/model.c
137         client/raycast.c
138         client/screenshot.c
139         client/shader.c
140         client/sky.c
141         client/terrain_gfx.c
142         client/texture.c
143         client/window.c
144 )
145
146 target_link_libraries(dragonblocks
147         ${OPENGL_LIBRARIES}
148         ${GLEW_LIBRARIES}
149         ${GLFW_LIBRARIES}
150         ${FREETYPE_LIBRARIES}
151 )
152
153 target_include_directories(dragonblocks PUBLIC
154         ${GLEW_INCLUDE_DIRS}
155         ${GLFW_INCLUDE_DIRS}
156         ${FREETYPE_INCLUDE_DIRS}
157 )
158
159 # Server
160
161 add_executable(dragonblocks_server
162         ${COMMON_SOURCES}
163         server/biomes.c
164         server/database.c
165         server/schematic.c
166         server/server.c
167         server/server_config.c
168         server/server_item.c
169         server/server_node.c
170         server/server_player.c
171         server/server_terrain.c
172         server/terrain_gen.c
173         server/tree.c
174         server/tree_physics.c
175         server/voxel_depth_search.c
176         server/voxel_procedural.c
177 )
178
179 target_link_libraries(dragonblocks_server
180         sqlite3
181 )
182
183 # Version
184
185 add_custom_target(version
186         COMMAND ${CMAKE_COMMAND} -DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
187         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
188 )
189
190 add_dependencies(dragonblocks version)
191 add_dependencies(dragonblocks_server version)
192
193 # Types
194
195 add_custom_command(
196         OUTPUT types.c types.h
197         MAIN_DEPENDENCY types.def
198         DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../deps/protogen/protogen.lua"
199         COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/mktypes.sh" "${CMAKE_CURRENT_SOURCE_DIR}"
200         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
201 )
202
203 add_custom_target(types
204         DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/types.c" "${CMAKE_CURRENT_BINARY_DIR}/types.h"
205 )
206
207 add_dependencies(dragonblocks types)
208 add_dependencies(dragonblocks_server types)