Skip to content

Commit 887a550

Browse files
authored
[SPIR-V] Link to SPIRV-Tools via CMake when pkgconfig is missing (#7865)
pkgconfig is usually not available on Windows, so try to use normal CMake modules to locate the binaries for SPIRV-Tools. The patch doesn't change the existing behavior when the pkgconfig is available, only when it is missing. The CMake path is available only with this patch that has already been accepted upstream: KhronosGroup/SPIRV-Tools#5034
1 parent a856a01 commit 887a550

File tree

2 files changed

+45
-6
lines changed

2 files changed

+45
-6
lines changed

llvm-spirv/CMakeLists.txt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,24 @@ endif()
111111

112112
set(LLVM_SPIRV_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include)
113113

114+
# first try locating SPIRV-Tools via pkgconfig (the old way)
114115
pkg_search_module(SPIRV_TOOLS SPIRV-Tools)
115-
if(NOT SPIRV_TOOLS_FOUND)
116+
if (NOT SPIRV_TOOLS_FOUND)
117+
# then try locating SPIRV-Tools via cmake (the new way)
118+
find_package(SPIRV-Tools)
119+
find_package(SPIRV-Tools-tools)
120+
if (SPIRV-Tools_FOUND AND SPIRV-Tools-tools_FOUND)
121+
set(SPIRV_TOOLS_FOUND TRUE)
122+
set(SPIRV_TOOLS_LDFLAGS SPIRV-Tools-shared)
123+
get_target_property(SPIRV_TOOLS_INCLUDE_DIRS SPIRV-Tools-shared INTERFACE_INCLUDE_DIRECTORIES)
124+
endif()
125+
endif()
126+
127+
if (NOT SPIRV_TOOLS_FOUND)
116128
message(STATUS "SPIRV-Tools not found; project will be built without "
117129
"--spirv-tools-dis support.")
118-
endif(NOT SPIRV_TOOLS_FOUND)
130+
endif()
131+
119132

120133
add_subdirectory(lib/SPIRV)
121134
add_subdirectory(tools/llvm-spirv)

llvm-spirv/test/CMakeLists.txt

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ llvm_canonicalize_cmake_booleans(SPIRV_SKIP_DEBUG_INFO_TESTS)
55
get_target_property(LLVM_SPIRV_DIR llvm-spirv BINARY_DIR)
66
set(LLVM_SPIRV_TEST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
77

8-
if(SPIRV_TOOLS_FOUND)
8+
if(SPIRV_TOOLS_FOUND AND NOT SPIRV-Tools-tools_FOUND)
9+
# we found SPIRV-Tools via pkgconfig
910
find_program(SPIRV_TOOLS_SPIRV_AS NAMES spirv-as PATHS ${SPIRV_TOOLS_PREFIX}/bin)
1011
if(SPIRV_TOOLS_SPIRV_AS)
1112
set(SPIRV_TOOLS_SPIRV_AS_FOUND True)
@@ -22,19 +23,44 @@ if(SPIRV_TOOLS_FOUND)
2223
endif()
2324

2425
set(SPIRV_TOOLS_BINDIR "${SPIRV_TOOLS_PREFIX}/bin")
26+
elseif(SPIRV-Tools-tools_FOUND)
27+
# we found SPIRV-Tools via cmake targets
28+
29+
if(TARGET spirv-as)
30+
set(SPIRV_TOOLS_SPIRV_AS_FOUND True)
31+
endif()
32+
33+
if(TARGET spirv-link)
34+
set(SPIRV_TOOLS_SPIRV_LINK_FOUND True)
35+
endif()
36+
37+
if(TARGET spirv-val)
38+
set(SPIRV_TOOLS_SPIRV_VAL_FOUND True)
39+
endif()
40+
41+
get_target_property(SPIRV_AS_PATH spirv-as IMPORTED_LOCATION_RELEASE)
42+
if(NOT SPIRV_AS_PATH)
43+
get_target_property(SPIRV_AS_PATH spirv-as IMPORTED_LOCATION_DEBUG)
44+
endif()
45+
46+
if(SPIRV_AS_PATH)
47+
cmake_path(GET SPIRV_AS_PATH PARENT_PATH SPIRV_AS_PATH)
48+
endif()
49+
50+
set(SPIRV_TOOLS_BINDIR "${SPIRV_AS_PATH}")
2551
endif()
2652

27-
if(NOT SPIRV_TOOLS_SPIRV_AS)
53+
if(NOT SPIRV_TOOLS_SPIRV_AS_FOUND)
2854
message(WARNING "spirv-as not found! SPIR-V assembly tests will not be run.")
2955
set(SPIRV_TOOLS_SPIRV_AS_FOUND False)
3056
endif()
3157

32-
if(NOT SPIRV_TOOLS_SPIRV_LINK)
58+
if(NOT SPIRV_TOOLS_SPIRV_LINK_FOUND)
3359
message(WARNING "spirv-link not found! SPIR-V test involving the linker will not be run.")
3460
set(SPIRV_TOOLS_SPIRV_LINK_FOUND False)
3561
endif()
3662

37-
if(NOT SPIRV_TOOLS_SPIRV_VAL)
63+
if(NOT SPIRV_TOOLS_SPIRV_VAL_FOUND)
3864
message(WARNING "spirv-val not found! SPIR-V generated for test suite will not be validated.")
3965
set(SPIRV_TOOLS_SPIRV_VAL_FOUND False)
4066
endif()

0 commit comments

Comments
 (0)