]> git.lizzy.rs Git - dragonblocks_alpha.git/blobdiff - src/CMakeLists.txt
Use portable getline
[dragonblocks_alpha.git] / src / CMakeLists.txt
index 5cd469c06eee593f71ec92b3dfad8ef19294ac9a..896d84537a3078c66ca4163845d38253368952d6 100644 (file)
 cmake_minimum_required(VERSION 3.12)
-
 project(Dragonblocks)
 
+# Variables
+
+set(DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../deps/")
+
 if(NOT CMAKE_BUILD_TYPE)
-  set(CMAKE_BUILD_TYPE Debug)
+       set(CMAKE_BUILD_TYPE Debug)
+endif()
+
+if(NOT RESSOURCE_PATH)
+       set(RESSOURCE_PATH "../")
 endif()
 
+# Dependencies
+
 find_package(OpenGL REQUIRED)
-find_package(GLEW REQUIRED)
-find_package(glfw3 3.3 REQUIRED)
-find_package(Freetype REQUIRED)
+
+if(NOT GLEW_LIBRARIES OR NOT GLEW_INCLUDE_DIRS)
+       find_package(GLEW REQUIRED)
+endif()
+
+if(NOT GLFW_LIBRARIES OR NOT GLFW_INCLUDE_DIRS)
+       find_package(glfw3 3.3 REQUIRED)
+       set(GLFW_LIBRARIES glfw)
+       set(GLFW_INCLUDE_DIRS)
+endif()
+
+if(NOT FREETYPE_LIBRARIES OR NOT FREETYPE_INCLUDE_DIRS)
+       find_package(Freetype REQUIRED)
+endif()
+
+if(NOT ZLIB_LIBRARIES OR NOT ZLIB_INCLUDE_DIRS)
+       find_package(ZLIB REQUIRED)
+       set(ZLIB_LIBRARIES ZLIB::ZLIB)
+       set(ZLIB_INCLUDE_DIRS)
+endif()
+
+# Options
+
+if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
+       add_compile_definitions("ENABLE_GL_DEBUG")
+endif()
+
+add_compile_definitions("USE_DRAGONNET")
+add_compile_definitions("RESSOURCE_PATH=\"${RESSOURCE_PATH}\"")
+
+add_compile_options(-Wall -Wextra -Werror -Wno-address-of-packed-member -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-maybe-uninitialized -fmax-errors=4)
 
 link_libraries(
        pthread
        m
-       z
+       ${ZLIB_LIBRARIES}
 )
 
-set(DEPS_DIR "${CMAKE_SOURCE_DIR}/../deps/")
-
-add_compile_definitions(DRAGONTYPE_ENDIAN_HEADER="${CMAKE_SOURCE_DIR}/../deps/endian.h/endian.h")
+include_directories(SYSTEM ${DEPS_DIR})
+include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${ZLIB_INCLUDE_DIRS})
 
-include_directories(SYSTEM
-       ${DEPS_DIR}
-)
+# System specific options
 
-include_directories(BEFORE
-       ${CMAKE_SOURCE_DIR}
-)
+if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
+       link_directories("/usr/local/lib")
+       include_directories("/usr/local/include")
+endif()
 
