Skip to content
This repository was archived by the owner on Jan 7, 2023. It is now read-only.

Commit 3d4449f

Browse files
committed
Correct llvm_patcher
Change-Id: I3027651e54f1d3b896f9d929271639ce5a450df7
1 parent 42b6e38 commit 3d4449f

File tree

1 file changed

+49
-10
lines changed

1 file changed

+49
-10
lines changed

CMakeLists.txt

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,35 @@ else()
123123
)
124124
endif()
125125

126+
if((NOT EXISTS ${LLVM_SOURCE_URL}) AND (NOT EXPECTED_LLVM_VERSION))
127+
# Use LLVM sources stored at fixed location
128+
set(LLVM_SOURCE_URL ${CMAKE_CURRENT_SOURCE_DIR}/../llvm_source)
129+
if(EXISTS ${LLVM_SOURCE_URL})
130+
message(STATUS "[LLVM_PATCHER] : Manual read LLVM version from llvm_source/CMakeLists.txt file")
131+
file(STRINGS ${LLVM_SOURCE_URL}/CMakeLists.txt LLVM_VERSION_MAJOR_MATCH REGEX "set\\(LLVM_VERSION_MAJOR [0-9]+\\)")
132+
file(STRINGS ${LLVM_SOURCE_URL}/CMakeLists.txt LLVM_VERSION_MINOR_MATCH REGEX "set\\(LLVM_VERSION_MINOR [0-9]+\\)")
133+
file(STRINGS ${LLVM_SOURCE_URL}/CMakeLists.txt LLVM_VERSION_PATCH_MATCH REGEX "set\\(LLVM_VERSION_PATCH [0-9]+\\)")
134+
135+
string(REGEX MATCH "[0-9]+" LLVM_VERSION_MAJOR ${LLVM_VERSION_MAJOR_MATCH})
136+
string(REGEX MATCH "[0-9]+" LLVM_VERSION_MINOR ${LLVM_VERSION_MINOR_MATCH})
137+
string(REGEX MATCH "[0-9]+" LLVM_VERSION_PATCH ${LLVM_VERSION_PATCH_MATCH})
138+
139+
set(EXPECTED_LLVM_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
140+
141+
message(STATUS "[LLVM_PATCHER] : In folder ${LLVM_SOURCE_URL} found LLVM version : ${EXPECTED_LLVM_VERSION}")
142+
endif()
143+
endif()
144+
126145
# Use LLVM stock sources or patched stock sources
127146
if(LLVM_STOCK_SOURCES)
128147
set(LLVM_APPLY_PATCHES false)
129148
else()
130149
set(LLVM_APPLY_PATCHES true)
131150
endif()
132151

133-
set(EXPECTED_LLVM_VERSION "7.0.0")
152+
if(NOT EXPECTED_LLVM_VERSION)
153+
set(EXPECTED_LLVM_VERSION "7.0.0")
154+
endif()
134155

135156
if(NOT LLVM_SOURCE_DIR)
136157
set(LLVM_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/../src")
@@ -149,41 +170,59 @@ if(NOT EXISTS ${LLVM_SOURCE_URL})
149170
set(LLVM_SOURCE_URL ${CMAKE_CURRENT_SOURCE_DIR}/../../../../llvm${EXPECTED_LLVM_VERSION}_source)
150171
endif()
151172

152-
message(STATUS "LLVM_SOURCE_URL = ${LLVM_SOURCE_URL}")
153-
message(STATUS "LLVM_OPTIONS = ${LLVM_OPTIONS}")
173+
message(STATUS "[LLVM_PATCHER] : LLVM_SOURCE_URL = ${LLVM_SOURCE_URL}")
174+
message(STATUS "[LLVM_PATCHER] : LLVM_OPTIONS = ${LLVM_OPTIONS}")
154175

155176
if(NOT EXISTS ${LLVM_SOURCE_DIR})
156177
# Copy stock LLVM sources to LLVM_SOURCE_DIR
157-
message(STATUS "Copying stock LLVM sources to ${LLVM_SOURCE_DIR}")
178+
message(STATUS "[LLVM_PATCHER] : Copying stock LLVM sources to ${LLVM_SOURCE_DIR}")
158179
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${LLVM_SOURCE_URL} ${LLVM_SOURCE_DIR})
159180

181+
FILE(GLOB dirsPatch RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/releases ${CMAKE_CURRENT_SOURCE_DIR}/releases/*)
182+
list(SORT dirsPatch)
183+
list(REVERSE dirsPatch)
184+
185+
if(NOT LLVM_VERSION_MAJOR)
186+
string(REGEX MATCH "[0-9]+" LLVM_VERSION_MAJOR ${EXPECTED_LLVM_VERSION})
187+
endif()
188+
160189
if(LLVM_APPLY_PATCHES)
161190
# Customization patches will be applied if present.
191+
192+
foreach(dirPatch ${dirsPatch})
193+
#Apply all patches for given major version of LLVM
194+
string(REGEX MATCH "[0-9]+" LLVM_VER_MAJOR_FOLDER ${dirPatch})
195+
if(NOT ${LLVM_VERSION_MAJOR} MATCHES ${LLVM_VER_MAJOR_FOLDER})
196+
continue()
197+
endif()
198+
message(STATUS "[LLVM_PATCHER] : Applying patches for LLVM from version ${dirPatch}")
199+
162200
file(GLOB LLVM_PATCH_FILES
163-
"${CMAKE_CURRENT_SOURCE_DIR}/releases/${EXPECTED_LLVM_VERSION}/patches_external/*.patch"
201+
"${CMAKE_CURRENT_SOURCE_DIR}/releases/${dirPatch}/patches_external/*.patch"
164202
)
165203
# Sort list of patch files.
166204
if(LLVM_PATCH_FILES)
167205
list(SORT LLVM_PATCH_FILES)
168206
endif()
169207
# Apply customization patches if any.
170208
foreach(patch_file ${LLVM_PATCH_FILES})
171-
message("Apply ${patch_file} file")
209+
message(STATUS "[LLVM_PATCHER] : Apply ${patch_file} file")
172210
execute_process(COMMAND ${PATCH} -d ${LLVM_SOURCE_DIR} -p1 -i ${patch_file} RESULT_VARIABLE rv)
173211
if(NOT rv EQUAL 0)
174-
message(FATAL_ERROR "error: applying patch '${patch_file}' failed")
212+
message(FATAL_ERROR "[LLVM_PATCHER] : error: applying patch '${patch_file}' failed")
175213
endif()
176214
endforeach()
215+
endforeach()
177216
endif()
178217
endif()
179218

180219
if(CMAKE_CONFIGURATION_TYPES)
181220
# Multi-configuration generator.
182221
set (CMAKE_CONFIGURATION_TYPES "Debug" "Release" "ReleaseInternal")
183-
message(STATUS "LLVM_CONFIGURATION_TYPES = ${CMAKE_CONFIGURATION_TYPES}")
222+
message(STATUS "[LLVM_PATCHER] : LLVM_CONFIGURATION_TYPES = ${CMAKE_CONFIGURATION_TYPES}")
184223
else()
185224
# Single-configuration generator.
186-
message(STATUS "LLVM_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
225+
message(STATUS "[LLVM_PATCHER] : LLVM_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
187226
endif()
188227

189228
# Set python interpreter for LLVM
@@ -207,7 +246,7 @@ set(LLVM_VERSION_SUFFIX ${LLVM_VERSION_SUFFIX} PARENT_SCOPE)
207246
set(PACKAGE_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}")
208247

209248
if(NOT (${PACKAGE_VERSION} EQUAL ${EXPECTED_LLVM_VERSION}))
210-
message(FATAL_ERROR "Expected LLVM version ${EXPECTED_LLVM_VERSION} but found ${PACKAGE_VERSION}.")
249+
message(FATAL_ERROR "[LLVM_PATCHER] : Expected LLVM version ${EXPECTED_LLVM_VERSION} but found ${PACKAGE_VERSION}.")
211250
endif()
212251

213252
set(LLVM_INCLUDE_DIRS "${LLVM_SOURCE_DIR}/include;${CMAKE_CURRENT_BINARY_DIR}/src/include")

0 commit comments

Comments
 (0)