|
1 |
| -# Copyright (c) 2015-2023 The Khronos Group Inc. |
| 1 | +# Copyright (c) 2015-2016 The Khronos Group Inc. |
2 | 2 | #
|
3 | 3 | # Permission is hereby granted, free of charge, to any person obtaining a
|
4 | 4 | # copy of this software and/or associated documentation files (the
|
|
23 | 23 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
24 | 24 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
25 | 25 | # MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
26 |
| -cmake_minimum_required(VERSION 3.14) |
27 |
| -project(SPIRV_HEADERS LANGUAGES CXX VERSION 1.5.5) |
28 | 26 |
|
29 |
| -if (CMAKE_VERSION VERSION_LESS "3.21") |
30 |
| - # https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html |
31 |
| - string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} PROJECT_IS_TOP_LEVEL) |
| 27 | +# |
| 28 | +# The SPIR-V headers from the SPIR-V Registry |
| 29 | +# https://www.khronos.org/registry/spir-v/ |
| 30 | +# |
| 31 | +cmake_minimum_required(VERSION 3.0) |
| 32 | +project(SPIRV-Headers VERSION 1.5.5) |
| 33 | + |
| 34 | +# There are two ways to use this project. |
| 35 | +# |
| 36 | +# Using this source tree directly from a CMake-based project: |
| 37 | +# 1. Add an add_subdirectory directive to include this sub directory. |
| 38 | +# 2. Use ${SPIRV-Headers_SOURCE_DIR}/include} in a target_include_directories |
| 39 | +# command. |
| 40 | +# |
| 41 | +# Installing the headers first, then using them with an implicit include |
| 42 | +# directory. To install the headers: |
| 43 | +# 1. mkdir build ; cd build |
| 44 | +# 2. cmake .. |
| 45 | +# 3. cmake --build . --target install |
| 46 | + |
| 47 | +option(SPIRV_HEADERS_SKIP_EXAMPLES "Skip building examples" |
| 48 | + ${SPIRV_HEADERS_SKIP_EXAMPLES}) |
| 49 | + |
| 50 | +option(SPIRV_HEADERS_SKIP_INSTALL "Skip install" |
| 51 | + ${SPIRV_HEADERS_SKIP_INSTALL}) |
| 52 | + |
| 53 | +if(NOT ${SPIRV_HEADERS_SKIP_EXAMPLES}) |
| 54 | + set(SPIRV_HEADERS_ENABLE_EXAMPLES ON) |
32 | 55 | endif()
|
33 | 56 |
|
34 |
| -add_library(SPIRV-Headers INTERFACE) |
35 |
| -add_library(SPIRV-Headers::SPIRV-Headers ALIAS SPIRV-Headers) |
36 |
| -target_include_directories(SPIRV-Headers INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>) |
| 57 | +if(NOT ${SPIRV_HEADERS_SKIP_INSTALL}) |
| 58 | + set(SPIRV_HEADERS_ENABLE_INSTALL ON) |
| 59 | + # legacy |
| 60 | + add_custom_target(install-headers |
| 61 | + COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv |
| 62 | + $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/include/spirv) |
| 63 | +endif() |
37 | 64 |
|
38 |
| -if (PROJECT_IS_TOP_LEVEL) |
39 |
| - option(BUILD_TESTS "Build the tests") |
40 |
| - if (BUILD_TESTS) |
41 |
| - add_subdirectory(tests) |
42 |
| - endif() |
| 65 | +if (SPIRV_HEADERS_ENABLE_EXAMPLES) |
| 66 | + message(STATUS "Building SPIRV-Header examples") |
| 67 | + add_subdirectory(example) |
| 68 | +endif() |
43 | 69 |
|
44 |
| - include(GNUInstallDirs) |
45 |
| - include(CMakePackageConfigHelpers) |
| 70 | +include(GNUInstallDirs) |
| 71 | +add_library(${PROJECT_NAME} INTERFACE) |
| 72 | +target_include_directories(${PROJECT_NAME} INTERFACE |
| 73 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 74 | +) |
| 75 | + |
| 76 | +# Installation |
46 | 77 |
|
47 |
| - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| 78 | +if (SPIRV_HEADERS_ENABLE_INSTALL) |
| 79 | + message(STATUS "Installing SPIRV-Header") |
48 | 80 |
|
49 |
| - set(cmake_install_dir "${CMAKE_INSTALL_DATADIR}/cmake/SPIRV-Headers") |
50 |
| - set(version_config "${CMAKE_CURRENT_BINARY_DIR}/generated/SPIRV-HeadersConfigVersion.cmake") |
| 81 | + set(config_install_dir "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}") |
51 | 82 |
|
52 |
| - write_basic_package_version_file("${version_config}" COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT) |
53 |
| - install(FILES "${version_config}" DESTINATION "${cmake_install_dir}") |
| 83 | + set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") |
54 | 84 |
|
55 |
| - install(TARGETS SPIRV-Headers EXPORT "SPIRV-HeadersConfig" INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
56 |
| - install(EXPORT "SPIRV-HeadersConfig" NAMESPACE "SPIRV-Headers::" DESTINATION "${cmake_install_dir}") |
| 85 | + set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") |
| 86 | + set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") |
| 87 | + set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") |
| 88 | + set(namespace "${PROJECT_NAME}::") |
57 | 89 |
|
58 |
| - if (IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR}) |
59 |
| - set(SPIRV_HEADERS_PKGCONFIG_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) |
60 |
| - else() |
61 |
| - set(SPIRV_HEADERS_PKGCONFIG_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) |
| 90 | + include(CMakePackageConfigHelpers) |
| 91 | + |
| 92 | + if (NOT CMAKE_VERSION VERSION_LESS 3.14) |
| 93 | + set(arch_independent_str ARCH_INDEPENDENT) |
62 | 94 | endif()
|
63 |
| - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Headers.pc.in ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Headers.pc @ONLY) |
64 |
| - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Headers.pc" DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig) |
| 95 | + write_basic_package_version_file( |
| 96 | + "${version_config}" |
| 97 | + COMPATIBILITY SameMajorVersion |
| 98 | + ${arch_independent_str} |
| 99 | + ) |
| 100 | + |
| 101 | + configure_package_config_file( |
| 102 | + "cmake/Config.cmake.in" |
| 103 | + "${project_config}" |
| 104 | + INSTALL_DESTINATION "${config_install_dir}" |
| 105 | + ) |
| 106 | + |
| 107 | + install( |
| 108 | + TARGETS ${PROJECT_NAME} |
| 109 | + EXPORT "${TARGETS_EXPORT_NAME}" |
| 110 | + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 111 | + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 112 | + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
| 113 | + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} |
| 114 | + ) |
| 115 | + |
| 116 | + install( |
| 117 | + DIRECTORY include/spirv |
| 118 | + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} |
| 119 | + ) |
| 120 | + |
| 121 | + install( |
| 122 | + FILES "${project_config}" "${version_config}" |
| 123 | + DESTINATION "${config_install_dir}" |
| 124 | + ) |
| 125 | + |
| 126 | + install( |
| 127 | + EXPORT "${TARGETS_EXPORT_NAME}" |
| 128 | + NAMESPACE "${namespace}" |
| 129 | + DESTINATION "${config_install_dir}" |
| 130 | + ) |
| 131 | + |
| 132 | + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Headers.pc.in ${CMAKE_BINARY_DIR}/SPIRV-Headers.pc @ONLY) |
| 133 | + install( |
| 134 | + FILES "${CMAKE_BINARY_DIR}/SPIRV-Headers.pc" |
| 135 | + DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig |
| 136 | + ) |
65 | 137 | endif()
|
0 commit comments