xref: /llvm-project/llvm/tools/spirv-tools/CMakeLists.txt (revision 135f39c780ac106ac93ef0838a62d7ebf947c2a0)
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