@@ -20,21 +20,35 @@ if (NOT SPIRVToLLVMTranslator_FOUND)
2020
2121 FetchContent_GetProperties(spirv-llvm-translator)
2222 if (NOT spirv-llvm-translator_POPULATED)
23+ set (LLVM_CONFIG ${LLVM_LIBRARY_DIR} /../bin/llvm-config)
24+ set (LLVM_DIR "${LLVM_LIBRARY_DIR} /cmake/llvm" CACHE PATH "Path to LLVM build dir " FORCE)
25+ set (LLVM_SPIRV_BUILD_EXTERNAL YES CACHE BOOL "Build SPIRV-LLVM Translator as external" FORCE)
26+
2327 FetchContent_MakeAvailable(spirv-llvm-translator)
2428
2529 # FIXME: Don't apply patch when Agama driver is updated.
2630 execute_process (
27- COMMAND git apply ${CMAKE_CURRENT_LIST_DIR} /3122.patch
31+ COMMAND git apply --check ${CMAKE_CURRENT_LIST_DIR} /3122.patch
2832 WORKING_DIRECTORY ${spirv-llvm-translator_SOURCE_DIR}
33+ ERROR_QUIET
2934 RESULT_VARIABLE PATCH_RESULT
3035 )
36+ if (PATCH_RESULT EQUAL 0)
37+ execute_process (
38+ COMMAND git apply ${CMAKE_CURRENT_LIST_DIR} /3122.patch
39+ WORKING_DIRECTORY ${spirv-llvm-translator_SOURCE_DIR}
40+ RESULT_VARIABLE PATCH_RESULT
41+ )
42+ else ()
43+ execute_process ( # Check if the patch is already applied
44+ COMMAND git apply --reverse --check ${CMAKE_CURRENT_LIST_DIR} /3122.patch
45+ WORKING_DIRECTORY ${spirv-llvm-translator_SOURCE_DIR}
46+ RESULT_VARIABLE PATCH_RESULT
47+ )
48+ endif ()
3149 if (NOT PATCH_RESULT EQUAL 0)
3250 message (FATAL_ERROR "Failed to apply 3122.patch to SPIRV-LLVM-Translator" )
3351 endif ()
34-
35- set (LLVM_CONFIG ${LLVM_LIBRARY_DIR} /../bin/llvm-config)
36- set (LLVM_DIR "${LLVM_LIBRARY_DIR} /cmake/llvm" CACHE PATH "Path to LLVM build dir " FORCE)
37- set (LLVM_SPIRV_BUILD_EXTERNAL YES CACHE BOOL "Build SPIRV-LLVM Translator as external" FORCE)
3852 endif ()
3953
4054 set (SPIRVToLLVMTranslator_INCLUDE_DIR "${SPIRVToLLVMTranslator_SOURCE_DIR} /include"
0 commit comments