diff --git a/anolis/Makefile.variables b/anolis/Makefile.variables index 97716491f098167719460df55f783e3200dbe163..7868b4cfbda928b41309fd077ab714b96c357ac2 100644 --- a/anolis/Makefile.variables +++ b/anolis/Makefile.variables @@ -40,6 +40,9 @@ DIST_OUTPUT ?= $(DIST_SOURCES)output/ DIST_RPMBUILDDIR_OUTPUT = ${DIST_OUTPUT}/rpmbuild DIST_SHORT_OUTPUT=$(subst $(DIST_SRCROOT),,$(DIST_OUTPUT)) +# Path to copy the generated kernel configuration to. +DIST_CONFIG_PATH ?= $(DIST_SRCROOT).config + DIST_SPEC_TEMPLATE = kernel.spec.template DIST_SPEC_FILE = kernel.spec @@ -94,4 +97,4 @@ ifeq ($(DIST_ARCH),loongarch) endif ifeq ($(DIST_ARCH),riscv64) DIST_ARCH := riscv -endif \ No newline at end of file +endif diff --git a/anolis/configs/scripts/anolis_kconfig.py b/anolis/configs/scripts/anolis_kconfig.py index bc92e4806e0d7d8761ab86733c6edaeedd28d416..5c2cb5806003f92cf8076737030698cdfca2303e 100644 --- a/anolis/configs/scripts/anolis_kconfig.py +++ b/anolis/configs/scripts/anolis_kconfig.py @@ -670,7 +670,7 @@ class GenerateTranslater(): # refresh configs # cmd += f"echo \"* generated file: {final_path}\"\n" - cmd += f"make KCONFIG_CONFIG={final_path} ARCH={e.arch} CROSS_COMPILE=scripts/dummy-tools/ " + cmd += f'env -u sub_make_done make O="${{DIST_KBUILD_OUTPUT}}" KCONFIG_CONFIG={final_path} ARCH={e.arch} ' cmd += f"PAHOLE=scripts/dummy-tools/pahole " cmd += f"-C {self.src_root} olddefconfig > /dev/null 2>&1\n" cmd += f"rm -f {final_path}.old \n" @@ -680,7 +680,7 @@ class GenerateTranslater(): @staticmethod def do_translate(args): - cmd = "" + cmd = "set -e\n" t = GenerateTranslater(args) l = KconfigLayout.from_path(args.layout) @@ -855,4 +855,4 @@ if __name__ == '__main__': exporter.set_defaults(func=Exporter.do_export) args = parser.parse_args() - args.func(args) \ No newline at end of file + args.func(args) diff --git a/anolis/configs/scripts/generate_configs.sh b/anolis/configs/scripts/generate_configs.sh index 70318d5d74772b66a302066fb14b13162606ae7e..c9fb17992356005bea5419e10ac037c92840d852 100644 --- a/anolis/configs/scripts/generate_configs.sh +++ b/anolis/configs/scripts/generate_configs.sh @@ -5,7 +5,7 @@ # # Copyright (C) 2023 Qiao Ma -set -e +set -e -o pipefail SCRIPT_DIR=$(realpath $(dirname $0)) FILE_LIST=${DIST_OUTPUT}/file_list @@ -30,9 +30,18 @@ else done fi -bash ${DIST_OUTPUT}/generate.sh | tee ${FILE_LIST} +bash "${DIST_OUTPUT}/generate.sh" | tee "${FILE_LIST}" if [ "x${DIST_DO_GENERATE_DOT_CONFIG}" = "xY" ]; then - file=$(cat ${FILE_LIST} | grep "processed" | awk '{print $4}' | head -1) - cp -f ${file} ${DIST_SRCROOT}.config -fi \ No newline at end of file + file=$(awk '/processed/ { print $4; exit }' "${FILE_LIST}") + if [ -z "${file}" ] || [ ! -f "${file}" ]; then + echo "Unable to find the generated configuration file" >&2 + exit 1 + fi + + config_path=${DIST_CONFIG_PATH:-${DIST_SRCROOT}.config} + mkdir -p "$(dirname "${config_path}")" + if ! cmp -s "${file}" "${config_path}"; then + cp -f "${file}" "${config_path}" + fi +fi diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 6e97230421d4bc264acbc0dc6068dd738b3e7595..15f1dd6ca973de03fdaa19856998ae9aa50998fb 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile @@ -90,13 +90,31 @@ else $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG) endif +define cmd_anolis_defconfig +set -e; \ + config="$(abspath $(KCONFIG_CONFIG))"; \ + saved=; \ + if [ -e "$$config" ]; then \ + saved=$$(mktemp "$$(dirname "$$config")/.anolis-defconfig.XXXXXX"); \ + trap 'rm -f "$$saved"' EXIT; \ + cp -p "$$config" "$$saved"; \ + fi; \ + DIST_KBUILD_OUTPUT="$(abs_objtree)" \ + DIST_DO_GENERATE_DOT_CONFIG=Y DIST_CONFIG_KERNEL_NAME=ANCK \ + DIST_CONFIG_PATH="$(abspath $(KCONFIG_CONFIG))" \ + DIST_OUTPUT="$(abs_objtree)/anolis/output" \ + $(MAKE) -C $(srctree)/anolis/ $(1); \ + $(MAKE) -C $(abs_objtree) olddefconfig; \ + if [ -n "$$saved" ] && cmp -s "$$saved" "$$config"; then \ + touch -r "$$saved" "$$config"; \ + fi +endef + anolis_defconfig: $(obj)/conf - $(Q)DIST_DO_GENERATE_DOT_CONFIG=Y DIST_CONFIG_KERNEL_NAME=ANCK $(MAKE) -C $(srctree)/anolis/ dist-defconfig - $(Q)$(MAKE) -C $(srctree) olddefconfig + $(Q)$(call cmd_anolis_defconfig,dist-defconfig) anolis-debug_defconfig: $(obj)/conf - $(Q)DIST_DO_GENERATE_DOT_CONFIG=Y DIST_CONFIG_KERNEL_NAME=ANCK $(MAKE) -C $(srctree)/anolis/ dist-debug-defconfig - $(Q)$(MAKE) -C $(srctree) olddefconfig + $(Q)$(call cmd_anolis_defconfig,dist-debug-defconfig) %_defconfig: $(obj)/conf $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)