5
5
setup_variables () {
6
6
while [[ ${# } -ge 1 ]]; do
7
7
case ${1} in
8
- " AR=" * |" ARCH=" * |" CC=" * |" LD=" * |" REPO=" * ) export " ${1?} " ;;
8
+ " AR=" * |" ARCH=" * |" CC=" * |" LD=" * |" OBJCOPY " = * | " REPO=" * ) export " ${1?} " ;;
9
9
" -c" |" --clean" ) cleanup=true ;;
10
10
" -j" |" --jobs" ) shift ; jobs=$1 ;;
11
11
" -j" * ) jobs=${1/ -j} ;;
@@ -145,7 +145,7 @@ check_dependencies() {
145
145
command -v ${readelf} & > /dev/null && break
146
146
done
147
147
148
- # Check for LD, CC, and AR environmental variables
148
+ # Check for LD, CC, OBJCOPY, and AR environmental variables
149
149
# and print the version string of each. If CC and AR
150
150
# don't exist, try to find them.
151
151
# lld isn't ready for all architectures so it's just
@@ -183,6 +183,14 @@ check_dependencies() {
183
183
fi
184
184
check_ar_version
185
185
${AR} --version
186
+
187
+ if [[ -z " ${OBJCOPY:- } " ]]; then
188
+ for OBJCOPY in llvm-objcopy-9 llvm-objcopy-8 llvm-objcopy-7 llvm-objcopy " ${CROSS_COMPILE:- } " objcopy; do
189
+ command -v ${OBJCOPY} 2> /dev/null && break
190
+ done
191
+ fi
192
+ check_objcopy_version
193
+ ${OBJCOPY} --version
186
194
}
187
195
188
196
# Optimistically check to see that the user has a llvm-ar
@@ -206,13 +214,34 @@ check_ar_version() {
206
214
fi
207
215
}
208
216
217
+ # Optimistically check to see that the user has a llvm-objcopy
218
+ # with https://reviews.llvm.org/rL357017. If they don't,
219
+ # fall back to GNU objcopy and let them know.
220
+ check_objcopy_version () {
221
+ if ${OBJCOPY} --version | grep -q " LLVM" && \
222
+ [[ $( ${OBJCOPY} --version | grep version | sed -e ' s/.*LLVM version //g' -e ' s/[[:blank:]]*$//' -e ' s/\.//g' -e ' s/svn//' ) -lt 900 ]]; then
223
+ set +x
224
+ echo
225
+ echo " ${OBJCOPY} found but appears to be too old to build the kernel (needs to be at least 9.0.0)."
226
+ echo
227
+ echo " Please either update llvm-objcopy from your distro or build it from source!"
228
+ echo
229
+ echo " See https://github.com/ClangBuiltLinux/linux/issues/418 for more info."
230
+ echo
231
+ echo " Falling back to GNU objcopy..."
232
+ echo
233
+ OBJCOPY=${CROSS_COMPILE:- } objcopy
234
+ set -x
235
+ fi
236
+ }
237
+
209
238
mako_reactor () {
210
239
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/kbuild/kbuild.txt
211
240
time \
212
241
KBUILD_BUILD_TIMESTAMP=" Thu Jan 1 00:00:00 UTC 1970" \
213
242
KBUILD_BUILD_USER=driver \
214
243
KBUILD_BUILD_HOST=clangbuiltlinux \
215
- make -j" ${jobs:- $(nproc)} " CC=" ${CC} " HOSTCC=" ${CC} " LD=" ${LD} " HOSTLD=" ${HOSTLD:- ld} " AR=" ${AR} " " ${@ } "
244
+ make -j" ${jobs:- $(nproc)} " CC=" ${CC} " HOSTCC=" ${CC} " LD=" ${LD} " HOSTLD=" ${HOSTLD:- ld} " AR=" ${AR} " OBJCOPY= " ${OBJCOPY} " " ${@ } "
216
245
}
217
246
218
247
apply_patches () {
0 commit comments