option(LLVM_INCLUDE_SPIRV_TOOLS_TESTS "Include tests that use SPIRV-Tools" Off) mark_as_advanced(LLVM_INCLUDE_SPIRV_TOOLS_TESTS) if (NOT LLVM_INCLUDE_SPIRV_TOOLS_TESTS) return() endif () 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-Tools source. if (NOT SPIRV_DIS OR NOT SPIRV_VAL) include(ExternalProject) set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/SPIRVTools-bin) ExternalProject_Add(SPIRVTools 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 BUILD_BYPRODUCTS ${BINARY_DIR}/tools/spirv-dis ${BINARY_DIR}/tools/spirv-val DOWNLOAD_COMMAND git clone https://github.com/KhronosGroup/SPIRV-Tools.git SPIRVTools && cd SPIRVTools && ${Python3_EXECUTABLE} utils/git-sync-deps UPDATE_COMMAND git pull origin main && ${Python3_EXECUTABLE} utils/git-sync-deps # Don't auto-update on every build. UPDATE_DISCONNECTED 1 # Allow manual updating with an explicit SPIRVTools-update target. STEP_TARGETS update # Install handled below. INSTALL_COMMAND "" ) endif () if (CMAKE_HOST_UNIX) set(LLVM_LINK_OR_COPY create_symlink) else () set(LLVM_LINK_OR_COPY copy) endif () # Link the provided or just built spirv-dis and spirv-val 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") else () add_custom_target(spirv-dis COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${BINARY_DIR}/tools/spirv-dis" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-dis" DEPENDS SPIRVTools ) endif () if (SPIRV_VAL) add_custom_target(spirv-val COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_VAL}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-val") else () add_custom_target(spirv-val COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${BINARY_DIR}/tools/spirv-val" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-val" DEPENDS SPIRVTools ) endif ()