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