Files
Aethera/render_3D/cmake/computer_graphics.cmake
T
2026-08-20 10:23:47 +08:00

282 lines
12 KiB
CMake

include_guard(GLOBAL)
block()
set(freetype_opts)
_register_git_cmake_library(render_3D::freetype
https://github.com/freetype/freetype.git
VER-2-13-3
)
rcl_get_effective_install_dir(render_3D::freetype FREETYPE_ROOT)
set(FREETYPE_INCLUDE_DIRS "${FREETYPE_ROOT}/include/freetype2")
set(FREETYPE_INCLUDE_DIR_ft2build "${FREETYPE_ROOT}/include/freetype2")
set(FREETYPE_INCLUDE_DIR_freetype2 "${FREETYPE_ROOT}/include/freetype2")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(FREETYPE_LIBRARY "${FREETYPE_ROOT}/lib/freetyped.lib")
else ()
set(FREETYPE_LIBRARY "${FREETYPE_ROOT}/lib/freetype.lib")
endif ()
rcl_cmake_library_set_cmake_options(render_3D::freetype ${freetype_opts})
rcl_cmake_library_set_other_use_opt(render_3D::freetype
"-DFREETYPE_INCLUDE_DIRS=\"${FREETYPE_INCLUDE_DIRS}\""
"-DFREETYPE_INCLUDE_DIR_ft2build=\"${FREETYPE_INCLUDE_DIR_ft2build}\""
"-DFREETYPE_INCLUDE_DIR_freetype2=\"${FREETYPE_INCLUDE_DIR_freetype2}\""
"-DFREETYPE_LIBRARY=\"${FREETYPE_LIBRARY}\""
"-DFREETYPE_LIBRARIES=\"${FREETYPE_LIBRARY}\""
)
rcl_cmake_library_set_init_script(render_3D::freetype
"set(FREETYPE_ROOT \"${FREETYPE_ROOT}\")"
"set(FREETYPE_INCLUDE_DIRS \"${FREETYPE_INCLUDE_DIRS}\")"
"set(FREETYPE_INCLUDE_DIR_ft2build \"${FREETYPE_INCLUDE_DIR_ft2build}\")"
"set(FREETYPE_INCLUDE_DIR_freetype2 \"${FREETYPE_INCLUDE_DIR_freetype2}\")"
"set(FREETYPE_LIBRARY \"${FREETYPE_LIBRARY}\")"
"set(FREETYPE_LIBRARIES \"${FREETYPE_LIBRARY}\")"
)
rcl_cmake_library_set_clear_script(render_3D::freetype
"unset(FREETYPE_ROOT)"
"unset(FREETYPE_INCLUDE_DIRS)"
"unset(FREETYPE_INCLUDE_DIR_ft2build)"
"unset(FREETYPE_INCLUDE_DIR_freetype2)"
"unset(FREETYPE_LIBRARY)"
"unset(FREETYPE_LIBRARIES)"
)
set(tinyxml2_opts
-Dtinyxml2_BUILD_TESTING=OFF
-Dtinyxml2_INSTALL_PKGCONFIG=OFF
-Dtinyxml2_SHARED_LIBS=OFF
-Dtinyxml2_INSTALL_CMAKEDIR=lib/cmake/tinyxml2
)
_register_git_cmake_library(render_3D::tinyxml2
"https://github.com/leethomason/tinyxml2.git"
"11.0.0"
)
rcl_get_effective_install_dir(render_3D::tinyxml2 TINYXML2_ROOT)
set(TINYXML2_CONFIG_DIR "${TINYXML2_ROOT}/lib/cmake/tinyxml2")
rcl_cmake_library_set_cmake_options(render_3D::tinyxml2 ${tinyxml2_opts})
rcl_cmake_library_set_other_use_opt(render_3D::tinyxml2
"-Dtinyxml2_DIR=\"${TINYXML2_CONFIG_DIR}\""
)
rcl_cmake_library_set_init_script(render_3D::tinyxml2
"set(TINYXML2_ROOT \"${TINYXML2_ROOT}\")"
"set(tinyxml2_DIR \"${TINYXML2_CONFIG_DIR}\")"
)
rcl_cmake_library_set_clear_script(render_3D::tinyxml2
"unset(TINYXML2_ROOT)"
"unset(tinyxml2_DIR)"
)
set(msdfgen_cmake_option ${base_options})
list(APPEND msdfgen_cmake_option
-DMSDFGEN_USE_SKIA=OFF
-DMSDFGEN_USE_VCPKG=OFF
-DBUILD_SHARED_LIBS=ON
-DMSDFGEN_DYNAMIC_RUNTIME=ON
-DMSDFGEN_INSTALL=ON
)
_register_git_cmake_library(render_3D::msdfgen
https://github.com/Chlumsky/msdfgen.git
v1.12
)
rcl_get_effective_install_dir(render_3D::msdfgen MSDFGEN_ROOT)
set(MSDFGEN_CONFIG_DIR "${MSDFGEN_ROOT}/lib/cmake/msdfgen")
rcl_cmake_library_set_cmake_options(render_3D::msdfgen ${msdfgen_cmake_option})
rcl_cmake_library_set_deps(render_3D::msdfgen
global::zlib
global::libpng
render_3D::freetype
render_3D::tinyxml2
)
rcl_cmake_library_set_other_use_opt(render_3D::msdfgen
"-Dmsdfgen_DIR=\"${MSDFGEN_CONFIG_DIR}\""
)
rcl_cmake_library_set_init_script(render_3D::msdfgen
"set(MSDFGEN_ROOT \"${MSDFGEN_ROOT}\")"
"set(msdfgen_DIR \"${MSDFGEN_CONFIG_DIR}\")"
)
rcl_cmake_library_set_clear_script(render_3D::msdfgen
"unset(MSDFGEN_ROOT)"
"unset(msdfgen_DIR)"
)
set(msdfgl_cmake_option "")
if (WIN32)
_register_git_cmake_library(render_3D::PThreads4W
https://github.com/jwinarske/pthreads4w.git
"cmake"
)
rcl_get_effective_install_dir(render_3D::PThreads4W PTHREADS4W_ROOT)
set(PThreads4W_option ${base_options})
list(APPEND PThreads4W_option
"-DDIST_ROOT=${PTHREADS4W_ROOT}"
"-DCMAKE_C_FLAGS=-D_WINDLL"
"-DCMAKE_CXX_FLAGS=-D_WINDLL"
)
rcl_cmake_library_set_cmake_options(render_3D::PThreads4W ${PThreads4W_option})
rcl_cmake_library_set_init_script(render_3D::PThreads4W
"set(PTHREADS4W_ROOT \"${PTHREADS4W_ROOT}\")"
)
rcl_cmake_library_set_clear_script(render_3D::PThreads4W
"unset(PTHREADS4W_ROOT)"
)
endif ()
set(glfw3_option ${base_options})
_register_git_cmake_library(render_3D::glfw3
https://github.com/glfw/glfw.git
"3.4"
)
rcl_get_effective_install_dir(render_3D::glfw3 GLFW3_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::glfw3 ${glfw3_option})
set(msdf-atlas-gen_option ${base_options})
list(APPEND msdf-atlas-gen_option
-DMSDFGEN_DISABLE_SVG=OFF
-DMSDFGEN_USE_SKIA=OFF
-DMSDF_ATLAS_BUILD_STANDALONE=OFF
-DMSDF_ATLAS_USE_VCPKG=OFF
-DMSDF_ATLAS_USE_SKIA=OFF
-DMSDF_ATLAS_DYNAMIC_RUNTIME=ON
-DMSDF_ATLAS_MSDFGEN_EXTERNAL=OFF
-DMSDF_ATLAS_INSTALL=ON
-DMSDFGEN_INSTALL=ON
-DBUILD_SHARED_LIBS=OFF
)
_register_git_cmake_library(render_3D::msdf-atlas-gen
https://github.com/Chlumsky/msdf-atlas-gen.git
v1.4
)
rcl_get_effective_install_dir(render_3D::msdf-atlas-gen MSDF_ATLAS_GEN_ROOT)
set(MSDF_ATLAS_GEN_CONFIG_DIR "${MSDF_ATLAS_GEN_ROOT}/lib/cmake/msdf-atlas-gen")
set(MSDF_ATLAS_GEN_MSDFGEN_CONFIG_DIR "${MSDF_ATLAS_GEN_ROOT}/lib/cmake/msdfgen")
rcl_cmake_library_set_cmake_options(render_3D::msdf-atlas-gen ${msdf-atlas-gen_option})
rcl_cmake_library_set_deps(render_3D::msdf-atlas-gen
global::zlib
global::libpng
render_3D::freetype
render_3D::tinyxml2
)
rcl_cmake_library_set_other_use_opt(render_3D::msdf-atlas-gen
"-Dmsdf-atlas-gen_DIR=\"${MSDF_ATLAS_GEN_CONFIG_DIR}\""
"-Dmsdfgen_DIR=\"${MSDF_ATLAS_GEN_MSDFGEN_CONFIG_DIR}\""
)
rcl_cmake_library_set_init_script(render_3D::msdf-atlas-gen
"set(MSDF_ATLAS_GEN_ROOT \"${MSDF_ATLAS_GEN_ROOT}\")"
"set(msdf-atlas-gen_DIR \"${MSDF_ATLAS_GEN_CONFIG_DIR}\")"
"set(msdfgen_DIR \"${MSDF_ATLAS_GEN_MSDFGEN_CONFIG_DIR}\")"
)
rcl_cmake_library_set_clear_script(render_3D::msdf-atlas-gen
"unset(MSDF_ATLAS_GEN_ROOT)"
"unset(msdf-atlas-gen_DIR)"
"unset(msdfgen_DIR)"
)
set(cglm_option ${base_options})
_register_git_cmake_library(render_3D::cglm
"https://github.com/recp/cglm.git"
v0.9.6
)
rcl_get_effective_install_dir(render_3D::cglm CGLM_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::cglm ${cglm_option})
set(glm_option ${base_options})
_register_git_cmake_library(render_3D::glm
"https://github.com/g-truc/glm.git"
"1.0.3"
)
rcl_get_effective_install_dir(render_3D::glm GLM_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::glm ${glm_option})
set(tinyobjloader_option ${base_options})
list(APPEND tinyobjloader_option
-DCMAKE_POLICY_VERSION_MINIMUM=3.20
)
_register_git_cmake_library(render_3D::tinyobjloader
"https://github.com/tinyobjloader/tinyobjloader.git"
"v1.0.7"
)
rcl_get_effective_install_dir(render_3D::tinyobjloader TINYOBJLOADER_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::tinyobjloader ${tinyobjloader_option})
set(vk-bootstrap_option ${base_options})
_register_git_cmake_library(render_3D::vk-bootstrap
"https://github.com/charles-lunarg/vk-bootstrap.git"
"v1.4.357"
)
rcl_get_effective_install_dir(render_3D::vk-bootstrap VK_BOOTSTRAP_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::vk-bootstrap ${vk-bootstrap_option})
set(Vulkan-Hpp_option ${base_options})
_register_git_cmake_library(render_3D::Vulkan-Hpp
"https://github.com/KhronosGroup/Vulkan-Hpp.git"
"v1.4.357"
)
rcl_get_effective_install_dir(render_3D::Vulkan-Hpp VULKAN_HPP_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::Vulkan-Hpp ${Vulkan-Hpp_option})
find_package(Vulkan QUIET)
if (NOT Vulkan_FOUND AND WIN32)
if (DEFINED ENV{VK_SDK_PATH} AND NOT "$ENV{VK_SDK_PATH}" STREQUAL "")
set(ENV{VULKAN_SDK} "$ENV{VK_SDK_PATH}")
else ()
file(GLOB _vulkan_sdk_roots LIST_DIRECTORIES true "C:/VulkanSDK/*")
list(SORT _vulkan_sdk_roots COMPARE NATURAL ORDER DESCENDING)
foreach (_vulkan_sdk_root IN LISTS _vulkan_sdk_roots)
if (EXISTS "${_vulkan_sdk_root}/Include/vulkan/vulkan.h" AND EXISTS "${_vulkan_sdk_root}/Lib/vulkan-1.lib")
set(ENV{VULKAN_SDK} "${_vulkan_sdk_root}")
break()
endif ()
endforeach ()
endif ()
find_package(Vulkan REQUIRED)
elseif (NOT Vulkan_FOUND)
find_package(Vulkan REQUIRED)
endif ()
get_filename_component(VULKAN_SDK_ROOT "${Vulkan_INCLUDE_DIR}" DIRECTORY)
set(volk_option ${base_options})
list(APPEND volk_option
-DVOLK_INSTALL=ON
-DVOLK_PULL_IN_VULKAN=ON
-DVOLK_HEADERS_ONLY=OFF
-DVOLK_NAMESPACE=OFF
"-DVULKAN_HEADERS_INSTALL_DIR=${VULKAN_SDK_ROOT}"
)
if (WIN32)
list(APPEND volk_option
-DVOLK_STATIC_DEFINES=VK_USE_PLATFORM_WIN32_KHR
)
endif ()
_register_git_cmake_library(render_3D::volk
"https://github.com/zeux/volk.git"
"vulkan-sdk-1.4.357.0"
)
rcl_get_effective_install_dir(render_3D::volk VOLK_ROOT)
set(VOLK_CONFIG_DIR "${VOLK_ROOT}/lib/cmake/volk")
rcl_cmake_library_set_cmake_options(render_3D::volk ${volk_option})
rcl_cmake_library_set_other_use_opt(render_3D::volk
"-Dvolk_DIR=\"${VOLK_CONFIG_DIR}\""
)
rcl_cmake_library_set_init_script(render_3D::volk
"set(VOLK_ROOT \"${VOLK_ROOT}\")"
"set(volk_DIR \"${VOLK_CONFIG_DIR}\")"
)
rcl_cmake_library_set_clear_script(render_3D::volk
"unset(VOLK_ROOT)"
"unset(volk_DIR)"
)
set(VulkanMemoryAllocator_option ${base_options})
_register_git_cmake_library(render_3D::VulkanMemoryAllocator
"https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git"
"v3.3.0"
)
rcl_get_effective_install_dir(render_3D::VulkanMemoryAllocator VULKAN_MEMORY_ALLOCATOR_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::VulkanMemoryAllocator ${VulkanMemoryAllocator_option})
set(tinygltf_option ${base_options})
_register_git_cmake_library(render_3D::tinygltf
"https://github.com/syoyo/tinygltf.git"
"v3.0.0"
)
rcl_get_effective_install_dir(render_3D::tinygltf TINYGLTF_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::tinygltf ${tinygltf_option})
set(fastgltf_option ${base_options})
_register_git_cmake_library(render_3D::fastgltf
"https://github.com/spnda/fastgltf.git"
"v0.9.0"
)
rcl_get_effective_install_dir(render_3D::fastgltf FASTGLTF_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::fastgltf ${fastgltf_option})
set(VulkanSceneGraph_option ${base_options})
_register_git_cmake_library(render_3D::VulkanSceneGraph
"https://github.com/vsg-dev/VulkanSceneGraph.git"
"v1.1.15"
)
rcl_get_effective_install_dir(render_3D::VulkanSceneGraph VULKAN_SCENE_GRAPH_ROOT)
rcl_cmake_library_set_cmake_options(render_3D::VulkanSceneGraph ${VulkanSceneGraph_option})
endblock()