]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/CMakeLists.txt
Use portable getline
[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 -Wno-unused-parameter -Wno-maybe-uninitialized -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}/getline/getline.c"
94         "${DEPS_DIR}/linenoise/linenoise.c"
95         "${DEPS_DIR}/linenoise/stringbuf.c"
96         "${DEPS_DIR}/linenoise/utf8.c"
97         "${DEPS_DIR}/perlin/perlin.c"
98         color.c
99         config.c
100         day.c
101         environment.c
102         facedir.c
103         interrupt.c
104         item.c
105         node.c
106         perlin.c
107         physics.c
108         terrain.c
109 )
110
111 # Client
112
113 add_executable(dragonblocks
114         ${COMMON_SOURCES}
115         client/camera.c
116         client/client.c
117         client/client_auth.c
118         client/client_config.c
119         client/client_entity.c
120         client/client_inventory.c
121         client/client_item.c
122         client/client_node.c
123         client/client_player.c
124         client/client_terrain.c
125         client/cube.c
126         client/debug_menu.c
127         client/facecache.c
128         client/font.c
129         client/frustum.c
130         client/game.c
131         client/gl_debug.c
132         client/gui.c
133         client/input.c
134         client/interact.c
135         client/light.c
136         client/mesh.c
137         client/model.c
138         client/raycast.c
139         client/screenshot.c
140         client/shader.c
141         client/sky.c
142         client/terrain_gfx.c
143         client/texture.c
144         client/window.c
145 )
146
147 target_link_libraries(dragonblocks
148         ${OPENGL_LIBRARIES}
149         ${GLEW_LIBRARIES}
150         ${GLFW_LIBRARIES}
151         ${FREETYPE_LIBRARIES}
152 )
153
154 target_include_directories(dragonblocks PUBLIC
155         ${GLEW_INCLUDE_DIRS}
156         ${GLFW_INCLUDE_DIRS}
157         ${FREETYPE_INCLUDE_DIRS}
158 )
159
160 # Server
161
162 add_executable(dragonblocks_server
163         ${COMMON_SOURCES}
164         server/biomes.c
165         server/database.c
166         server/schematic.c
167         server/server.c
168         server/server_config.c
169         server/server_item.c
170         server/server_node.c
171         server/server_player.c
172         server/server_terrain.c
173         server/terrain_gen.c
174         server/tree.c
175         server/tree_physics.c
176         server/voxel_depth_search.c
177         server/voxel_procedural.c
178 )
179
180 target_link_libraries(dragonblocks_server
181         sqlite3
182 )
183
184 # Version
185
186 add_custom_target(version
187         COMMAND ${CMAKE_COMMAND} -DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
188         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
189 )
190
191 add_dependencies(dragonblocks version)
192 add_dependencies(dragonblocks_server version)
193
194 # Types
195
196 add_custom_command(
197         OUTPUT types.c types.h
198         MAIN_DEPENDENCY types.def
199         DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../deps/protogen/protogen.lua"
200         COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/mktypes.sh" "${CMAKE_CURRENT_SOURCE_DIR}"
201         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
202 )
203
204 add_custom_target(types
205         DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/types.c" "${CMAKE_CURRENT_BINARY_DIR}/types.h"
206 )
207
208 add_dependencies(dragonblocks types)
209 add_dependencies(dragonblocks_server types)