Skip to content

Commit 81cf510

Browse files
authored
[Backport] Do not apply patches if sub non-git repo is located in a git repo. (#543)
[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 e4a5d2c commit 81cf510

File tree

2 files changed

+36
-22
lines changed

2 files changed

+36
-22
lines changed

CMakeLists.txt

+21-12
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ if(CMAKE_CROSSCOMPILING AND OPENCL_CLANG_BUILD_EXTERNAL)
3838
llvm_create_cross_target(${PROJECT_NAME} NATIVE "" Release)
3939
endif()
4040

41+
option(LLVMSPIRV_INCLUDED_IN_LLVM
42+
"Set to ON if libLLVMSPIRVLib is linked into libLLVM" ON)
43+
option(APPLY_PATCHES "Apply local patches" ON)
44+
4145
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
4246
set(USE_PREBUILT_LLVM ON)
4347

@@ -59,8 +63,6 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
5963
set(CMAKE_CXX_STANDARD 17)
6064
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6165

62-
option(LLVMSPIRV_INCLUDED_IN_LLVM
63-
"Set to ON if libLLVMSPIRVLib is linked into libLLVM" ON)
6466
if(LLVMSPIRV_INCLUDED_IN_LLVM)
6567
message(STATUS "[OPENCL-CLANG] Assuming that libLLVMSPIRVLib is linked into libLLVM")
6668
else(LLVMSPIRV_INCLUDED_IN_LLVM)
@@ -157,18 +159,25 @@ if(NOT USE_PREBUILT_LLVM)
157159
)
158160
endif()
159161

160-
set(CLANG_BASE_REVISION release/18.x)
162+
set(LLVM_BASE_REVISION release/18.x)
161163
set(SPIRV_BASE_REVISION llvm_release_180)
162164
set(TARGET_BRANCH "ocl-open-180")
163-
164-
apply_patches(${CLANG_SOURCE_DIR}
165-
${CMAKE_CURRENT_SOURCE_DIR}/patches/clang
166-
${CLANG_BASE_REVISION}
167-
${TARGET_BRANCH})
168-
apply_patches(${SPIRV_SOURCE_DIR}
169-
${CMAKE_CURRENT_SOURCE_DIR}/patches/spirv
170-
${SPIRV_BASE_REVISION}
171-
${TARGET_BRANCH})
165+
get_filename_component(LLVM_MONOREPO_DIR ${LLVM_SOURCE_DIR} DIRECTORY)
166+
set(LLVM_PATCHES_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/patches/llvm
167+
${CMAKE_CURRENT_SOURCE_DIR}/patches/clang)
168+
if(APPLY_PATCHES)
169+
message(STATUS "APPLY_PATCHES is enabled.")
170+
apply_patches(${LLVM_MONOREPO_DIR}
171+
"${LLVM_PATCHES_DIRS}"
172+
${LLVM_BASE_REVISION}
173+
${TARGET_BRANCH})
174+
apply_patches(${SPIRV_SOURCE_DIR}
175+
${CMAKE_CURRENT_SOURCE_DIR}/patches/spirv
176+
${SPIRV_BASE_REVISION}
177+
${TARGET_BRANCH})
178+
else()
179+
message(STATUS "APPLY_PATCHES is disabled, skip patch apply process.")
180+
endif()
172181
endif(NOT USE_PREBUILT_LLVM)
173182

174183
#

cmake/modules/CMakeFunctions.cmake

+15-10
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ function(is_backport_patch_present patch_path repo_dir patch_in_branch)
5656
WORKING_DIRECTORY ${repo_dir}
5757
RESULT_VARIABLE patch_not_in_branches
5858
OUTPUT_QUIET
59-
ERROR_QUIET
6059
)
6160
if(patch_not_in_branches)
6261
set(patch_in_branch False PARENT_SCOPE) # The patch is not present in local branch
@@ -73,7 +72,6 @@ function(is_valid_revision repo_dir revision return_val)
7372
COMMAND ${GIT_EXECUTABLE} log -1 ${revision}
7473
WORKING_DIRECTORY ${repo_dir}
7574
RESULT_VARIABLE output_var
76-
ERROR_QUIET
7775
OUTPUT_QUIET
7876
)
7977
if(${output_var} EQUAL 0)
@@ -95,16 +93,21 @@ function(apply_patches repo_dir patches_dir base_revision target_branch)
9593
return()
9694
endif()
9795

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

@@ -114,7 +117,6 @@ function(apply_patches repo_dir patches_dir base_revision target_branch)
114117
WORKING_DIRECTORY ${repo_dir}
115118
OUTPUT_VARIABLE repo_head
116119
OUTPUT_STRIP_TRAILING_WHITESPACE
117-
ERROR_QUIET
118120
)
119121
message(STATUS "[OPENCL-CLANG] ref ${base_revision} not exists in repository, using current HEAD:${repo_head}")
120122
set(base_revision ${repo_head})
@@ -134,22 +136,25 @@ function(apply_patches repo_dir patches_dir base_revision target_branch)
134136
message(STATUS "[OPENCL-CLANG] Patch ${patch} is already in local branch - ignore patching")
135137
else()
136138
execute_process( # Apply the patch
137-
COMMAND ${GIT_EXECUTABLE} am --3way --ignore-whitespace ${patch}
139+
COMMAND ${GIT_EXECUTABLE} am --3way --ignore-whitespace -C0 ${patch}
138140
WORKING_DIRECTORY ${repo_dir}
139141
OUTPUT_VARIABLE patching_log
140-
ERROR_QUIET
141142
)
142143
message(STATUS "[OPENCL-CLANG] Not present - ${patching_log}")
143144
endif()
144145
endforeach(patch)
145-
else() # The target branch already exists
146+
elseif(patches_needed EQUAL 0) # The target branch already exists
146147
execute_process( # Check it out
147148
COMMAND ${GIT_EXECUTABLE} checkout ${target_branch}
148149
WORKING_DIRECTORY ${repo_dir}
149-
ERROR_QUIET
150150
OUTPUT_QUIET
151151
)
152152
endif()
153+
if (NOT (ret_check_out OR ret_apply_patch))
154+
message(STATUS "[OPENCL-CLANG] Applied patch successfully!")
155+
else()
156+
message(FATAL_ERROR "[OPENCL-CLANG] Failed to apply patch!")
157+
endif()
153158
endfunction()
154159

155160
# Usage

0 commit comments

Comments
 (0)