-add_compile_options(-Wall -Wextra -Wpedantic -Werror)
+if("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
+       link_directories("/usr/X11R6/lib")
+       include_directories("/usr/X11R6/include")
+endif()
 
-set(SOURCES_COMMON
+# Common sources
+
+set(COMMON_SOURCES
+       "${CMAKE_CURRENT_BINARY_DIR}/types.c"
+       "${DEPS_DIR}/asprintf/asprintf.c"
+       "${DEPS_DIR}/dragonnet/addr.c"
+       "${DEPS_DIR}/dragonnet/listen.c"
+       "${DEPS_DIR}/dragonnet/peer.c"
+       "${DEPS_DIR}/dragonnet/recv.c"
+       "${DEPS_DIR}/dragonnet/recv_thread.c"
+       "${DEPS_DIR}/dragonnet/send.c"
+       "${DEPS_DIR}/dragonstd/array.c"
+       "${DEPS_DIR}/dragonstd/flag.c"
+       "${DEPS_DIR}/dragonstd/list.c"
+       "${DEPS_DIR}/dragonstd/map.c"
+       "${DEPS_DIR}/dragonstd/queue.c"
+       "${DEPS_DIR}/dragonstd/refcount.c"
+       "${DEPS_DIR}/dragonstd/tree.c"
+       "${DEPS_DIR}/dragonstd/bits/compare.c"
+       "${DEPS_DIR}/getline/getline.c"
+       "${DEPS_DIR}/linenoise/linenoise.c"
+       "${DEPS_DIR}/linenoise/stringbuf.c"
+       "${DEPS_DIR}/linenoise/utf8.c"
+       "${DEPS_DIR}/perlin/perlin.c"
+       color.c
+       config.c
+       day.c
        environment.c
-       map.c
+       facedir.c
+       interrupt.c
+       item.c
        node.c
        perlin.c
-       signal_handlers.c
-       util.c
-       "${DEPS_DIR}/dragontype/implementation.c"
-       "${DEPS_DIR}/perlin/perlin.c"
+       physics.c
+       terrain.c
 )
 
-add_executable(Dragonblocks
-       ${SOURCES_COMMON}
-       client/blockmesh.c
+# Client
+
+add_executable(dragonblocks
+       ${COMMON_SOURCES}
        client/camera.c
        client/client.c
-       client/client_commands.c
-       client/client_map.c
+       client/client_auth.c
+       client/client_config.c
+       client/client_entity.c
+       client/client_inventory.c
+       client/client_item.c
        client/client_node.c
        client/client_player.c
+       client/client_terrain.c
        client/cube.c
        client/debug_menu.c
        client/facecache.c
        client/font.c
+       client/frustum.c
        client/game.c
+       client/gl_debug.c
        client/gui.c
        client/input.c
+       client/interact.c
+       client/light.c
        client/mesh.c
-       client/object.c
-       client/scene.c
+       client/model.c
+       client/raycast.c
+       client/screenshot.c
        client/shader.c
+       client/sky.c
+       client/terrain_gfx.c
        client/texture.c
-       client/vertex.c
        client/window.c
 )
 
-target_link_libraries(Dragonblocks
+target_link_libraries(dragonblocks
        ${OPENGL_LIBRARIES}
        ${GLEW_LIBRARIES}
-       glfw
+       ${GLFW_LIBRARIES}
        ${FREETYPE_LIBRARIES}
 )
 
-target_include_directories(Dragonblocks PUBLIC
+target_include_directories(dragonblocks PUBLIC
+       ${GLEW_INCLUDE_DIRS}
+       ${GLFW_INCLUDE_DIRS}
        ${FREETYPE_INCLUDE_DIRS}
 )
 
-add_executable(DragonblocksServer
-       ${SOURCES_COMMON}
+# Server
+
+add_executable(dragonblocks_server
+       ${COMMON_SOURCES}
        server/biomes.c
        server/database.c
-       server/mapgen.c
+       server/schematic.c
        server/server.c
-       server/server_commands.c
-       server/server_map.c
+       server/server_config.c
+       server/server_item.c
+       server/server_node.c
+       server/server_player.c
+       server/server_terrain.c
+       server/terrain_gen.c
+       server/tree.c
+       server/tree_physics.c
+       server/voxel_depth_search.c
+       server/voxel_procedural.c
 )
 
-target_link_libraries(DragonblocksServer
+target_link_libraries(dragonblocks_server
        sqlite3
 )
 
+# Version
+
 add_custom_target(version
-       COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -P ${CMAKE_SOURCE_DIR}/version.cmake
+       COMMAND ${CMAKE_COMMAND} -DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
+       WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 )
 
-add_dependencies(Dragonblocks version)
-add_dependencies(DragonblocksServer version)
+add_dependencies(dragonblocks version)
+add_dependencies(dragonblocks_server version)
 
-if (CMAKE_BUILD_TYPE STREQUAL "Release")
-       add_compile_definitions(RELEASE)
-endif()
+# Types
+
+add_custom_command(
+       OUTPUT types.c types.h
+       MAIN_DEPENDENCY types.def
+       DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../deps/protogen/protogen.lua"
+       COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/mktypes.sh" "${CMAKE_CURRENT_SOURCE_DIR}"
+       WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+)
+
+add_custom_target(types
+       DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/types.c" "${CMAKE_CURRENT_BINARY_DIR}/types.h"
+)
+
+add_dependencies(dragonblocks types)
+add_dependencies(dragonblocks_server types)