#========================================================== # 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/ (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}") ]])