Skip to content

Commit 5f73e7d

Browse files
committed
kbuild: refactor cross-compiling linux-headers package
Since commit 13b2548 ("kbuild: change working directory to external module directory with M="), when cross-building host programs for the linux-headers package, the "Entering directory" and "Leaving directory" messages appear multiple times, and each object path shown is relative to the working directory. This makes it difficult to track which objects are being rebuilt. In hindsight, using the external module build (M=) was not a good idea. This commit simplifies the script by leveraging the run-command target, resulting in a cleaner build log again. [Before] $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg [ snip ] Rebuilding host programs with aarch64-linux-gnu-gcc... make[5]: Entering directory '/home/masahiro/linux' make[6]: Entering directory '/home/masahiro/linux/debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+' HOSTCC scripts/kallsyms HOSTCC scripts/sorttable HOSTCC scripts/asn1_compiler make[6]: Leaving directory '/home/masahiro/linux/debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+' make[5]: Leaving directory '/home/masahiro/linux' make[5]: Entering directory '/home/masahiro/linux' make[6]: Entering directory '/home/masahiro/linux/debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+' HOSTCC scripts/basic/fixdep HOSTCC scripts/mod/modpost.o HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/sumversion.o HOSTCC scripts/mod/symsearch.o HOSTLD scripts/mod/modpost make[6]: Leaving directory '/home/masahiro/linux/debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+' make[5]: Leaving directory '/home/masahiro/linux' [After] $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg [ snip ] HOSTCC debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/basic/fixdep HOSTCC debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/kallsyms HOSTCC debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/sorttable HOSTCC debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/asn1_compiler HOSTCC debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/mod/modpost.o HOSTCC debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/mod/file2alias.o HOSTCC debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/mod/sumversion.o HOSTCC debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/mod/symsearch.o HOSTLD debian/linux-headers-6.13.0-rc1+/usr/src/linux-headers-6.13.0-rc1+/scripts/mod/modpost Signed-off-by: Masahiro Yamada <[email protected]>
1 parent ac2c30f commit 5f73e7d

File tree

1 file changed

+9
-24
lines changed

1 file changed

+9
-24
lines changed

scripts/package/install-extmod-build

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -49,38 +49,23 @@ mkdir -p "${destdir}"
4949
# This caters to host programs that participate in Kbuild. objtool and
5050
# resolve_btfids are out of scope.
5151
if [ "${CC}" != "${HOSTCC}" ]; then
52-
echo "Rebuilding host programs with ${CC}..."
53-
54-
# This leverages external module building.
55-
# - Clear sub_make_done to allow the top-level Makefile to redo sub-make.
56-
# - Filter out --no-print-directory to print "Entering directory" logs
57-
# when Make changes the working directory.
58-
unset sub_make_done
59-
MAKEFLAGS=$(echo "${MAKEFLAGS}" | sed s/--no-print-directory//)
60-
61-
cat <<-'EOF' > "${destdir}/Kbuild"
62-
subdir-y := scripts
52+
cat "${destdir}/scripts/Makefile" - <<-'EOF' > "${destdir}/scripts/Kbuild"
53+
subdir-y += basic
54+
hostprogs-always-y += mod/modpost
55+
mod/modpost-objs := $(addprefix mod/, modpost.o file2alias.o sumversion.o symsearch.o)
6356
EOF
6457

6558
# HOSTCXX is not overridden. The C++ compiler is used to build:
6659
# - scripts/kconfig/qconf, which is unneeded for external module builds
6760
# - GCC plugins, which will not work on the installed system even after
6861
# being rebuilt.
6962
#
70-
# Use the single-target build to avoid the modpost invocation, which
71-
# would overwrite Module.symvers.
72-
"${MAKE}" HOSTCC="${CC}" KBUILD_OUTPUT=. KBUILD_EXTMOD="${destdir}" scripts/
73-
74-
cat <<-'EOF' > "${destdir}/scripts/Kbuild"
75-
subdir-y := basic
76-
hostprogs-always-y := mod/modpost
77-
mod/modpost-objs := $(addprefix mod/, modpost.o file2alias.o sumversion.o symsearch.o)
78-
EOF
79-
80-
# Run once again to rebuild scripts/basic/ and scripts/mod/modpost.
81-
"${MAKE}" HOSTCC="${CC}" KBUILD_OUTPUT=. KBUILD_EXTMOD="${destdir}" scripts/
63+
# Clear VPATH and srcroot because the source files reside in the output
64+
# directory.
65+
# shellcheck disable=SC2016 # $(MAKE), $(CC), and $(build) will be expanded by Make
66+
"${MAKE}" run-command KBUILD_RUN_COMMAND='+$(MAKE) HOSTCC=$(CC) VPATH= srcroot=. $(build)='"${destdir}"/scripts
8267

83-
rm -f "${destdir}/Kbuild" "${destdir}/scripts/Kbuild"
68+
rm -f "${destdir}/scripts/Kbuild"
8469
fi
8570

8671
find "${destdir}" \( -name '.*.cmd' -o -name '*.o' \) -delete

0 commit comments

Comments
 (0)