1option(LLVM_INCLUDE_SPIRV_TOOLS_TESTS "Include tests that use SPIRV-Tools" Off) 2mark_as_advanced(LLVM_INCLUDE_SPIRV_TOOLS_TESTS) 3 4if (NOT LLVM_INCLUDE_SPIRV_TOOLS_TESTS) 5 return() 6endif () 7 8if (NOT "SPIRV" IN_LIST LLVM_TARGETS_TO_BUILD) 9 message(FATAL_ERROR "Building SPIRV-Tools tests is unsupported without the SPIR-V target") 10endif () 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. 15if (NOT SPIRV_DIS OR NOT SPIRV_VAL OR NOT SPIRV_AS) 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 spirv-as 25 BUILD_BYPRODUCTS ${BINARY_DIR}/tools/spirv-dis ${BINARY_DIR}/tools/spirv-val ${BINARY_DIR}/tools/spirv-as 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 ) 38endif () 39 40if (CMAKE_HOST_UNIX) 41 set(LLVM_LINK_OR_COPY create_symlink) 42else () 43 set(LLVM_LINK_OR_COPY copy) 44endif () 45 46# Link the provided or just built spirv-dis and spirv-val binaries. 47if (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") 50else () 51 add_custom_target(spirv-dis 52 COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${BINARY_DIR}/tools/spirv-dis${CMAKE_EXECUTABLE_SUFFIX}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-dis${CMAKE_EXECUTABLE_SUFFIX}" 53 DEPENDS SPIRVTools 54 ) 55endif () 56 57if (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") 60else () 61 add_custom_target(spirv-val 62 COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${BINARY_DIR}/tools/spirv-val${CMAKE_EXECUTABLE_SUFFIX}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-val${CMAKE_EXECUTABLE_SUFFIX}" 63 DEPENDS SPIRVTools 64 ) 65endif () 66 67if (SPIRV_AS) 68 add_custom_target(spirv-as 69 COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_AS}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-as") 70else () 71 add_custom_target(spirv-as 72 COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${BINARY_DIR}/tools/spirv-as${CMAKE_EXECUTABLE_SUFFIX}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-as${CMAKE_EXECUTABLE_SUFFIX}" 73 DEPENDS SPIRVTools 74 ) 75endif () 76