@@ -123,14 +123,35 @@ else()
123123 )
124124endif ()
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
127146if (LLVM_STOCK_SOURCES)
128147 set (LLVM_APPLY_PATCHES false )
129148else ()
130149 set (LLVM_APPLY_PATCHES true )
131150endif ()
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
135156if (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)
150171endif ()
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
155176if (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 ()
178217endif ()
179218
180219if (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} " )
184223else ()
185224 # Single-configuration generator.
186- message (STATUS "LLVM_BUILD_TYPE = ${CMAKE_BUILD_TYPE} " )
225+ message (STATUS "[LLVM_PATCHER] : LLVM_BUILD_TYPE = ${CMAKE_BUILD_TYPE} " )
187226endif ()
188227
189228# Set python interpreter for LLVM
@@ -207,7 +246,7 @@ set(LLVM_VERSION_SUFFIX ${LLVM_VERSION_SUFFIX} PARENT_SCOPE)
207246set (PACKAGE_VERSION "${LLVM_VERSION_MAJOR} .${LLVM_VERSION_MINOR} .${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX} " )
208247
209248if (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} ." )
211250endif ()
212251
213252set (LLVM_INCLUDE_DIRS "${LLVM_SOURCE_DIR} /include;${CMAKE_CURRENT_BINARY_DIR} /src/include" )
0 commit comments