82 lines · plain
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 8# SPIRV_DIS, SPIRV_VAL, SPIRV_AS and SPIRV_LINK variables can be used to provide paths to existing9# spirv-dis, spirv-val, spirv-as, and spirv-link binaries, respectively. Otherwise, build them from10# SPIRV-Tools source.11if (NOT SPIRV_DIS OR NOT SPIRV_VAL OR NOT SPIRV_AS OR NOT SPIRV_LINK)12 include(ExternalProject)13 14 set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/SPIRVTools-bin)15 16 ExternalProject_Add(SPIRVTools17 GIT_REPOSITORY https://github.com/KhronosGroup/SPIRV-Tools.git18 GIT_TAG main19 BINARY_DIR ${BINARY_DIR}20 BUILD_COMMAND ${CMAKE_COMMAND} --build ${BINARY_DIR} --target spirv-dis spirv-val spirv-as spirv-link21 BUILD_BYPRODUCTS ${BINARY_DIR}/tools/spirv-dis ${BINARY_DIR}/tools/spirv-val ${BINARY_DIR}/tools/spirv-as ${BINARY_DIR}/tools/spirv-link22 DOWNLOAD_COMMAND git clone https://github.com/KhronosGroup/SPIRV-Tools.git SPIRVTools &&23 cd SPIRVTools &&24 ${Python3_EXECUTABLE} utils/git-sync-deps25 UPDATE_COMMAND git pull origin main &&26 ${Python3_EXECUTABLE} utils/git-sync-deps27 # Don't auto-update on every build.28 UPDATE_DISCONNECTED 129 # Allow manual updating with an explicit SPIRVTools-update target.30 STEP_TARGETS update31 # Install handled below.32 INSTALL_COMMAND ""33 )34endif ()35 36if (CMAKE_HOST_UNIX)37 set(LLVM_LINK_OR_COPY create_symlink)38else ()39 set(LLVM_LINK_OR_COPY copy)40endif ()41 42# Link the provided or just built binaries.43if (SPIRV_DIS)44 add_custom_target(spirv-dis45 COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_DIS}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-dis")46else ()47 add_custom_target(spirv-dis48 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}"49 DEPENDS SPIRVTools50 )51endif ()52 53if (SPIRV_VAL)54 add_custom_target(spirv-val55 COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_VAL}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-val")56else ()57 add_custom_target(spirv-val58 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}"59 DEPENDS SPIRVTools60 )61endif ()62 63if (SPIRV_AS)64 add_custom_target(spirv-as65 COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_AS}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-as")66else ()67 add_custom_target(spirv-as68 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}"69 DEPENDS SPIRVTools70 )71endif ()72 73if (SPIRV_LINK)74 add_custom_target(spirv-link75 COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${SPIRV_LINK}" "${LLVM_RUNTIME_OUTPUT_INTDIR}/spirv-link")76else ()77 add_custom_target(spirv-link78 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}"79 DEPENDS SPIRVTools80 )81endif ()82