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 47e2c31822SMasahiro Yamada# When ${CC} and ${HOSTCC} differ, rebuild host programs using ${CC}. 48f1d87664SMasahiro Yamada# 49f1d87664SMasahiro Yamada# This caters to host programs that participate in Kbuild. objtool and 50f1d87664SMasahiro Yamada# resolve_btfids are out of scope. 51e2c31822SMasahiro Yamadaif [ "${CC}" != "${HOSTCC}" ]; then 525f73e7d0SMasahiro Yamada cat "${destdir}/scripts/Makefile" - <<-'EOF' > "${destdir}/scripts/Kbuild" 535f73e7d0SMasahiro Yamada subdir-y += basic 545f73e7d0SMasahiro Yamada hostprogs-always-y += mod/modpost 555f73e7d0SMasahiro Yamada mod/modpost-objs := $(addprefix mod/, modpost.o file2alias.o sumversion.o symsearch.o) 56f1d87664SMasahiro Yamada EOF 57f1d87664SMasahiro Yamada 58f1d87664SMasahiro Yamada # HOSTCXX is not overridden. The C++ compiler is used to build: 59f1d87664SMasahiro Yamada # - scripts/kconfig/qconf, which is unneeded for external module builds 60f1d87664SMasahiro Yamada # - GCC plugins, which will not work on the installed system even after 61f1d87664SMasahiro Yamada # being rebuilt. 62f1d87664SMasahiro Yamada # 635f73e7d0SMasahiro Yamada # Clear VPATH and srcroot because the source files reside in the output 645f73e7d0SMasahiro Yamada # directory. 65140332b6SMasahiro Yamada # shellcheck disable=SC2016 # $(MAKE) and $(build) will be expanded by Make 66*b5e39565SInochi Amaoto "${MAKE}" run-command KBUILD_RUN_COMMAND='+$(MAKE) HOSTCC='"${CC}"' VPATH= srcroot=. $(build)='"$(realpath --relative-base=. "${destdir}")"/scripts 67f1d87664SMasahiro Yamada 685f73e7d0SMasahiro Yamada rm -f "${destdir}/scripts/Kbuild" 69f1d87664SMasahiro Yamadafi 70f1d87664SMasahiro Yamada 71aaed5c77SMasahiro Yamadafind "${destdir}" \( -name '.*.cmd' -o -name '*.o' \) -delete 72