Skip to content

Commit c0f0801

Browse files
authored
[Backport] Do not apply patches if sub non-git repo is located in a git repo. (#541)
[Backport] Do not apply patches if repo is a not a git repo. #539 [Backport] Do not apply patches if sub non-git repo is located in a git repo. #545 Also add an option to control patch apply which is default on. Pass -DAPPLY_PATCHES=OFF will skip patch apply process. Update LLVM_BASE_REVISION.
1 parent 2c7782a commit c0f0801

File tree

2 files changed

+37
-22
lines changed

2 files changed

+37
-22
lines changed

CMakeLists.txt

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ if(LLVM_USE_HOST_TOOLS AND OPENCL_CLANG_BUILD_EXTERNAL)
4040
llvm_create_cross_target(${PROJECT_NAME} NATIVE "" Release)
4141
endif()
4242

43+
option(LLVMSPIRV_INCLUDED_IN_LLVM
44+
"Set to ON if libLLVMSPIRVLib is linked into libLLVM" ON)
45+
option(APPLY_PATCHES "Apply local patches" ON)
46+
4347
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
4448
set(USE_PREBUILT_LLVM ON)
4549

@@ -61,8 +65,6 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
6165
set(CMAKE_CXX_STANDARD 17)
6266
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6367

64-
option(LLVMSPIRV_INCLUDED_IN_LLVM
65-
"Set to ON if libLLVMSPIRVLib is linked into libLLVM" ON)
6668
if(LLVMSPIRV_INCLUDED_IN_LLVM)
6769
message(STATUS "[OPENCL-CLANG] Assuming that libLLVMSPIRVLib is linked into libLLVM")
6870
else(LLVMSPIRV_INCLUDED_IN_LLVM)
@@ -153,18 +155,26 @@ if(NOT USE_PREBUILT_LLVM)
153155
)
154156
endif()
155157

156-
set(CLANG_BASE_REVISION release/16.x)
158+
set(LLVM_BASE_REVISION release/16.x)
157159
set(SPIRV_BASE_REVISION llvm_release_160)
158160
set(TARGET_BRANCH "ocl-open-160")
159-
160-
apply_patches(${CLANG_SOURCE_DIR}
161-
${CMAKE_CURRENT_SOURCE_DIR}/patches/clang
162-
${CLANG_BASE_REVISION}
163-
${TARGET_BRANCH})
164-
apply_patches(${SPIRV_SOURCE_DIR}
165-
${CMAKE_CURRENT_SOURCE_DIR}/patches/spirv
166-
${SPIRV_BASE_REVISION}
167-
${TARGET_BRANCH})
161+
get_filename_component(LLVM_MONOREPO_DIR ${LLVM_SOURCE_DIR} DIRECTORY)
162+
set(LLVM_PATCHES_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/patches/llvm
163+
${CMAKE_CURRENT_SOURCE_DIR}/patches/clang)
164+
165+
if(APPLY_PATCHES)
166+
message(STATUS "APPLY_PATCHES is enabled.")
167+
apply_patches(${LLVM_MONOREPO_DIR}
168+
"${LLVM_PATCHES_DIRS}"
169+
${LLVM_BASE_REVISION}
170+
${TARGET_BRANCH})
171+
apply_patches(${SPIRV_SOURCE_DIR}
172+
${CMAKE_CURRENT_SOURCE_DIR}/patches/spirv
173+
${SPIRV_BASE_REVISION}
174+
${TARGET_BRANCH})
175+
else()
176+
message(STATUS "APPLY_PATCHES is disabled, skip patch apply process.")
177+
endif()
168178
endif(NOT USE_PREBUILT_LLVM)
169179

170180
#

cmake/modules/CMakeFunctions.cmake

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ function(is_backport_patch_present patch_path repo_dir patch_in_branch)
5757
WORKING_DIRECTORY ${repo_dir}
5858
RESULT_VARIABLE patch_not_in_branches
5959
OUTPUT_QUIET
60-
ERROR_QUIET
6160
)
6261
if(patch_not_in_branches)
6362
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)
7473
COMMAND ${GIT_EXECUTABLE} log -1 ${revision}
7574
WORKING_DIRECTORY ${repo_dir}
7675
RESULT_VARIABLE output_var
77-
ERROR_QUIET
7876
OUTPUT_QUIET
7977
)
8078
if(${output_var} EQUAL 0)
@@ -96,16 +94,21 @@ function(apply_patches repo_dir patches_dir base_revision target_branch)
9694
return()
9795
endif()
9896

99-
message(STATUS "[OPENCL-CLANG] Patching repository ${repo_dir}")
97+
# Check if it's a git repo
98+
if(EXISTS "${repo_dir}/.git")
99+
message(STATUS "[OPENCL-CLANG] Patching repository ${repo_dir}")
100+
else()
101+
message(STATUS "[OPENCL-CLANG][Warning] ${repo_dir} is not a git repository, therefore, local patches are not applied")
102+
return()
103+
endif()
100104
# Check if the target branch already exists
101105
execute_process(
102106
COMMAND ${GIT_EXECUTABLE} rev-parse --verify --no-revs -q ${target_branch}
103107
WORKING_DIRECTORY ${repo_dir}
104108
RESULT_VARIABLE patches_needed
105-
ERROR_QUIET
106109
OUTPUT_QUIET
107110
)
108-
if(patches_needed) # The target branch doesn't exist
111+
if(patches_needed EQUAL 1) # The target branch doesn't exist
109112
list(SORT patches)
110113
is_valid_revision(${repo_dir} ${base_revision} exists_base_rev)
111114

@@ -115,7 +118,6 @@ function(apply_patches repo_dir patches_dir base_revision target_branch)
115118
WORKING_DIRECTORY ${repo_dir}
116119
OUTPUT_VARIABLE repo_head
117120
OUTPUT_STRIP_TRAILING_WHITESPACE
118-
ERROR_QUIET
119121
)
120122
message(STATUS "[OPENCL-CLANG] ref ${base_revision} not exists in repository, using current HEAD:${repo_head}")
121123
set(base_revision ${repo_head})
@@ -135,22 +137,25 @@ function(apply_patches repo_dir patches_dir base_revision target_branch)
135137
message(STATUS "[OPENCL-CLANG] Patch ${patch} is already in local branch - ignore patching")
136138
else()
137139
execute_process( # Apply the patch
138-
COMMAND ${GIT_EXECUTABLE} am --3way --ignore-whitespace ${patch}
140+
COMMAND ${GIT_EXECUTABLE} am --3way --ignore-whitespace -C0 ${patch}
139141
WORKING_DIRECTORY ${repo_dir}
140142
OUTPUT_VARIABLE patching_log
141-
ERROR_QUIET
142143
)
143144
message(STATUS "[OPENCL-CLANG] Not present - ${patching_log}")
144145
endif()
145146
endforeach(patch)
146-
else() # The target branch already exists
147+
elseif(patches_needed EQUAL 0) # The target branch already exists
147148
execute_process( # Check it out
148149
COMMAND ${GIT_EXECUTABLE} checkout ${target_branch}
149150
WORKING_DIRECTORY ${repo_dir}
150-
ERROR_QUIET
151151
OUTPUT_QUIET
152152
)
153153
endif()
154+
if (NOT (ret_check_out OR ret_apply_patch))
155+
message(STATUS "[OPENCL-CLANG] Applied patch successfully!")
156+
else()
157+
message(FATAL_ERROR "[OPENCL-CLANG] Failed to apply patch!")
158+
endif()
154159
endfunction()
155160

156161
# Usage

0 commit comments

Comments
 (0)