# glm set(BUILD_SHARED_LIBS OFF) add_subdirectory(glm) # stb add_subdirectory(stb) # SDL if (NOT BUILD_SHARED_LIBS) set(SDL_SHARED_ENABLED_BY_DEFAULT OFF CACHE BOOL "Don't build SDL as shared lib") endif() option(SDL_TEST "Build the SDL2_test library" OFF) option(SDL_AUDIO_ENABLED_BY_DEFAULT "Enable the Audio subsystem" OFF) add_subdirectory(sdl) add_subdirectory(vk-bootstrap) if (MSVC) # target_compile_definitions(vk-bootstrap PRIVATE $<$:_ITERATOR_DEBUG_LEVEL=1>) endif() if (BUILD_SHARED_LIBS) set_target_properties(vk-bootstrap PROPERTIES POSITION_INDEPENDENT_CODE ON ) endif() # vma add_subdirectory(vma) # volk add_subdirectory(volk) # FreeType option(FT_DISABLE_ZLIB "Disable use of system zlib and use internal zlib library instead." ON) option(FT_DISABLE_BZIP2 "Disable support of bzip2 compressed fonts." ON) option(FT_DISABLE_BROTLI "Disable support of compressed WOFF2 fonts." ON) option(FT_DISABLE_HARFBUZZ "Disable HarfBuzz (used for improving auto-hinting of OpenType fonts)." ON) option(FT_DISABLE_PNG "Disable support of PNG compressed OpenType embedded bitmaps." ON) option(SKIP_INSTALL_ALL "Skip install all" ON) option(FT_ENABLE_ERROR_STRINGS "Enable support for meaningful error descriptions." ON) add_subdirectory(freetype) add_library(freetype::freetype ALIAS freetype) # nlohmann_json option(JSON_MultipleHeaders "Use non-amalgamated version of the library." ON) option(JSON_Install "Install CMake targets during install step." OFF) add_subdirectory(json) add_subdirectory(spdlog) add_subdirectory(tinygltf) add_subdirectory(tinyexr) target_include_directories(tinyexr PUBLIC "${CMAKE_CURRENT_LIST_DIR}/tinyexr") set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(ASSIMP_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(ASSIMP_INJECT_DEBUG_POSTFIX OFF CACHE BOOL "" FORCE) set(ASSIMP_INSTALL OFF CACHE BOOL "" FORCE) set(ASSIMP_WARNINGS_AS_ERRORS OFF CACHE BOOL "" FORCE) # assimp is unbearably slow unoptimized (a big FBX takes ~10s), so build it optimized even in Debug. # This only affects targets created inside the assimp directory (including its bundled zlib). set(DESTRUM_SAVED_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") set(DESTRUM_SAVED_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") if (MSVC) foreach (flags_var CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG) string(REPLACE "/RTC1" "" ${flags_var} "${${flags_var}}") string(REPLACE "/Od" "/O2" ${flags_var} "${${flags_var}}") string(REPLACE "/Ob0" "/Ob2" ${flags_var} "${${flags_var}}") endforeach () else () string(APPEND CMAKE_C_FLAGS_DEBUG " -O2") string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O2") endif () add_subdirectory(assimp) # assimp's own CMakeLists appends "/Od" to the Debug flags again, target options come later and win if (MSVC) target_compile_options(assimp PRIVATE $<$:/O2>) endif () set(CMAKE_C_FLAGS_DEBUG "${DESTRUM_SAVED_C_FLAGS_DEBUG}") set(CMAKE_CXX_FLAGS_DEBUG "${DESTRUM_SAVED_CXX_FLAGS_DEBUG}") set(IMGUI_DIR "${CMAKE_CURRENT_LIST_DIR}/imgui") add_library(imgui STATIC "${IMGUI_DIR}/imgui.cpp" "${IMGUI_DIR}/imgui_draw.cpp" "${IMGUI_DIR}/imgui_tables.cpp" "${IMGUI_DIR}/imgui_widgets.cpp" "${IMGUI_DIR}/imgui_demo.cpp" # Backends you use: "${IMGUI_DIR}/backends/imgui_impl_sdl2.cpp" "${IMGUI_DIR}/backends/imgui_impl_vulkan.cpp" ) target_include_directories(imgui PUBLIC "${IMGUI_DIR}" "${IMGUI_DIR}/backends" ) # Because you use volk with Vulkan target_compile_definitions(imgui PUBLIC IMGUI_IMPL_VULKAN_USE_VOLK ) target_link_libraries(imgui PUBLIC SDL2::SDL2 volk ) # ImGuizmo add_subdirectory(imguizmo) target_link_libraries(imguizmo PUBLIC imgui) # Jolt Physics set(DOUBLE_PRECISION OFF CACHE BOOL "" FORCE) set(GENERATE_DEBUG_SYMBOLS ON CACHE BOOL "" FORCE) set(OVERRIDE_CXX_FLAGS OFF CACHE BOOL "" FORCE) set(CROSS_PLATFORM_DETERMINISTIC OFF CACHE BOOL "" FORCE) set(INTERPROCEDURAL_OPTIMIZATION OFF CACHE BOOL "" FORCE) set(FLOATING_POINT_EXCEPTIONS_ENABLED OFF CACHE BOOL "" FORCE) set(CPP_EXCEPTIONS_ENABLED OFF CACHE BOOL "" FORCE) set(CPP_RTTI_ENABLED OFF CACHE BOOL "" FORCE) set(OBJECT_LAYER_BITS 16 CACHE STRING "" FORCE) # Important for MSVC: # OFF = use /MD or /MDd, matching your current project # ON = use /MT or /MTd set(USE_STATIC_MSVC_RUNTIME_LIBRARY OFF CACHE BOOL "" FORCE) set(USE_SSE4_1 ON CACHE BOOL "" FORCE) set(USE_SSE4_2 ON CACHE BOOL "" FORCE) set(USE_AVX ON CACHE BOOL "" FORCE) set(USE_AVX2 ON CACHE BOOL "" FORCE) set(USE_AVX512 OFF CACHE BOOL "" FORCE) set(USE_LZCNT ON CACHE BOOL "" FORCE) set(USE_TZCNT ON CACHE BOOL "" FORCE) set(USE_F16C ON CACHE BOOL "" FORCE) set(USE_FMADD ON CACHE BOOL "" FORCE) add_subdirectory(jolt/Build) # 3rdparty/tracy is the Tracy repo option(TRACY_ENABLE "" ON) option(TRACY_ON_DEMAND "" ON) add_subdirectory(tracy) # OpenAL Soft is LGPL, so it stays a DLL next to the exe instead of being linked in set(LIBTYPE SHARED CACHE STRING "" FORCE) set(ALSOFT_UTILS OFF CACHE BOOL "" FORCE) set(ALSOFT_EXAMPLES OFF CACHE BOOL "" FORCE) set(ALSOFT_TESTS OFF CACHE BOOL "" FORCE) set(ALSOFT_INSTALL OFF CACHE BOOL "" FORCE) set(ALSOFT_INSTALL_CONFIG OFF CACHE BOOL "" FORCE) set(ALSOFT_INSTALL_HRTF_DATA OFF CACHE BOOL "" FORCE) set(ALSOFT_INSTALL_AMBDEC_PRESETS OFF CACHE BOOL "" FORCE) set(ALSOFT_INSTALL_EXAMPLES OFF CACHE BOOL "" FORCE) set(ALSOFT_INSTALL_UTILS OFF CACHE BOOL "" FORCE) set(ALSOFT_EAX OFF CACHE BOOL "" FORCE) add_subdirectory(openal-soft) add_library(stb_vorbis STATIC "${CMAKE_CURRENT_LIST_DIR}/stb/src/stb_vorbis.c") target_include_directories(stb_vorbis PUBLIC "${CMAKE_CURRENT_LIST_DIR}/stb/src") target_compile_definitions(stb_vorbis PRIVATE _CRT_SECURE_NO_WARNINGS) if (MSVC) target_compile_options(stb_vorbis PRIVATE /W0) else () target_compile_options(stb_vorbis PRIVATE -w) endif () add_library(stb::vorbis ALIAS stb_vorbis)