Improved CMake install step. (#2963)
Added exports for libraries. External libraries that themselves use libraries require all dependencies have exports, so not having exports can cause major problems when used within other projects. Install paths for exports are now placed in the proper directories expected by Windows and *nix systems. Config files are generated as well, which should work with CMake's find_package() function once installed.
This commit is contained in:
Родитель
e99b918221
Коммит
9c0ae6bb8e
|
@ -206,6 +206,27 @@ else()
|
|||
endmacro()
|
||||
endif()
|
||||
|
||||
if(ENABLE_SPIRV_TOOLS_INSTALL)
|
||||
if(WIN32)
|
||||
macro(spvtools_config_package_dir TARGET PATH)
|
||||
set(${PATH} ${TARGET}/cmake)
|
||||
endmacro()
|
||||
else()
|
||||
macro(spvtools_config_package_dir TARGET PATH)
|
||||
set(${PATH} lib/cmake/${TARGET})
|
||||
endmacro()
|
||||
endif()
|
||||
|
||||
macro(spvtools_generate_config_file TARGET)
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/${TARGET}Config.cmake
|
||||
"include(CMakeFindDependencyMacro)\n"
|
||||
"find_dependency(${SPIRV_TOOLS})\n"
|
||||
"include(\${CMAKE_CURRENT_LIST_DIR}/${TARGET}Targets.cmake)\n"
|
||||
"set(${TARGET}_LIBRARIES ${TARGET})\n"
|
||||
"get_target_property(${TARGET}_INCLUDE_DIRS ${TARGET} INTERFACE_INCLUDE_DIRECTORIES)\n")
|
||||
endmacro()
|
||||
endif()
|
||||
|
||||
# Defaults to OFF if the user didn't set it.
|
||||
option(SPIRV_SKIP_EXECUTABLES
|
||||
"Skip building the executable and tests along with the library"
|
||||
|
|
|
@ -340,7 +340,7 @@ spvtools_default_compile_options(${SPIRV_TOOLS})
|
|||
target_include_directories(${SPIRV_TOOLS}
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${spirv-tools_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
PRIVATE ${spirv-tools_BINARY_DIR}
|
||||
PRIVATE ${SPIRV_HEADER_INCLUDE_DIR}
|
||||
)
|
||||
|
@ -353,7 +353,7 @@ spvtools_default_compile_options(${SPIRV_TOOLS}-shared)
|
|||
target_include_directories(${SPIRV_TOOLS}-shared
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${spirv-tools_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
PRIVATE ${spirv-tools_BINARY_DIR}
|
||||
PRIVATE ${SPIRV_HEADER_INCLUDE_DIR}
|
||||
)
|
||||
|
@ -379,7 +379,17 @@ if(ENABLE_SPIRV_TOOLS_INSTALL)
|
|||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(EXPORT ${SPIRV_TOOLS}Targets DESTINATION lib/cmake)
|
||||
export(EXPORT ${SPIRV_TOOLS}Targets FILE ${SPIRV_TOOLS}Target.cmake)
|
||||
|
||||
spvtools_config_package_dir(${SPIRV_TOOLS} PACKAGE_DIR)
|
||||
install(EXPORT ${SPIRV_TOOLS}Targets FILE ${SPIRV_TOOLS}Target.cmake DESTINATION ${PACKAGE_DIR})
|
||||
|
||||
# Special config file for root library compared to other libs.
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/${SPIRV_TOOLS}Config.cmake
|
||||
"include(\${CMAKE_CURRENT_LIST_DIR}/${SPIRV_TOOLS}Target.cmake)\n"
|
||||
"set(${SPIRV_TOOLS}_LIBRARIES ${SPIRV_TOOLS})\n"
|
||||
"get_target_property(${SPIRV_TOOLS}_INCLUDE_DIRS ${SPIRV_TOOLS} INTERFACE_INCLUDE_DIRECTORIES)\n")
|
||||
install(FILES ${CMAKE_BINARY_DIR}/${SPIRV_TOOLS}Config.cmake DESTINATION ${PACKAGE_DIR})
|
||||
endif(ENABLE_SPIRV_TOOLS_INSTALL)
|
||||
|
||||
if(MSVC)
|
||||
|
|
|
@ -153,8 +153,6 @@ if(SPIRV_BUILD_FUZZER)
|
|||
target_include_directories(SPIRV-Tools-fuzz
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${spirv-tools_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${SPIRV_HEADER_INCLUDE_DIR}>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
PRIVATE ${spirv-tools_BINARY_DIR}
|
||||
|
@ -174,7 +172,14 @@ if(SPIRV_BUILD_FUZZER)
|
|||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(EXPORT SPIRV-Tools-fuzzTargets DESTINATION lib/cmake)
|
||||
export(EXPORT SPIRV-Tools-fuzzTargets FILE SPIRV-Tools-fuzzTarget.cmake)
|
||||
|
||||
spvtools_config_package_dir(SPIRV-Tools-fuzz PACKAGE_DIR)
|
||||
install(EXPORT SPIRV-Tools-fuzzTargets FILE SPIRV-Tools-fuzzTarget.cmake
|
||||
DESTINATION ${PACKAGE_DIR})
|
||||
|
||||
spvtools_generate_config_file(SPIRV-Tools-fuzz)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/SPIRV-Tools-fuzzConfig.cmake DESTINATION ${PACKAGE_DIR})
|
||||
endif(ENABLE_SPIRV_TOOLS_INSTALL)
|
||||
|
||||
endif(SPIRV_BUILD_FUZZER)
|
||||
|
|
|
@ -19,8 +19,6 @@ spvtools_default_compile_options(SPIRV-Tools-link)
|
|||
target_include_directories(SPIRV-Tools-link
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${spirv-tools_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${SPIRV_HEADER_INCLUDE_DIR}>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
PRIVATE ${spirv-tools_BINARY_DIR}
|
||||
|
@ -37,5 +35,12 @@ if(ENABLE_SPIRV_TOOLS_INSTALL)
|
|||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(EXPORT SPIRV-Tools-linkTargets DESTINATION lib/cmake)
|
||||
export(EXPORT SPIRV-Tools-linkTargets FILE SPIRV-Tools-linkTargets.cmake)
|
||||
|
||||
spvtools_config_package_dir(SPIRV-Tools-link PACKAGE_DIR)
|
||||
install(EXPORT SPIRV-Tools-linkTargets FILE SPIRV-Tools-linkTargets.cmake
|
||||
DESTINATION ${PACKAGE_DIR})
|
||||
|
||||
spvtools_generate_config_file(SPIRV-Tools-link)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/SPIRV-Tools-linkConfig.cmake DESTINATION ${PACKAGE_DIR})
|
||||
endif(ENABLE_SPIRV_TOOLS_INSTALL)
|
||||
|
|
|
@ -235,8 +235,6 @@ spvtools_default_compile_options(SPIRV-Tools-opt)
|
|||
target_include_directories(SPIRV-Tools-opt
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${spirv-tools_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${SPIRV_HEADER_INCLUDE_DIR}>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
PRIVATE ${spirv-tools_BINARY_DIR}
|
||||
|
@ -253,5 +251,12 @@ if(ENABLE_SPIRV_TOOLS_INSTALL)
|
|||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(EXPORT SPIRV-Tools-optTargets DESTINATION lib/cmake)
|
||||
export(EXPORT SPIRV-Tools-optTargets FILE SPIRV-Tools-optTargets.cmake)
|
||||
|
||||
spvtools_config_package_dir(SPIRV-Tools-opt PACKAGE_DIR)
|
||||
install(EXPORT SPIRV-Tools-optTargets FILE SPIRV-Tools-optTargets.cmake
|
||||
DESTINATION ${PACKAGE_DIR})
|
||||
|
||||
spvtools_generate_config_file(SPIRV-Tools-opt)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/SPIRV-Tools-optConfig.cmake DESTINATION ${PACKAGE_DIR})
|
||||
endif(ENABLE_SPIRV_TOOLS_INSTALL)
|
||||
|
|
|
@ -79,8 +79,6 @@ spvtools_default_compile_options(SPIRV-Tools-reduce)
|
|||
target_include_directories(SPIRV-Tools-reduce
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${spirv-tools_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${SPIRV_HEADER_INCLUDE_DIR}>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
PRIVATE ${spirv-tools_BINARY_DIR}
|
||||
|
@ -98,5 +96,12 @@ if(ENABLE_SPIRV_TOOLS_INSTALL)
|
|||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(EXPORT SPIRV-Tools-reduceTargets DESTINATION lib/cmake)
|
||||
export(EXPORT SPIRV-Tools-reduceTargets FILE SPIRV-Tools-reduceTarget.cmake)
|
||||
|
||||
spvtools_config_package_dir(SPIRV-Tools-reduce PACKAGE_DIR)
|
||||
install(EXPORT SPIRV-Tools-reduceTargets FILE SPIRV-Tools-reduceTarget.cmake
|
||||
DESTINATION ${PACKAGE_DIR})
|
||||
|
||||
spvtools_generate_config_file(SPIRV-Tools-reduce)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/SPIRV-Tools-reduceConfig.cmake DESTINATION ${PACKAGE_DIR})
|
||||
endif(ENABLE_SPIRV_TOOLS_INSTALL)
|
||||
|
|
Загрузка…
Ссылка в новой задаче