|
| 1 | +option(LLVM_INCLUDE_SPIRV_TOOLS_TESTS "Include tests that use SPIRV-Tools" Off) |
| 2 | +mark_as_advanced(LLVM_INCLUDE_SPIRV_TOOLS_TESTS) |
| 3 | + |
| 4 | +if (NOT LLVM_INCLUDE_SPIRV_TOOLS_TESTS) |
| 5 | + return() |
| 6 | +endif () |
| 7 | + |
| 8 | +if (NOT "SPIRV" IN_LIST LLVM_TARGETS_TO_BUILD) |
| 9 | + message(FATAL_ERROR "Building SPIRV-Tools tests is unsupported without the SPIR-V target") |
| 10 | +endif () |
| 11 | + |
| 12 | +# SPIRV_DIS and SPIRV_VAL variables can be used to provide paths to existing |
| 13 | +# spirv-dis and spirv-val binaries, respectively. Otherwise, build them from |
| 14 | +# SPIRV-Tools source. |
| 15 | +if (NOT SPIRV_DIS OR NOT SPIRV_VAL) |
| 16 | + include(ExternalProject) |
| 17 | + |
| 18 | + set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/SPIRVTools-bin) |
| 19 | + |
| 20 | + ExternalProject_Add(SPIRVTools |
| 21 | + GIT_REPOSITORY https://github.com/KhronosGroup/SPIRV-Tools.git |
| 22 | + GIT_TAG main |
| 23 | + BINARY_DIR ${BINARY_DIR} |
| 24 | + BUILD_COMMAND ${CMAKE_COMMAND} --build ${BINARY_DIR} --target spirv-dis spirv-val |
| 25 | + BUILD_BYPRODUCTS ${BINARY_DIR}/tools/spirv-dis ${BINARY_DIR}/tools/spirv-val |
| 26 | + DOWNLOAD_COMMAND git clone https://github.com/KhronosGroup/SPIRV-Tools.git SPIRVTools && |
| 27 | + cd SPIRVTools && |
| 28 | + ${Python3_EXECUTABLE} utils/git-sync-deps |
| 29 | + UPDATE_COMMAND git pull origin main && |
| 30 | + ${Python3_EXECUTABLE} utils/git-sync-deps |
| 31 | + # Don't auto-update on every build. |
| 32 | + UPDATE_DISCONNECTED 1 |
| 33 | + # Allow manual updating with an explicit SPIRVTools-update target. |
| 34 | + STEP_TARGETS update |
| 35 | + # Install handled below. |
| 36 | + INSTALL_COMMAND "" |
| 37 | + ) |
| 38 | +endif () |
| 39 | + |
| 40 | +if (CMAKE_HOST_UNIX) |
| 41 | + set(LLVM_LINK_OR_COPY create_symlink) |
| 42 | +else () |
| 43 | + set(LLVM_LINK_OR_COPY copy) |
| 44 | +endif () |
| 45 | + |
| 46 | +# Link the provided or just built spirv-dis and spirv-val binaries. |
| 47 | +if (SPIRV_DIS) |
| 48 | + add_custom_target(spirv-dis |
| 49 | + COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_DIS}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-dis") |
| 50 | +else () |
| 51 | + add_custom_target(spirv-dis |
| 52 | + COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${BINARY_DIR}/tools/spirv-dis" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-dis" |
| 53 | + DEPENDS SPIRVTools |
| 54 | + ) |
| 55 | +endif () |
| 56 | + |
| 57 | +if (SPIRV_VAL) |
| 58 | + add_custom_target(spirv-val |
| 59 | + COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_VAL}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-val") |
| 60 | +else () |
| 61 | + add_custom_target(spirv-val |
| 62 | + COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${BINARY_DIR}/tools/spirv-val" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-val" |
| 63 | + DEPENDS SPIRVTools |
| 64 | + ) |
| 65 | +endif () |
0 commit comments