rexglue-skate3/cmake/rexglue_install.cmake
2026-06-06 15:13:35 +01:00

193 lines
6.1 KiB
CMake

#==========================================================
# SDK Install/Export Rules
#==========================================================
set_target_properties(rexcore PROPERTIES EXPORT_NAME core)
set_target_properties(rexfilesystem PROPERTIES EXPORT_NAME filesystem)
set_target_properties(rexui PROPERTIES EXPORT_NAME ui)
set_target_properties(rexinput PROPERTIES EXPORT_NAME input)
set_target_properties(rexaudio PROPERTIES EXPORT_NAME audio)
set_target_properties(rexgraphics PROPERTIES EXPORT_NAME graphics)
set_target_properties(rexruntime PROPERTIES EXPORT_NAME runtime)
set_target_properties(rexcodegen PROPERTIES EXPORT_NAME codegen)
set(REXGLUE_INSTALL_TARGETS
rexruntime
disruptorplus renderdoc simde tomlplusplus
aes128 mspack o1heap disasm xxhash
libavcodec libavutil
rexglue
)
if(REXGLUE_USE_VULKAN)
list(APPEND REXGLUE_INSTALL_TARGETS
SPIRV glslang MachineIndependent GenericCodeGen OSDependent OGLCompiler # glslang
SPIRV-Tools-static
)
endif()
if(REXGLUE_USE_D3D12)
list(APPEND REXGLUE_INSTALL_TARGETS dxc-headers)
endif()
if(REXGLUE_ENABLE_TRACY)
list(APPEND REXGLUE_INSTALL_TARGETS TracyClient)
endif()
set(REXGLUE_INSTALL_FIDELITYFX_TARGETS)
if(TARGET amd_fidelityfx_vk)
list(APPEND REXGLUE_INSTALL_FIDELITYFX_TARGETS amd_fidelityfx_vk)
endif()
if(TARGET amd_fidelityfx_dx12)
list(APPEND REXGLUE_INSTALL_FIDELITYFX_TARGETS amd_fidelityfx_dx12)
endif()
install(TARGETS ${REXGLUE_INSTALL_TARGETS}
EXPORT rexglueTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(REXGLUE_INSTALL_FIDELITYFX_TARGETS)
install(TARGETS ${REXGLUE_INSTALL_FIDELITYFX_TARGETS}
EXPORT rexglueTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endif()
# Install public headers
install(DIRECTORY include/rex
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# Install generated version header
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/include/rex/version.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rex
)
# Install vendored header-only library headers
install(DIRECTORY thirdparty/disruptorplus/include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/disruptorplus
)
install(DIRECTORY thirdparty/renderdoc/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/renderdoc
FILES_MATCHING PATTERN "*.h"
)
install(DIRECTORY thirdparty/tomlplusplus/include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(DIRECTORY thirdparty/simde/simde
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.h"
)
install(FILES
thirdparty/xxHash/xxhash.h
thirdparty/xxHash/xxh3.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(FILES
thirdparty/o1heap/o1heap/o1heap.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(FILES
thirdparty/imgui/imgui.h
thirdparty/imgui/imconfig.h
thirdparty/imgui/imgui_internal.h
thirdparty/imgui/imstb_rectpack.h
thirdparty/imgui/imstb_textedit.h
thirdparty/imgui/imstb_truetype.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# Install SPIRV-Tools headers (only the public API, not opt/linker)
if(REXGLUE_USE_VULKAN)
install(FILES
thirdparty/spirv-tools/include/spirv-tools/libspirv.h
thirdparty/spirv-tools/include/spirv-tools/libspirv.hpp
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/spirv-tools
)
endif()
# Install platform entry point sources and ReXApp for SDK consumers
install(FILES
src/ui/windowed_app_main_win.cpp
src/ui/windowed_app_main_posix.cpp
src/ui/windowed_app_main_sdl.cpp
src/ui/rex_app.cpp
DESTINATION ${CMAKE_INSTALL_DATADIR}/rexglue
)
# Install DXC API headers (vendored, for D3D12 backend)
if(REXGLUE_USE_D3D12)
install(FILES
thirdparty/dxc/include/DxbcConverter.h
thirdparty/dxc/include/dxcapi.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dxc
)
endif()
# Generate and install package config files
configure_package_config_file(
cmake/rexglueConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/rexglueConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rexglue
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/rexglueConfigVersion.cmake
VERSION ${REXGLUE_NUMERIC_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/rexglueConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/rexglueConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rexglue
)
install(FILES
${CMAKE_SOURCE_DIR}/cmake/rexglue_helpers.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rexglue
)
# Export targets with rex:: namespace
install(EXPORT rexglueTargets
FILE rexglueTargets.cmake
NAMESPACE rex::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rexglue
)
# Register in the CMake User Package Registry after install.
# This makes find_package(rexglue) work with no REXSDK env var or CMAKE_PREFIX_PATH.
# Multiple SxS installs coexist. Each prefix gets a unique hash entry.
#
# Windows: HKCU\Software\Kitware\CMake\Packages\rexglue (REG_SZ, value name = MD5 hash)
# Unix: ~/.cmake/packages/rexglue/<hash> (file containing prefix path)
install(CODE [[
# Normalize path casing on Windows before hashing to avoid duplicate entries
if(CMAKE_HOST_WIN32)
string(TOLOWER "${CMAKE_INSTALL_PREFIX}" _reg_key)
else()
set(_reg_key "${CMAKE_INSTALL_PREFIX}")
endif()
string(MD5 _hash "${_reg_key}")
if(CMAKE_HOST_WIN32)
# Windows CMake User Package Registry lives in HKCU (not the filesystem)
set(_reg_root "HKCU\\Software\\Kitware\\CMake\\Packages\\rexglue")
execute_process(
COMMAND reg add "${_reg_root}" /v "${_hash}" /t REG_SZ /d "${CMAKE_INSTALL_PREFIX}" /f
OUTPUT_QUIET ERROR_QUIET
)
else()
set(_reg_dir "$ENV{HOME}/.cmake/packages/rexglue")
file(MAKE_DIRECTORY "${_reg_dir}")
file(WRITE "${_reg_dir}/${_hash}" "${CMAKE_INSTALL_PREFIX}")
endif()
message(STATUS "Registered rexglue in CMake user package registry")
message(STATUS " -> ${CMAKE_INSTALL_PREFIX}")
]])