-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[SPIR-V] Add SPIR-V Linker #126319
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SPIR-V] Add SPIR-V Linker #126319
Conversation
Signed-off-by: Sarnie, Nick <[email protected]>
@llvm/pr-subscribers-backend-spir-v Author: Nick Sarnie (sarnex) ChangesI want to use Full diff: https://github.com/llvm/llvm-project/pull/126319.diff 3 Files Affected:
diff --git a/llvm/test/CMakeLists.txt b/llvm/test/CMakeLists.txt
index 231dcfa35a34c35..1e4651210cd02fd 100644
--- a/llvm/test/CMakeLists.txt
+++ b/llvm/test/CMakeLists.txt
@@ -232,6 +232,7 @@ if (LLVM_INCLUDE_SPIRV_TOOLS_TESTS)
list(APPEND LLVM_TEST_DEPENDS spirv-dis)
list(APPEND LLVM_TEST_DEPENDS spirv-val)
list(APPEND LLVM_TEST_DEPENDS spirv-as)
+ list(APPEND LLVM_TEST_DEPENDS spirv-link)
endif()
add_custom_target(llvm-test-depends DEPENDS ${LLVM_TEST_DEPENDS})
diff --git a/llvm/test/CodeGen/SPIRV/lit.local.cfg b/llvm/test/CodeGen/SPIRV/lit.local.cfg
index 4655633a2568275..f139d13268af29c 100644
--- a/llvm/test/CodeGen/SPIRV/lit.local.cfg
+++ b/llvm/test/CodeGen/SPIRV/lit.local.cfg
@@ -16,3 +16,4 @@ if config.spirv_tools_tests:
config.substitutions.append(("spirv-dis", os.path.join(config.llvm_tools_dir, "spirv-dis")))
config.substitutions.append(("spirv-val", os.path.join(config.llvm_tools_dir, "spirv-val")))
config.substitutions.append(("spirv-as", os.path.join(config.llvm_tools_dir, "spirv-as")))
+ config.substitutions.append(("spirv-link", os.path.join(config.llvm_tools_dir, "spirv-link")))
diff --git a/llvm/tools/spirv-tools/CMakeLists.txt b/llvm/tools/spirv-tools/CMakeLists.txt
index a47c1f894d7a4a5..c2c0f3e3c2e42e3 100644
--- a/llvm/tools/spirv-tools/CMakeLists.txt
+++ b/llvm/tools/spirv-tools/CMakeLists.txt
@@ -9,10 +9,10 @@ if (NOT "SPIRV" IN_LIST LLVM_TARGETS_TO_BUILD)
message(FATAL_ERROR "Building SPIRV-Tools tests is unsupported without the SPIR-V target")
endif ()
-# SPIRV_DIS and SPIRV_VAL variables can be used to provide paths to existing
-# spirv-dis and spirv-val binaries, respectively. Otherwise, build them from
+# SPIRV_DIS, SPIRV_VAL, SPIRV_AS and SPIRV_LINK variables can be used to provide paths to existing
+# spirv-dis, spirv-val, spirv-as, and spirv-link binaries, respectively. Otherwise, build them from
# SPIRV-Tools source.
-if (NOT SPIRV_DIS OR NOT SPIRV_VAL OR NOT SPIRV_AS)
+if (NOT SPIRV_DIS OR NOT SPIRV_VAL OR NOT SPIRV_AS OR NOT SPIRV_LINK)
include(ExternalProject)
set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/SPIRVTools-bin)
@@ -21,8 +21,8 @@ if (NOT SPIRV_DIS OR NOT SPIRV_VAL OR NOT SPIRV_AS)
GIT_REPOSITORY https://github.com/KhronosGroup/SPIRV-Tools.git
GIT_TAG main
BINARY_DIR ${BINARY_DIR}
- BUILD_COMMAND ${CMAKE_COMMAND} --build ${BINARY_DIR} --target spirv-dis spirv-val spirv-as
- BUILD_BYPRODUCTS ${BINARY_DIR}/tools/spirv-dis ${BINARY_DIR}/tools/spirv-val ${BINARY_DIR}/tools/spirv-as
+ BUILD_COMMAND ${CMAKE_COMMAND} --build ${BINARY_DIR} --target spirv-dis spirv-val spirv-as spirv-link
+ BUILD_BYPRODUCTS ${BINARY_DIR}/tools/spirv-dis ${BINARY_DIR}/tools/spirv-val ${BINARY_DIR}/tools/spirv-as ${BINARY_DIR}/tools/spirv-link
DOWNLOAD_COMMAND git clone https://github.com/KhronosGroup/SPIRV-Tools.git SPIRVTools &&
cd SPIRVTools &&
${Python3_EXECUTABLE} utils/git-sync-deps
@@ -43,7 +43,7 @@ else ()
set(LLVM_LINK_OR_COPY copy)
endif ()
-# Link the provided or just built spirv-dis and spirv-val binaries.
+# Link the provided or just built binaries.
if (SPIRV_DIS)
add_custom_target(spirv-dis
COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_DIS}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-dis")
@@ -73,3 +73,13 @@ else ()
DEPENDS SPIRVTools
)
endif ()
+
+if (SPIRV_LINK)
+ add_custom_target(spirv-link
+ COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_LINK}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-link")
+else ()
+ add_custom_target(spirv-link
+ COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${BINARY_DIR}/tools/spirv-link${CMAKE_EXECUTABLE_SUFFIX}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-link${CMAKE_EXECUTABLE_SUFFIX}"
+ DEPENDS SPIRVTools
+ )
+endif ()
|
ping on this one @bader @sudonatalie @Keenuts @VyacheslavLevytskyy, i need this change to fix a clang lit test, hopefully this should be non-controversial. thanks! |
Thanks Alexey, merging now so I can fix that test. Happy to address any post-merge feedback from others in a follow-up commit. |
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/51/builds/10680 Here is the relevant piece of the build log for the reference
|
…ure is available (#126756) My last change made the test not run when the `spirv-tools` feature is not available, which is always the case in CI for clang tests, but it fails if `spirv-tools` is available for the following reasons: 1) We didn't build `spirv-link` as part of the internal `SPIRV-Tools` build, which is required by the `clang` call in `clang-linker-wrapper`, I already fixed that [here](#126319). 2) We didn't depend on the `SPIRV-Tools` CMake targets in clang tests, so depending on what CMake targets were built before running `check-clang`, `SPIRV-Tools` might not have been built. 3) We didn't check for `llvm-spirv` being available, which is not part of `SPIRV-Tools` but is currently required for SPIR-V compilation. Manually confirmed this works. This test is the bane of my existence. --------- Signed-off-by: Sarnie, Nick <[email protected]>
…-tools feature is available (#126756) My last change made the test not run when the `spirv-tools` feature is not available, which is always the case in CI for clang tests, but it fails if `spirv-tools` is available for the following reasons: 1) We didn't build `spirv-link` as part of the internal `SPIRV-Tools` build, which is required by the `clang` call in `clang-linker-wrapper`, I already fixed that [here](llvm/llvm-project#126319). 2) We didn't depend on the `SPIRV-Tools` CMake targets in clang tests, so depending on what CMake targets were built before running `check-clang`, `SPIRV-Tools` might not have been built. 3) We didn't check for `llvm-spirv` being available, which is not part of `SPIRV-Tools` but is currently required for SPIR-V compilation. Manually confirmed this works. This test is the bane of my existence. --------- Signed-off-by: Sarnie, Nick <[email protected]>
I want to use `spirv-link` from `SPIR-V-Tools` in a test, so let's build it if `LLVM_INCLUDE_SPIRV_TOOLS_TESTS` is set, as we do with the other tools. Signed-off-by: Sarnie, Nick <[email protected]>
…ure is available (llvm#126756) My last change made the test not run when the `spirv-tools` feature is not available, which is always the case in CI for clang tests, but it fails if `spirv-tools` is available for the following reasons: 1) We didn't build `spirv-link` as part of the internal `SPIRV-Tools` build, which is required by the `clang` call in `clang-linker-wrapper`, I already fixed that [here](llvm#126319). 2) We didn't depend on the `SPIRV-Tools` CMake targets in clang tests, so depending on what CMake targets were built before running `check-clang`, `SPIRV-Tools` might not have been built. 3) We didn't check for `llvm-spirv` being available, which is not part of `SPIRV-Tools` but is currently required for SPIR-V compilation. Manually confirmed this works. This test is the bane of my existence. --------- Signed-off-by: Sarnie, Nick <[email protected]>
…ure is available (llvm#126756) My last change made the test not run when the `spirv-tools` feature is not available, which is always the case in CI for clang tests, but it fails if `spirv-tools` is available for the following reasons: 1) We didn't build `spirv-link` as part of the internal `SPIRV-Tools` build, which is required by the `clang` call in `clang-linker-wrapper`, I already fixed that [here](llvm#126319). 2) We didn't depend on the `SPIRV-Tools` CMake targets in clang tests, so depending on what CMake targets were built before running `check-clang`, `SPIRV-Tools` might not have been built. 3) We didn't check for `llvm-spirv` being available, which is not part of `SPIRV-Tools` but is currently required for SPIR-V compilation. Manually confirmed this works. This test is the bane of my existence. --------- Signed-off-by: Sarnie, Nick <[email protected]>
I want to use `spirv-link` from `SPIR-V-Tools` in a test, so let's build it if `LLVM_INCLUDE_SPIRV_TOOLS_TESTS` is set, as we do with the other tools. Signed-off-by: Sarnie, Nick <[email protected]>
…ure is available (llvm#126756) My last change made the test not run when the `spirv-tools` feature is not available, which is always the case in CI for clang tests, but it fails if `spirv-tools` is available for the following reasons: 1) We didn't build `spirv-link` as part of the internal `SPIRV-Tools` build, which is required by the `clang` call in `clang-linker-wrapper`, I already fixed that [here](llvm#126319). 2) We didn't depend on the `SPIRV-Tools` CMake targets in clang tests, so depending on what CMake targets were built before running `check-clang`, `SPIRV-Tools` might not have been built. 3) We didn't check for `llvm-spirv` being available, which is not part of `SPIRV-Tools` but is currently required for SPIR-V compilation. Manually confirmed this works. This test is the bane of my existence. --------- Signed-off-by: Sarnie, Nick <[email protected]>
I want to use `spirv-link` from `SPIR-V-Tools` in a test, so let's build it if `LLVM_INCLUDE_SPIRV_TOOLS_TESTS` is set, as we do with the other tools. Signed-off-by: Sarnie, Nick <[email protected]>
…ure is available (llvm#126756) My last change made the test not run when the `spirv-tools` feature is not available, which is always the case in CI for clang tests, but it fails if `spirv-tools` is available for the following reasons: 1) We didn't build `spirv-link` as part of the internal `SPIRV-Tools` build, which is required by the `clang` call in `clang-linker-wrapper`, I already fixed that [here](llvm#126319). 2) We didn't depend on the `SPIRV-Tools` CMake targets in clang tests, so depending on what CMake targets were built before running `check-clang`, `SPIRV-Tools` might not have been built. 3) We didn't check for `llvm-spirv` being available, which is not part of `SPIRV-Tools` but is currently required for SPIR-V compilation. Manually confirmed this works. This test is the bane of my existence. --------- Signed-off-by: Sarnie, Nick <[email protected]>
I want to use
spirv-link
fromSPIR-V-Tools
in a test, so let's build it ifLLVM_INCLUDE_SPIRV_TOOLS_TESTS
is set, as we do with the other tools.