1 cmake_minimum_required(VERSION 3.14)
6 set(DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../deps")
8 if(NOT CMAKE_BUILD_TYPE)
9 set(CMAKE_BUILD_TYPE Debug)
13 set(ASSET_PATH "../assets/")
18 set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
20 set(SKIP_INSTALL_ALL ON)
21 set(BUILD_SHARED_LIBS OFF)
23 set(ZLIB_LIBRARY zlibstatic)
24 set(ZLIB_INCLUDE_DIR "${DEPS_DIR}/zlib")
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)
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}")
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.")
42 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
43 add_compile_definitions("ENABLE_GL_DEBUG")
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")
55 -Wno-address-of-packed-member
59 # System specific options
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")
66 if("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
67 link_directories("/usr/X11R6/lib")
68 include_directories("/usr/X11R6/include")
73 add_library(dragonblocks
74 "${CMAKE_CURRENT_BINARY_DIR}/types.c"
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"
96 target_link_libraries(dragonblocks
99 PUBLIC ${CMAKE_DL_LIBS}
110 add_executable(dragonblocks_client
114 client/client_config.c
115 client/client_entity.c
116 client/client_inventory.c
119 client/client_player.c
120 client/client_terrain.c
143 target_link_libraries(dragonblocks_client
145 PUBLIC libglew_static
154 add_executable(dragonblocks_server
159 server/server_config.c
162 server/server_player.c
163 server/server_terrain.c
166 server/tree_physics.c
167 server/voxel_depth_search.c
168 server/voxel_procedural.c
171 target_link_libraries(dragonblocks_server
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}"
183 add_dependencies(dragonblocks version)
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}"
195 add_custom_target(types
196 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/types.c" "${CMAKE_CURRENT_BINARY_DIR}/types.h"
199 add_dependencies(dragonblocks types)