summaryrefslogtreecommitdiffstats
path: root/external
diff options
context:
space:
mode:
authorEmil Imbert Villumsen <emimvi@gmail.com>2025-06-13 21:48:26 +0200
committerGitHub <noreply@github.com>2025-06-13 12:48:26 -0700
commit1d8f6f86d1a6d33ff6e6429206b94d72457e1378 (patch)
treee5ae1ec38bc4d8703a9bed809fdd4cf05749b7c5 /external
parentdebdc7251ff31b82ea221893c6475e96dbe4dc16 (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.txt44
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)