From dbf6f64c13b2bbbfe4faab912209dd977a84ede6 Mon Sep 17 00:00:00 2001 From: "Yang, Haonan" Date: Wed, 3 Jul 2024 16:13:48 +0800 Subject: [PATCH 1/3] Do not apply patches if repo is a not a git repo. Also backports https://github.com/intel/opencl-clang/commit/fb755984fadb2d2e2787e5ea7916190bde05f5d6 --- cmake/modules/CMakeFunctions.cmake | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/cmake/modules/CMakeFunctions.cmake b/cmake/modules/CMakeFunctions.cmake index c15afee5..a0789396 100644 --- a/cmake/modules/CMakeFunctions.cmake +++ b/cmake/modules/CMakeFunctions.cmake @@ -57,7 +57,6 @@ function(is_backport_patch_present patch_path repo_dir patch_in_branch) WORKING_DIRECTORY ${repo_dir} RESULT_VARIABLE patch_not_in_branches OUTPUT_QUIET - ERROR_QUIET ) if(patch_not_in_branches) set(patch_in_branch False PARENT_SCOPE) # The patch is not present in local branch @@ -74,7 +73,6 @@ function(is_valid_revision repo_dir revision return_val) COMMAND ${GIT_EXECUTABLE} log -1 ${revision} WORKING_DIRECTORY ${repo_dir} RESULT_VARIABLE output_var - ERROR_QUIET OUTPUT_QUIET ) if(${output_var} EQUAL 0) @@ -102,10 +100,12 @@ function(apply_patches repo_dir patches_dir base_revision target_branch) COMMAND ${GIT_EXECUTABLE} rev-parse --verify --no-revs -q ${target_branch} WORKING_DIRECTORY ${repo_dir} RESULT_VARIABLE patches_needed - ERROR_QUIET OUTPUT_QUIET ) - if(patches_needed) # The target branch doesn't exist + if(patches_needed EQUAL 128) # not a git repo + message(STATUS "[OPENCL-CLANG] ${repo_dir} is not a git repository") + return() + elseif(patches_needed EQUAL 1) # The target branch doesn't exist list(SORT patches) is_valid_revision(${repo_dir} ${base_revision} exists_base_rev) @@ -115,7 +115,6 @@ function(apply_patches repo_dir patches_dir base_revision target_branch) WORKING_DIRECTORY ${repo_dir} OUTPUT_VARIABLE repo_head OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET ) message(STATUS "[OPENCL-CLANG] ref ${base_revision} not exists in repository, using current HEAD:${repo_head}") set(base_revision ${repo_head}) @@ -135,22 +134,23 @@ function(apply_patches repo_dir patches_dir base_revision target_branch) message(STATUS "[OPENCL-CLANG] Patch ${patch} is already in local branch - ignore patching") else() execute_process( # Apply the patch - COMMAND ${GIT_EXECUTABLE} am --3way --ignore-whitespace ${patch} + COMMAND ${GIT_EXECUTABLE} am --3way --ignore-whitespace -C0 ${patch} WORKING_DIRECTORY ${repo_dir} OUTPUT_VARIABLE patching_log - ERROR_QUIET ) message(STATUS "[OPENCL-CLANG] Not present - ${patching_log}") endif() endforeach(patch) - else() # The target branch already exists + elseif(patches_needed EQUAL 0) # The target branch already exists execute_process( # Check it out COMMAND ${GIT_EXECUTABLE} checkout ${target_branch} WORKING_DIRECTORY ${repo_dir} - ERROR_QUIET OUTPUT_QUIET ) endif() + if (ret_check_out OR ret_apply_patch) + message(FATAL_ERROR "[OPENCL-CLANG] Failed to apply patch!") + endif() endfunction() # Usage From 058b42f4682b7b0206e194114761aac28ce8ed3f Mon Sep 17 00:00:00 2001 From: "Yang, Haonan" Date: Mon, 26 Aug 2024 11:35:50 +0800 Subject: [PATCH 2/3] [Backport] Do not apply patches if sub non-git repo is located in a git repo. --- CMakeLists.txt | 35 ++++++++++++++++++++---------- cmake/modules/CMakeFunctions.cmake | 19 ++++++++++------ 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 327e7eee..b376bfc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,10 @@ if(LLVM_USE_HOST_TOOLS AND OPENCL_CLANG_BUILD_EXTERNAL) llvm_create_cross_target(${PROJECT_NAME} NATIVE "" Release) endif() +option(LLVMSPIRV_INCLUDED_IN_LLVM + "Set to ON if libLLVMSPIRVLib is linked into libLLVM" ON) +option(APPLY_PATCHES "Apply local patches" ON) + if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) set(USE_PREBUILT_LLVM ON) @@ -61,8 +65,6 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) - option(LLVMSPIRV_INCLUDED_IN_LLVM - "Set to ON if libLLVMSPIRVLib is linked into libLLVM" ON) if(LLVMSPIRV_INCLUDED_IN_LLVM) message(STATUS "[OPENCL-CLANG] Assuming that libLLVMSPIRVLib is linked into libLLVM") else(LLVMSPIRV_INCLUDED_IN_LLVM) @@ -115,6 +117,8 @@ endif() if(NOT USE_PREBUILT_LLVM) + set(LLVM_BASE_REVISION release/16.x) + set(CLANG_BASE_REVISION release_16) if(NOT LLVM_EXTERNAL_CLANG_SOURCE_DIR) set(CLANG_SOURCE_DIR ${LLVM_SOURCE_DIR}/tools/clang) elseif(EXISTS "${LLVM_EXTERNAL_CLANG_SOURCE_DIR}/CMakeLists.txt") @@ -153,18 +157,25 @@ if(NOT USE_PREBUILT_LLVM) ) endif() - set(CLANG_BASE_REVISION release/16.x) set(SPIRV_BASE_REVISION llvm_release_160) set(TARGET_BRANCH "ocl-open-160") - - apply_patches(${CLANG_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/patches/clang - ${CLANG_BASE_REVISION} - ${TARGET_BRANCH}) - apply_patches(${SPIRV_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/patches/spirv - ${SPIRV_BASE_REVISION} - ${TARGET_BRANCH}) + get_filename_component(LLVM_MONOREPO_DIR ${LLVM_SOURCE_DIR} DIRECTORY) + set(LLVM_PATCHES_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/patches/llvm + ${CMAKE_CURRENT_SOURCE_DIR}/patches/clang) + + if(APPLY_PATCHES) + message(STATUS "APPLY_PATCHES is enabled.") + apply_patches(${LLVM_MONOREPO_DIR} + "${LLVM_PATCHES_DIRS}" + ${LLVM_BASE_REVISION} + ${TARGET_BRANCH}) + apply_patches(${SPIRV_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/patches/spirv + ${SPIRV_BASE_REVISION} + ${TARGET_BRANCH}) + else() + message(STATUS "APPLY_PATCHES is disabled, skip patch apply process.") + endif() endif(NOT USE_PREBUILT_LLVM) # diff --git a/cmake/modules/CMakeFunctions.cmake b/cmake/modules/CMakeFunctions.cmake index a0789396..95ccec95 100644 --- a/cmake/modules/CMakeFunctions.cmake +++ b/cmake/modules/CMakeFunctions.cmake @@ -94,7 +94,13 @@ function(apply_patches repo_dir patches_dir base_revision target_branch) return() endif() - message(STATUS "[OPENCL-CLANG] Patching repository ${repo_dir}") + # Check if it's a git repo + if(EXISTS "${repo_dir}/.git") + message(STATUS "[OPENCL-CLANG] Patching repository ${repo_dir}") + else() + message(STATUS "[OPENCL-CLANG][Warning] ${repo_dir} is not a git repository, therefore, local patches are not applied") + return() + endif() # Check if the target branch already exists execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --verify --no-revs -q ${target_branch} @@ -102,10 +108,7 @@ function(apply_patches repo_dir patches_dir base_revision target_branch) RESULT_VARIABLE patches_needed OUTPUT_QUIET ) - if(patches_needed EQUAL 128) # not a git repo - message(STATUS "[OPENCL-CLANG] ${repo_dir} is not a git repository") - return() - elseif(patches_needed EQUAL 1) # The target branch doesn't exist + if(patches_needed EQUAL 1) # The target branch doesn't exist list(SORT patches) is_valid_revision(${repo_dir} ${base_revision} exists_base_rev) @@ -148,8 +151,10 @@ function(apply_patches repo_dir patches_dir base_revision target_branch) OUTPUT_QUIET ) endif() - if (ret_check_out OR ret_apply_patch) - message(FATAL_ERROR "[OPENCL-CLANG] Failed to apply patch!") + if (NOT (ret_check_out OR ret_apply_patch)) + message(STATUS "[OPENCL-CLANG] Applied patch successfully!") + else() + message(FATAL_ERROR "[OPENCL-CLANG] Failed to apply patch!") endif() endfunction() From c061157e665615dfb411cde87420db93a5c99c65 Mon Sep 17 00:00:00 2001 From: "Yang, Haonan" Date: Mon, 26 Aug 2024 13:09:54 +0800 Subject: [PATCH 3/3] Remove unused CLANG_BASE_REVISION. --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b376bfc1..66a1456b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,8 +117,6 @@ endif() if(NOT USE_PREBUILT_LLVM) - set(LLVM_BASE_REVISION release/16.x) - set(CLANG_BASE_REVISION release_16) if(NOT LLVM_EXTERNAL_CLANG_SOURCE_DIR) set(CLANG_SOURCE_DIR ${LLVM_SOURCE_DIR}/tools/clang) elseif(EXISTS "${LLVM_EXTERNAL_CLANG_SOURCE_DIR}/CMakeLists.txt") @@ -157,6 +155,7 @@ if(NOT USE_PREBUILT_LLVM) ) endif() + set(LLVM_BASE_REVISION release/16.x) set(SPIRV_BASE_REVISION llvm_release_160) set(TARGET_BRANCH "ocl-open-160") get_filename_component(LLVM_MONOREPO_DIR ${LLVM_SOURCE_DIR} DIRECTORY)