include(FetchContent) file(READ "${PROJECT_SOURCE_DIR}/dependencies.lock.json" FASET_DEPENDENCY_LOCK) function(faset_dependency name) string(JSON url GET "${FASET_DEPENDENCY_LOCK}" dependencies ${name} url) string(JSON hash GET "${FASET_DEPENDENCY_LOCK}" dependencies ${name} sha256) string(JSON commit GET "${FASET_DEPENDENCY_LOCK}" dependencies ${name} commit) set(archive "${PROJECT_SOURCE_DIR}/.cache/downloads/${name}-${commit}.tar.gz") if(EXISTS "${archive}") set(url "${archive}") endif() FetchContent_Declare(${name} URL "${url}" URL_HASH "SHA256=${hash}" DOWNLOAD_EXTRACT_TIMESTAMP TRUE) FetchContent_MakeAvailable(${name}) FetchContent_GetProperties(${name} SOURCE_DIR source) set(FASET_${name}_SOURCE_DIR "${source}" PARENT_SCOPE) endfunction() set(JSON_BuildTests OFF CACHE BOOL "" FORCE) set(JSON_Install OFF CACHE BOOL "" FORCE) set(ENTT_BUILD_TESTING OFF CACHE BOOL "" FORCE) set(BOX2D_SAMPLES OFF CACHE BOOL "" FORCE) set(BOX2D_UNIT_TESTS OFF CACHE BOOL "" FORCE) set(BOX2D_BENCHMARKS OFF CACHE BOOL "" FORCE) set(BOX2D_AVX2 OFF CACHE BOOL "" FORCE) set(BOX3D_SAMPLES OFF CACHE BOOL "" FORCE) set(BOX3D_UNIT_TESTS OFF CACHE BOOL "" FORCE) set(BOX3D_BENCHMARKS OFF CACHE BOOL "" FORCE) set(BOX3D_BUILD_SHADERS OFF CACHE BOOL "" FORCE) faset_dependency(json) faset_dependency(entt) faset_dependency(box2d) faset_dependency(box3d) faset_dependency(cgltf) add_library(faset_cgltf INTERFACE) target_include_directories(faset_cgltf INTERFACE "${FASET_cgltf_SOURCE_DIR}") faset_dependency(stb) add_library(faset_stb INTERFACE) target_include_directories(faset_stb INTERFACE "${FASET_stb_SOURCE_DIR}") # Keep the CRT compatible across Faset and physics libraries, including editor plugins. if(MSVC) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") set_property(TARGET box2d box3d PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") endif() if(FASET_BUILD_RENDERER) set(SDL_SHARED OFF CACHE BOOL "" FORCE) set(SDL_STATIC ON CACHE BOOL "" FORCE) set(SDL_TEST_LIBRARY OFF CACHE BOOL "" FORCE) set(SDL_TESTS OFF CACHE BOOL "" FORCE) set(SDL_EXAMPLES OFF CACHE BOOL "" FORCE) set(SDL_INSTALL OFF CACHE BOOL "" FORCE) faset_dependency(sdl3) find_package(Vulkan 1.3 REQUIRED) endif() if(FASET_DEBUG_IMGUI) faset_dependency(imgui) add_library(faset_imgui STATIC "${FASET_imgui_SOURCE_DIR}/imgui.cpp" "${FASET_imgui_SOURCE_DIR}/imgui_draw.cpp" "${FASET_imgui_SOURCE_DIR}/imgui_tables.cpp" "${FASET_imgui_SOURCE_DIR}/imgui_widgets.cpp") target_include_directories(faset_imgui PUBLIC "${FASET_imgui_SOURCE_DIR}") endif()