1 From 534810e26e0be782b2c702a97bf726af250b8cd6 Mon Sep 17 00:00:00 2001
2 From: Jeremy Gebben <jeremyg@lunarg.com>
3 Date: Thu, 17 Feb 2022 15:26:25 -0700
4 Subject: [PATCH] build: Handle many permutations of SPIRV-Headers locations
5
6 If the SPIRV-Headers package is not found, fall back to looking for
7 headers in SPIRV_HEADERS_INSTALL_DIR or SPIRV_HEADERS_INCLUDE_DIR.
8
9 Fixes #3765
10 ---
11 CMakeLists.txt | 19 ++++++++++++++++---
12 layers/CMakeLists.txt | 7 +------
13 tests/CMakeLists.txt | 6 +++---
14 3 files changed, 20 insertions(+), 12 deletions(-)
15
16 diff --git a/CMakeLists.txt b/CMakeLists.txt
17 index d4ca786ca07..58a966f03d6 100644
18 --- a/CMakeLists.txt
19 +++ b/CMakeLists.txt
20 @@ -256,10 +256,23 @@ if (USE_ROBIN_HOOD_HASHING)
21 endif()
22 endif()
23
24 -set(SPIRV_HEADERS_INCLUDE_DIR "" CACHE STRING "")
25 if(BUILD_LAYERS OR BUILD_TESTS)
26 - if (SPIRV_HEADERS_INCLUDE_DIR STREQUAL "")
27 - find_package(SPIRV-Headers REQUIRED CONFIG)
28 + find_package(SPIRV-Headers CONFIG QUIET)
29 + if(SPIRV-Headers_FOUND)
30 + # pefer the package if found. Note that if SPIRV_HEADERS_INSTALL_DIR points at an 'installed'
31 + # version of SPIRV-Headers, the package will be found.
32 + get_target_property(SPIRV_HEADERS_INCLUDE_DIR SPIRV-Headers::SPIRV-Headers INTERFACE_INCLUDE_DIRECTORIES)
33 + elseif(SPIRV_HEADERS_INCLUDE_DIR)
34 + # This is set by SPIRV-Tools (in parent scope!) and also some packages that include VVL with add_subdirectory
35 + if (NOT EXISTS "${SPIRV_HEADERS_INCLUDE_DIR}/spirv/unified1/spirv.h")
36 + message(FATAL_ERROR "Cannot find SPIRV-Headers from SPIRV_HEADERS_INCLUDE_DIR: ${SPIRV_HEADERS_INCLUDE_DIR}")
37 + endif()
38 + elseif(SPIRV_HEADERS_INSTALL_DIR)
39 + # This is our official variable for setting SPIRV-Headers location, but pointing at the raw source of SPIRV-Headers
40 + if (NOT EXISTS "${SPIRV_HEADERS_INSTALL_DIR}/include/spirv/unified1/spirv.h")
41 + message(FATAL_ERROR "Cannot find SPIRV-Headers from SPIRV_HEADERS_INSTALL_DIR: ${SPIRV_HEADERS_INSTALL_DIR}")
42 + endif()
43 + set(SPIRV_HEADERS_INCLUDE_DIR "${SPIRV_HEADERS_INSTALL_DIR}/include")
44 endif()
45 endif()
46
47 diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt
48 index 6edcf6eb5ab..59e294a0793 100644
49 --- a/layers/CMakeLists.txt
50 +++ b/layers/CMakeLists.txt
51 @@ -309,12 +309,7 @@ if(BUILD_LAYERS)
52 if (USE_ROBIN_HOOD_HASHING)
53 target_include_directories(VkLayer_khronos_validation PRIVATE ${ROBIN_HOOD_HASHING_INCLUDE_DIR})
54 endif()
55 - if (SPIRV_HEADERS_INCLUDE_DIR STREQUAL "")
56 - target_link_libraries(VkLayer_khronos_validation PRIVATE SPIRV-Headers::SPIRV-Headers)
57 - else()
58 - target_include_directories(VkLayer_khronos_validation PRIVATE ${SPIRV_HEADERS_INCLUDE_DIR})
59 - endif()
60 -
61 + target_include_directories(VkLayer_khronos_validation PRIVATE ${SPIRV_HEADERS_INCLUDE_DIR})
62 target_link_libraries(VkLayer_khronos_validation PRIVATE SPIRV-Tools-static SPIRV-Tools-opt)
63
64
65 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
66 index 2b98d109b7f..780c0538486 100644
67 --- a/tests/CMakeLists.txt
68 +++ b/tests/CMakeLists.txt
69 @@ -1,6 +1,6 @@
70 # ~~~
71 -# Copyright (c) 2014-2021 Valve Corporation
72 -# Copyright (c) 2014-2021 LunarG, Inc.
73 +# Copyright (c) 2014-2022 Valve Corporation
74 +# Copyright (c) 2014-2022 LunarG, Inc.
75 #
76 # Licensed under the Apache License, Version 2.0 (the "License");
77 # you may not use this file except in compliance with the License.
78 @@ -149,11 +149,11 @@ if (NOT MSVC)
79 target_compile_options(vk_layer_validation_tests PRIVATE "-Wno-sign-compare")
80 endif()
81
82 +target_include_directories(vk_layer_validation_tests PRIVATE ${SPIRV_HEADERS_INCLUDE_DIR})
83 # Specify target_link_libraries
84 target_link_libraries(vk_layer_validation_tests
85 PRIVATE VkLayer_utils
86 ${GLSLANG_LIBRARIES}
87 - SPIRV-Headers::SPIRV-Headers
88 SPIRV-Tools-static SPIRV-Tools-opt
89 GTest::gtest GTest::gtest_main)
90
|