mirror of
https://github.com/torvalds/linux.git
synced 2025-04-06 00:16:18 +00:00

Since commit 5f73e7d0386d ("kbuild: refactor cross-compiling linux-headers package"), the linux-headers pacman package fails to build when "O=" is set. The build system complains: /mnt/chroot/linux/scripts/Makefile.build:41: mnt/chroots/linux-mainline/pacman/linux-upstream/pkg/linux-upstream-headers/usr//lib/modules/6.14.0-rc3-00350-g771dba31fffc/build/scripts/Makefile: No such file or directory This is because the "srcroot" variable is set to "." and the "build" variable is set to the absolute path. This makes the "src" variables point to wrong directory. Change the "build" variable to a relative path to "." to fix build. Fixes: 5f73e7d0386d ("kbuild: refactor cross-compiling linux-headers package") Signed-off-by: Inochi Amaoto <inochiama@gmail.com> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
72 lines
2.2 KiB
Bash
Executable File
72 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
set -eu
|
|
|
|
destdir=${1}
|
|
|
|
is_enabled() {
|
|
grep -q "^$1=y" include/config/auto.conf
|
|
}
|
|
|
|
find_in_scripts() {
|
|
find scripts \
|
|
\( -name atomic -o -name dtc -o -name kconfig -o -name package \) -prune -o \
|
|
! -name unifdef -a ! -name mk_elfconfig -a \( -type f -o -type l \) -print
|
|
}
|
|
|
|
mkdir -p "${destdir}"
|
|
|
|
(
|
|
cd "${srctree}"
|
|
echo Makefile
|
|
find "arch/${SRCARCH}" -maxdepth 1 -name 'Makefile*'
|
|
find "arch/${SRCARCH}" -name generated -prune -o -name include -type d -print
|
|
find "arch/${SRCARCH}" -name Kbuild.platforms -o -name Platform
|
|
find include \( -name config -o -name generated \) -prune -o \( -type f -o -type l \) -print
|
|
find_in_scripts
|
|
) | tar -c -f - -C "${srctree}" -T - | tar -xf - -C "${destdir}"
|
|
|
|
{
|
|
if is_enabled CONFIG_OBJTOOL; then
|
|
echo tools/objtool/objtool
|
|
fi
|
|
|
|
echo Module.symvers
|
|
echo "arch/${SRCARCH}/include/generated"
|
|
echo include/config/auto.conf
|
|
echo include/config/kernel.release
|
|
echo include/generated
|
|
find_in_scripts
|
|
|
|
if is_enabled CONFIG_GCC_PLUGINS; then
|
|
find scripts/gcc-plugins -name '*.so'
|
|
fi
|
|
} | tar -c -f - -T - | tar -xf - -C "${destdir}"
|
|
|
|
# When ${CC} and ${HOSTCC} differ, rebuild host programs using ${CC}.
|
|
#
|
|
# This caters to host programs that participate in Kbuild. objtool and
|
|
# resolve_btfids are out of scope.
|
|
if [ "${CC}" != "${HOSTCC}" ]; then
|
|
cat "${destdir}/scripts/Makefile" - <<-'EOF' > "${destdir}/scripts/Kbuild"
|
|
subdir-y += basic
|
|
hostprogs-always-y += mod/modpost
|
|
mod/modpost-objs := $(addprefix mod/, modpost.o file2alias.o sumversion.o symsearch.o)
|
|
EOF
|
|
|
|
# HOSTCXX is not overridden. The C++ compiler is used to build:
|
|
# - scripts/kconfig/qconf, which is unneeded for external module builds
|
|
# - GCC plugins, which will not work on the installed system even after
|
|
# being rebuilt.
|
|
#
|
|
# Clear VPATH and srcroot because the source files reside in the output
|
|
# directory.
|
|
# shellcheck disable=SC2016 # $(MAKE) and $(build) will be expanded by Make
|
|
"${MAKE}" run-command KBUILD_RUN_COMMAND='+$(MAKE) HOSTCC='"${CC}"' VPATH= srcroot=. $(build)='"$(realpath --relative-base=. "${destdir}")"/scripts
|
|
|
|
rm -f "${destdir}/scripts/Kbuild"
|
|
fi
|
|
|
|
find "${destdir}" \( -name '.*.cmd' -o -name '*.o' \) -delete
|