cmake_minimum_required(VERSION 3.11) project (univerxel VERSION 0.0.1) option(PROFILING "Build with profiling" 0) option(FIXED_WINDOW "Lock window size: Force floating on i3" 0) set(SIMD_LEVEL "avx2" CACHE STRING "SIMD processor acceleration (sse2, sse4.1, avx2, avx512f)") option(USE_FMA "Use fma" 1) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() set(CMAKE_CXX_FLAGS "-Wall -Wextra") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_program(CCACHE_FOUND ccache) if(CCACHE_FOUND) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) endif(CCACHE_FOUND) add_subdirectory("include/glfw") add_subdirectory("include/glm") add_subdirectory("include/enet") add_subdirectory("include/zstd") add_compile_definitions(FIXED_WINDOW=${FIXED_WINDOW} HN_USE_FILESYSTEM=1) if(PROFILING) add_compile_definitions(TRACY_ENABLE=1) endif(PROFILING) if(SIMD_LEVEL EQUAL "avx2") add_compile_definitions(FN_COMPILE_AVX2=1) elseif(SIMD_LEVEL EQUAL "avx512f") add_compile_definitions(FN_COMPILE_AVX512=1) endif() add_definitions(-m${SIMD_LEVEL}) if(USE_FMA) add_definitions(-mfma) endif(USE_FMA) file(GLOB_RECURSE CORE_SOURCES "src/core/*.cpp" "include/tracy/TracyClient.cpp") set(CORE_HEADERS "include/toml++" "include/robin_hood" "include/libguarded" "include/tracy") set(CORE_LIBS pthread dl glm::glm_static enet::enet_static zstd::zstd_static) file(GLOB_RECURSE CLIENT_SOURCES "src/client/*.cpp" "include/imgui/*.cpp" "include/meshoptimizer/*.cpp" "include/gl3w/gl3w.c" "include/volk/volk.c") set(CLIENT_HEADERS "include/imgui" "include/meshoptimizer" "include/gl3w" "include/volk") set(CLIENT_LIBS glfw) file(GLOB_RECURSE SERVER_SOURCES "src/server/*.cpp" "include/FastNoiseSIMD/*.cpp") set(SERVER_HEADERS "include/FastNoiseSIMD") set(SERVER_LINKED) # All in one exec add_executable(univerxel "src/main.cpp" ${CORE_SOURCES} ${CLIENT_SOURCES} ${SERVER_SOURCES}) target_compile_features(univerxel PUBLIC cxx_std_17) target_link_libraries(univerxel ${CORE_LIBS} ${CLIENT_LIBS} ${SERVER_LIBS}) target_include_directories(univerxel PRIVATE ${CORE_HEADERS} ${CLIENT_HEADERS} ${SERVER_HEADERS}) # Standalone server add_executable(univerxel-server EXCLUDE_FROM_ALL "src/server.cpp" ${CORE_SOURCES} ${SERVER_SOURCES}) target_compile_features(univerxel-server PUBLIC cxx_std_17) target_link_libraries(univerxel-server ${CORE_LIBS} ${SERVER_LIBS}) target_include_directories(univerxel-server PRIVATE ${CORE_HEADERS} ${SERVER_HEADERS}) # Dumb client add_executable(univerxel-client EXCLUDE_FROM_ALL "src/client.cpp" ${CORE_SOURCES} ${CLIENT_SOURCES}) target_compile_features(univerxel-client PUBLIC cxx_std_17) target_link_libraries(univerxel-client ${CORE_LIBS} ${CLIENT_LIBS}) target_include_directories(univerxel-client PRIVATE ${CORE_HEADERS} ${CLIENT_HEADERS}) # Resource client files + default zstd.dict file(COPY resource/content DESTINATION ${CMAKE_BINARY_DIR}) # Docs add_custom_target(docs COMMAND doxygen ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Build doc." )