diff options
| author | Emil Imbert Villumsen <emimvi@gmail.com> | 2025-06-13 21:48:26 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-13 12:48:26 -0700 |
| commit | 1d8f6f86d1a6d33ff6e6429206b94d72457e1378 (patch) | |
| tree | e5ae1ec38bc4d8703a9bed809fdd4cf05749b7c5 /external | |
| parent | debdc7251ff31b82ea221893c6475e96dbe4dc16 (diff) | |
Fix SLANG_USE_SYSTEM_SPIRV_HEADERS (#7371)
* Use aliased SPIRV-Headers::SPIRV-Headers to also work with an installed SPIRV-Headers
SPIRV-Headers standalone is only defined when using sources directly.
When consuming an installed SPIRV-Headers via find_package, the full SPIRV-Headers::SPIRV-Headers must be used.
The full syntax is supported by both source and installed builds.
* Fix SLANG_USE_SYSTEM_SPIRV_HEADERS
- Use find_package to bring in SPIRV-Headers cmake targets
- Set SPIRV-Headers_SOURCE_DIR as a workaround when including
spirv-tools
- Query cmake for SLANG_SPIRV_HEADERS_INCLUDE_DIR location, supporting
default, SLANG_OVERRIDE_SPIRV_HEADERS_PATH and find_package builds.
- Cleanup unnecessary SPIRV_HEADER_DIR (unconditionally overwritten in
spirv-tools)
Diffstat (limited to 'external')
| -rw-r--r-- | external/CMakeLists.txt | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 2b37e1ef4..801cae4d6 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -103,29 +103,39 @@ target_include_directories( ) # SPIRV-Headers -if(NOT ${SLANG_USE_SYSTEM_SPIRV_HEADERS}) - if(NOT SLANG_OVERRIDE_SPIRV_HEADERS_PATH) - add_subdirectory(spirv-headers EXCLUDE_FROM_ALL ${system}) - else() - add_subdirectory( - ${SLANG_OVERRIDE_SPIRV_HEADERS_PATH}/spirv-headers - spirv-headers - EXCLUDE_FROM_ALL - ${system} - ) - endif() +if(${SLANG_USE_SYSTEM_SPIRV_HEADERS}) + find_package(SPIRV-Headers REQUIRED) +elseif(NOT SLANG_OVERRIDE_SPIRV_HEADERS_PATH) + add_subdirectory(spirv-headers EXCLUDE_FROM_ALL ${system}) +else() + add_subdirectory( + ${SLANG_OVERRIDE_SPIRV_HEADERS_PATH}/spirv-headers + spirv-headers + EXCLUDE_FROM_ALL + ${system} + ) endif() if(SLANG_ENABLE_SLANG_GLSLANG) + # When using spirv headers via find_package, SPIRV-Headers_SOURCE_DIR is not set + # SPIRV-Tools requires that variable, as it uses it to detect if SPIRV-Headers is provided by the consumer. + # Fake a source build by setting it here. Ideally SPIRV-Tools should not depend on _SOURCE_DIR + if(${SLANG_USE_SYSTEM_SPIRV_HEADERS}) + get_target_property( + SPIRV-Headers_SOURCE_DIR + SPIRV-Headers::SPIRV-Headers + INTERFACE_INCLUDE_DIRECTORIES + ) + cmake_path( + GET + SPIRV-Headers_SOURCE_DIR + PARENT_PATH SPIRV-Headers_SOURCE_DIR + ) + endif() + # SPIRV-Tools set(SPIRV_TOOLS_BUILD_STATIC ON) set(SPIRV_WERROR OFF) - # Headers - if(NOT SLANG_OVERRIDE_SPIRV_HEADERS_PATH) - set(SPIRV_HEADER_DIR "${CMAKE_CURRENT_LIST_DIR}/spirv-headers/") - else() - set(SPIRV_HEADER_DIR ${SLANG_OVERRIDE_SPIRV_HEADERS_PATH}/spirv-headers) - endif() set(SPIRV_SKIP_TESTS ON) # Tools if(NOT SLANG_OVERRIDE_SPIRV_TOOLS_PATH) |
