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:
parent
7745c9ef43
commit
72fc81a705
|
@ -9,6 +9,7 @@ option(BUILD_TESTS "Build unit tests" OFF)
|
||||||
if(LINUX OR BSD)
|
if(LINUX OR BSD)
|
||||||
option(ENABLE_X11 "Support X11 window system" ON)
|
option(ENABLE_X11 "Support X11 window system" ON)
|
||||||
option(ENABLE_WAYLAND "Support Wayland window system" ON)
|
option(ENABLE_WAYLAND "Support Wayland window system" ON)
|
||||||
|
option(ALLOW_INSTALL "Allow installation to CMAKE_INSTALL_PREFIX" OFF)
|
||||||
endif()
|
endif()
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
option(SKIP_POSTPROCESS_BUNDLE "Disable bundle post-processing, including Qt additions" OFF)
|
option(SKIP_POSTPROCESS_BUNDLE "Disable bundle post-processing, including Qt additions" OFF)
|
||||||
|
|
|
@ -24,6 +24,12 @@ if(BUILD_TESTS)
|
||||||
message(STATUS "Building unit tests.")
|
message(STATUS "Building unit tests.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(ALLOW_INSTALL)
|
||||||
|
message(WARNING "Install target is enabled. This will install all DuckStation files into:
|
||||||
|
${CMAKE_INSTALL_PREFIX}
|
||||||
|
It does **not** use the LSB subdirectories of bin, share, etc, so you should disable this option if it is set to /usr or /usr/local.")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT IS_SUPPORTED_COMPILER)
|
if(NOT IS_SUPPORTED_COMPILER)
|
||||||
message(WARNING "
|
message(WARNING "
|
||||||
*************** UNSUPPORTED CONFIGURATION ***************
|
*************** UNSUPPORTED CONFIGURATION ***************
|
||||||
|
|
|
@ -221,3 +221,9 @@ function(get_scm_version)
|
||||||
set(SCM_VERSION ${LOCAL_SCM_VERSION} PARENT_SCOPE)
|
set(SCM_VERSION ${LOCAL_SCM_VERSION} PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(install_imported_dep_library name)
|
||||||
|
get_target_property(SONAME "${name}" IMPORTED_SONAME_RELEASE)
|
||||||
|
get_target_property(LOCATION "${name}" IMPORTED_LOCATION_RELEASE)
|
||||||
|
install(FILES "${LOCATION}" RENAME "${SONAME}" DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||||
|
endfunction()
|
||||||
|
|
|
@ -214,4 +214,8 @@ function(add_core_resources target)
|
||||||
endif()
|
endif()
|
||||||
add_resources(${target} ${path} ${CMAKE_SOURCE_DIR}/data/resources/)
|
add_resources(${target} ${path} ${CMAKE_SOURCE_DIR}/data/resources/)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
if(ALLOW_INSTALL)
|
||||||
|
install_imported_dep_library(cpuinfo::cpuinfo)
|
||||||
|
install(DIRECTORY "$<TARGET_FILE_DIR:${target}>/resources" DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||||
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
|
@ -249,6 +249,11 @@ elseif(APPLE)
|
||||||
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/DuckStation.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
|
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/DuckStation.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(ALLOW_INSTALL)
|
||||||
|
# Install main binary.
|
||||||
|
install(TARGETS duckstation-qt RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Compile qrc to a binary file.
|
# Compile qrc to a binary file.
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
set(RCC_FILE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/duckstation-qt.rcc")
|
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)
|
foreach (QM_FILE IN LISTS QM_FILES)
|
||||||
get_filename_component(QM_FILE_NAME ${QM_FILE} NAME)
|
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}")
|
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()
|
endforeach()
|
||||||
else()
|
else()
|
||||||
foreach (QM_FILE IN LISTS QM_FILES)
|
foreach (QM_FILE IN LISTS QM_FILES)
|
||||||
|
|
|
@ -306,5 +306,13 @@ function(add_util_resources target)
|
||||||
target_sources(${target} PRIVATE ${version_lib})
|
target_sources(${target} PRIVATE ${version_lib})
|
||||||
set_source_files_properties(${target} PRIVATE ${version_lib} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks)
|
set_source_files_properties(${target} PRIVATE ${version_lib} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks)
|
||||||
endforeach()
|
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()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
Loading…
Reference in New Issue