141 lines
5.2 KiB
CMake
141 lines
5.2 KiB
CMake
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)
|
|
option(LOG_DEBUG "Show debug logs" 0)
|
|
option(LOG_TRACE "Show trace logs" 0)
|
|
option(NATIVE "Build with -march=native" 0)
|
|
|
|
find_program(CCACHE_FOUND ccache)
|
|
if(CCACHE_FOUND)
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
|
|
endif(CCACHE_FOUND)
|
|
|
|
add_subdirectory("deps/glfw")
|
|
add_subdirectory("deps/glm")
|
|
add_subdirectory("deps/picoquic")
|
|
add_subdirectory("deps/zstd")
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
endif()
|
|
|
|
include(CheckIPOSupported)
|
|
check_ipo_supported(RESULT IPO_OK OUTPUT IPO_ERROR)
|
|
if(IPO_OK)
|
|
message(STATUS "IPO / LTO enabled")
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
else()
|
|
message(STATUS "IPO / LTO not supported: <${IPO_ERROR}>")
|
|
endif()
|
|
|
|
if(MSVC)
|
|
add_definitions(/std:c++latest)
|
|
add_compile_definitions(WIN32_LEAN_AND_MEAN=)
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
|
|
endif()
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
add_compile_definitions(FIXED_WINDOW=${FIXED_WINDOW} LOG_DEBUG=${LOG_DEBUG} LOG_TRACE=${LOG_TRACE} HN_USE_FILESYSTEM=1)
|
|
if(PROFILING)
|
|
add_compile_definitions(TRACY_ENABLE=1)
|
|
endif(PROFILING)
|
|
if(NATIVE)
|
|
add_definitions(-march=native)
|
|
endif()
|
|
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()
|
|
if(MSVC)
|
|
add_definitions(/arch:AVX2)
|
|
else()
|
|
add_definitions(-m${SIMD_LEVEL})
|
|
endif()
|
|
if(USE_FMA)
|
|
if(MSVC)
|
|
add_definitions(/GL /fp:fast)
|
|
else()
|
|
add_definitions(-mfma)
|
|
endif()
|
|
endif(USE_FMA)
|
|
|
|
file(GLOB_RECURSE CORE_SOURCES "src/core/*.cpp" "deps/tracy/TracyClient.cpp")
|
|
set(CORE_HEADERS "deps/toml++" "deps/robin_hood" "deps/libguarded" "deps/tracy")
|
|
set(CORE_LIBS glm::glm_static zstd::zstd_static) # picoquic
|
|
|
|
file(GLOB_RECURSE CLIENT_SOURCES "src/client/*.cpp" "deps/imgui/*.cpp" "deps/meshoptimizer/*.cpp" "deps/gl3w/gl3w.c" "deps/volk/volk.c")
|
|
set(CLIENT_HEADERS "deps/imgui" "deps/meshoptimizer" "deps/gl3w" "deps/volk")
|
|
set(CLIENT_LIBS glfw)
|
|
|
|
file(GLOB_RECURSE SERVER_SOURCES "src/server/*.cpp" "deps/FastNoiseSIMD/*.cpp")
|
|
set(SERVER_HEADERS "deps/FastNoiseSIMD")
|
|
set(SERVER_LINKED)
|
|
|
|
if(WIN32)
|
|
set(CLIENT_HEADERS ${CLIENT_HEADERS} $ENV{VULKAN_SDK}\\include)
|
|
find_package(OpenSSL)
|
|
set(CORE_LIBS ${CORE_LIBS} ${CMAKE_BINARY_DIR}/libs/*.lib ${OPENSSL_LIBRARIES} ws2_32)
|
|
else()
|
|
set(CORE_LIBS ${CORE_LIBS} picoquic-core pthread dl)
|
|
endif()
|
|
|
|
if (WIN32)
|
|
configure_file(resource/package/info.rc.in info.rc @ONLY)
|
|
set(ICON resource/package/icon.rc ${CMAKE_CURRENT_BINARY_DIR}/info.rc)
|
|
file(COPY resource/package/install.nsi DESTINATION ${CMAKE_BINARY_DIR})
|
|
elseif (APPLE)
|
|
set(ICON univerxel.icns)
|
|
endif()
|
|
|
|
# All in one exec
|
|
add_executable(univerxel "src/main.cpp" ${ICON} ${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" ${ICON} ${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" ${ICON} ${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})
|
|
|
|
# Serialize entity model
|
|
file(GLOB_RECURSE MODELS_SOURCES "src/client/render/api/Models.cpp")
|
|
add_executable(generate_models EXCLUDE_FROM_ALL "src/tools/generate_models.cpp" ${MODELS_SOURCES})
|
|
target_compile_features(generate_models PUBLIC cxx_std_17)
|
|
target_link_libraries(generate_models glm::glm_static)
|
|
target_include_directories(generate_models PRIVATE "deps/robin_hood" "deps/meshoptimizer")
|
|
|
|
# Docs
|
|
add_custom_target(docs
|
|
COMMAND doxygen ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
COMMENT "Build doc."
|
|
)
|
|
|
|
if (APPLE)
|
|
set_target_properties(univerxel PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Univerxel")
|
|
set_target_properties(univerxel-client PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Univerxel Client")
|
|
set_target_properties(univerxel-server PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Univerxel Server")
|
|
set_source_files_properties(univerxel.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
|
|
set_target_properties(univerxel univerxel-client PROPERTIES
|
|
MACOSX_BUNDLE_SHORT_VERSION_STRING ${GLFW_VERSION}
|
|
MACOSX_BUNDLE_LONG_VERSION_STRING ${GLFW_VERSION}
|
|
MACOSX_BUNDLE_ICON_FILE univerxel.icns
|
|
MACOSX_BUNDLE_INFO_PLIST "resource/config/Info.plist.in")
|
|
endif() |