CMake: Add install target

Do **not** use this with /usr or /usr/local. It creates subdirectories
for resources/translations in the install prefix.

It's intended for creating a relocatable, self-contained bundle, which
can be packaged.
This commit is contained in:
Stenzek
2024-08-12 18:49:28 +10:00
parent 7745c9ef43
commit 72fc81a705
6 changed files with 33 additions and 0 deletions

View File

@ -214,4 +214,8 @@ function(add_core_resources target)
endif()
add_resources(${target} ${path} ${CMAKE_SOURCE_DIR}/data/resources/)
endforeach()
if(ALLOW_INSTALL)
install_imported_dep_library(cpuinfo::cpuinfo)
install(DIRECTORY "$<TARGET_FILE_DIR:${target}>/resources" DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()
endfunction()

View File

@ -249,6 +249,11 @@ elseif(APPLE)
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/DuckStation.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
endif()
if(ALLOW_INSTALL)
# Install main binary.
install(TARGETS duckstation-qt RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()
# Compile qrc to a binary file.
if(NOT APPLE)
set(RCC_FILE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/duckstation-qt.rcc")
@ -271,6 +276,9 @@ if(NOT APPLE)
foreach (QM_FILE IN LISTS QM_FILES)
get_filename_component(QM_FILE_NAME ${QM_FILE} NAME)
add_custom_command(TARGET duckstation-qt POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${QM_FILE}" "${QM_OUTPUT_DIR}/${QM_FILE_NAME}")
if(ALLOW_INSTALL)
install(FILES "${QM_FILE}" DESTINATION "${CMAKE_INSTALL_PREFIX}/translations")
endif()
endforeach()
else()
foreach (QM_FILE IN LISTS QM_FILES)

View File

@ -306,5 +306,13 @@ function(add_util_resources target)
target_sources(${target} PRIVATE ${version_lib})
set_source_files_properties(${target} PRIVATE ${version_lib} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks)
endforeach()
elseif(ALLOW_INSTALL)
# Ensure we look for dependency libraries in the installation directory.
set_target_properties(${target} PROPERTIES INSTALL_RPATH "$ORIGIN")
# Copy dependency libraries to installation directory.
install_imported_dep_library(Shaderc::shaderc_shared)
install_imported_dep_library(spirv-cross-c-shared)
install_imported_dep_library(SoundTouch::SoundTouchDLL)
endif()
endfunction()