1fe66b5d2SMasahiro Yamada#!/bin/sh 2fe66b5d2SMasahiro Yamada# SPDX-License-Identifier: GPL-2.0-only 3fe66b5d2SMasahiro Yamada 4c0414419SMasahiro Yamadaset -eu 5fe66b5d2SMasahiro Yamada 6fe66b5d2SMasahiro Yamadadestdir=${1} 7fe66b5d2SMasahiro Yamada 8fe66b5d2SMasahiro Yamadais_enabled() { 9fe66b5d2SMasahiro Yamada grep -q "^$1=y" include/config/auto.conf 10fe66b5d2SMasahiro Yamada} 11fe66b5d2SMasahiro Yamada 12aaed5c77SMasahiro Yamadafind_in_scripts() { 13aaed5c77SMasahiro Yamada find scripts \ 14aaed5c77SMasahiro Yamada \( -name atomic -o -name dtc -o -name kconfig -o -name package \) -prune -o \ 15aaed5c77SMasahiro Yamada ! -name unifdef -a ! -name mk_elfconfig -a \( -type f -o -type l \) -print 16aaed5c77SMasahiro Yamada} 17aaed5c77SMasahiro Yamada 18fe66b5d2SMasahiro Yamadamkdir -p "${destdir}" 19fe66b5d2SMasahiro Yamada 20fe66b5d2SMasahiro Yamada( 21fe66b5d2SMasahiro Yamada cd "${srctree}" 22fe66b5d2SMasahiro Yamada echo Makefile 23fe66b5d2SMasahiro Yamada find "arch/${SRCARCH}" -maxdepth 1 -name 'Makefile*' 24aaed5c77SMasahiro Yamada find "arch/${SRCARCH}" -name generated -prune -o -name include -type d -print 25fe66b5d2SMasahiro Yamada find "arch/${SRCARCH}" -name Kbuild.platforms -o -name Platform 26aaed5c77SMasahiro Yamada find include \( -name config -o -name generated \) -prune -o \( -type f -o -type l \) -print 27aaed5c77SMasahiro Yamada find_in_scripts 28fe66b5d2SMasahiro Yamada) | tar -c -f - -C "${srctree}" -T - | tar -xf - -C "${destdir}" 29fe66b5d2SMasahiro Yamada 30fe66b5d2SMasahiro Yamada{ 31fe66b5d2SMasahiro Yamada if is_enabled CONFIG_OBJTOOL; then 32fe66b5d2SMasahiro Yamada echo tools/objtool/objtool 33fe66b5d2SMasahiro Yamada fi 34fe66b5d2SMasahiro Yamada 35aaed5c77SMasahiro Yamada echo Module.symvers 36aaed5c77SMasahiro Yamada echo "arch/${SRCARCH}/include/generated" 37aaed5c77SMasahiro Yamada echo include/config/auto.conf 38aaed5c77SMasahiro Yamada echo include/config/kernel.release 39aaed5c77SMasahiro Yamada echo include/generated 40aaed5c77SMasahiro Yamada find_in_scripts 41fe66b5d2SMasahiro Yamada 42fe66b5d2SMasahiro Yamada if is_enabled CONFIG_GCC_PLUGINS; then 43fe66b5d2SMasahiro Yamada find scripts/gcc-plugins -name '*.so' 44fe66b5d2SMasahiro Yamada fi 45fe66b5d2SMasahiro Yamada} | tar -c -f - -T - | tar -xf - -C "${destdir}" 46fe66b5d2SMasahiro Yamada 47*f1d87664SMasahiro Yamada# When ${CC} and ${HOSTCC} differ, we are likely cross-compiling. Rebuild host 48*f1d87664SMasahiro Yamada# programs using ${CC}. This assumes CC=${CROSS_COMPILE}gcc, which is usually 49*f1d87664SMasahiro Yamada# the case for package building. It does not cross-compile when CC=clang. 50*f1d87664SMasahiro Yamada# 51*f1d87664SMasahiro Yamada# This caters to host programs that participate in Kbuild. objtool and 52*f1d87664SMasahiro Yamada# resolve_btfids are out of scope. 53*f1d87664SMasahiro Yamadaif [ "${CC}" != "${HOSTCC}" ] && is_enabled CONFIG_CC_CAN_LINK; then 54*f1d87664SMasahiro Yamada echo "Rebuilding host programs with ${CC}..." 55*f1d87664SMasahiro Yamada 56*f1d87664SMasahiro Yamada cat <<-'EOF' > "${destdir}/Kbuild" 57*f1d87664SMasahiro Yamada subdir-y := scripts 58*f1d87664SMasahiro Yamada EOF 59*f1d87664SMasahiro Yamada 60*f1d87664SMasahiro Yamada # HOSTCXX is not overridden. The C++ compiler is used to build: 61*f1d87664SMasahiro Yamada # - scripts/kconfig/qconf, which is unneeded for external module builds 62*f1d87664SMasahiro Yamada # - GCC plugins, which will not work on the installed system even after 63*f1d87664SMasahiro Yamada # being rebuilt. 64*f1d87664SMasahiro Yamada # 65*f1d87664SMasahiro Yamada # Use the single-target build to avoid the modpost invocation, which 66*f1d87664SMasahiro Yamada # would overwrite Module.symvers. 67*f1d87664SMasahiro Yamada "${MAKE}" HOSTCC="${CC}" KBUILD_EXTMOD="${destdir}" scripts/ 68*f1d87664SMasahiro Yamada 69*f1d87664SMasahiro Yamada cat <<-'EOF' > "${destdir}/scripts/Kbuild" 70*f1d87664SMasahiro Yamada subdir-y := basic 71*f1d87664SMasahiro Yamada hostprogs-always-y := mod/modpost 72*f1d87664SMasahiro Yamada mod/modpost-objs := $(addprefix mod/, modpost.o file2alias.o sumversion.o symsearch.o) 73*f1d87664SMasahiro Yamada EOF 74*f1d87664SMasahiro Yamada 75*f1d87664SMasahiro Yamada # Run once again to rebuild scripts/basic/ and scripts/mod/modpost. 76*f1d87664SMasahiro Yamada "${MAKE}" HOSTCC="${CC}" KBUILD_EXTMOD="${destdir}" scripts/ 77*f1d87664SMasahiro Yamada 78*f1d87664SMasahiro Yamada rm -f "${destdir}/Kbuild" "${destdir}/scripts/Kbuild" 79*f1d87664SMasahiro Yamadafi 80*f1d87664SMasahiro Yamada 81aaed5c77SMasahiro Yamadafind "${destdir}" \( -name '.*.cmd' -o -name '*.o' \) -delete 82