]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/CMakeLists.txt
879bec10c9446e9a32a3f6a13a12ecccdaac4245
[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_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 add_compile_definitions("RESSOURCE_PATH=\"${RESSOURCE_PATH}\"")
26 add_compile_definitions("USE_DRAGONNET")
27
28 add_compile_options(-Wall -Wextra -Werror -fmax-errors=4)
29
30 link_libraries(
31         pthread
32         m
33         z
34 )
35
36 include_directories(SYSTEM ${DEPS_DIR})
37 include_directories(BEFORE ${CMAKE_SOURCE_DIR})
38
39 # System specific options
40
41 if ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
42         link_directories("/usr/local/lib")
43         include_directories("/usr/local/include")
44 endif()
45
46 if ("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
47         link_directories("/usr/X11R6/lib")
48         include_directories("/usr/X11R6/include")
49 endif()
50
51 # Common sources
52
53 set(COMMON_SOURCES
54         "${DEPS_DIR}/dragonnet/addr.c"
55         "${DEPS_DIR}/dragonnet/listen.c"
56         "${DEPS_DIR}/dragonnet/peer.c"
57         "${DEPS_DIR}/dragonnet/recv.c"
58         "${DEPS_DIR}/dragonnet/recv_thread.c"
59         "${DEPS_DIR}/dragonnet/send.c"
60         "${DEPS_DIR}/dragonport/asprintf.c"
61         "${DEPS_DIR}/dragonstd/array.c"
62         "${DEPS_DIR}/dragonstd/bintree.c"
63         "${DEPS_DIR}/dragonstd/flag.c"
64         "${DEPS_DIR}/dragonstd/list.c"
65         "${DEPS_DIR}/dragonstd/queue.c"
66         "${DEPS_DIR}/linenoise/linenoise.c"
67         "${DEPS_DIR}/perlin/perlin.c"
68         config.c
69         day.c
70         environment.c
71         interrupt.c
72         map.c
73         node.c
74         perlin.c
75         types.c
76         util.c
77 )
78
79 # Client
80
81 add_executable(Dragonblocks
82         ${COMMON_SOURCES}
83         client/blockmesh.c
84         client/camera.c
85         client/client.c
86         client/client_auth.c
87         client/client_config.c
88         client/client_map.c
89         client/client_node.c
90         client/client_player.c
91         client/cube.c
92         client/debug_menu.c
93         client/facecache.c
94         client/font.c
95         client/frustum.c
96         client/game.c
97         client/gui.c
98         client/input.c
99         client/mesh.c
100         client/object.c
101         client/scene.c
102         client/shader.c
103         client/sky.c
104         client/texture.c
105         client/vertex.c
106         client/window.c
107 )
108
109 target_link_libraries(Dragonblocks
110         ${OPENGL_LIBRARIES}
111         ${GLEW_LIBRARIES}
112         glfw
113         ${FREETYPE_LIBRARIES}
114 )
115
116 target_include_directories(Dragonblocks PUBLIC
117         ${FREETYPE_INCLUDE_DIRS}
118 )
119
120 # Server
121
122 add_executable(DragonblocksServer
123         ${COMMON_SOURCES}
124         server/biomes.c
125         server/database.c
126         server/mapgen.c
127         server/server.c
128         server/server_config.c
129         server/server_map.c
130         server/server_player.c
131         server/trees.c
132         server/voxelctx.c
133 )
134
135 target_link_libraries(DragonblocksServer
136         sqlite3
137 )
138
139 # Version
140
141 add_custom_target(Version
142         COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -P ${CMAKE_SOURCE_DIR}/version.cmake
143 )
144
145 add_dependencies(Dragonblocks Version)
146 add_dependencies(DragonblocksServer Version)
147
148 # Types
149
150 add_custom_command(
151         OUTPUT "${CMAKE_SOURCE_DIR}/types.c" "${CMAKE_SOURCE_DIR}/types.h"
152         COMMAND "${CMAKE_SOURCE_DIR}/mktypes.sh"
153         MAIN_DEPENDENCY "${CMAKE_SOURCE_DIR}/types.def"
154         WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
155 )
156
157 add_custom_target(DragonnetTypes
158         DEPENDS "${CMAKE_SOURCE_DIR}/types.c" "${CMAKE_SOURCE_DIR}/types.h"
159 )
160
161 add_dependencies(Dragonblocks DragonnetTypes)
162 add_dependencies(DragonblocksServer DragonnetTypes)