#!/bin/bash
# Strip toolchain auto-detection options from a kernel .config file.
#
# These options are automatically detected by Kconfig from the build
# environment at olddefconfig time (CC version, LD version, AS flags, etc.).
# They do not represent intentional configuration choices and should not
# be tracked in version control.
#
# Usage: scripts/clean-config .config > clean.config
# mv clean.config kernel-aarch64.config
set -euo pipefail
input="${1:-/dev/stdin}"
grep -v -E \
-e '^CONFIG_CC_VERSION_TEXT=' \
-e '^CONFIG_CC_IS_GCC=' \
-e '^CONFIG_CC_IS_CLANG=' \
-e '^CONFIG_GCC_VERSION=' \
-e '^CONFIG_CLANG_VERSION=' \
-e '^CONFIG_AS_IS_GNU=' \
-e '^CONFIG_AS_IS_LLVM=' \
-e '^CONFIG_AS_VERSION=' \
-e '^CONFIG_LD_IS_BFD=' \
-e '^CONFIG_LD_IS_LLD=' \
-e '^CONFIG_LD_VERSION=' \
-e '^CONFIG_LLD_VERSION=' \
-e '^CONFIG_CC_CAN_LINK=' \
-e '^CONFIG_CC_HAS_ASM_GOTO_OUTPUT=' \
-e '^CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=' \
-e '^CONFIG_GCC_ASM_GOTO_OUTPUT_BROKEN=' \
-e '^CONFIG_CC_HAS_ASM_INLINE=' \
-e '^CONFIG_CC_HAS_ASSUME=' \
-e '^CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=' \
-e '^CONFIG_CC_HAS_COUNTED_BY=' \
-e '^CONFIG_CC_HAS_MULTIDIMENSIONAL_NONSTRING=' \
-e '^CONFIG_CC_HAS_INT128=' \
-e '^CONFIG_CC_HAS_BRANCH_PROT_PAC_RET=' \
-e '^CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=' \
-e '^CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=' \
-e '^CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=' \
-e '^CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=' \
-e '^CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=' \
-e '^CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=' \
-e '^CONFIG_CC_HAS_ZERO_CALL_USED_REGS=' \
-e '^CONFIG_CC_HAS_KASAN_GENERIC=' \
-e '^CONFIG_CC_HAS_KASAN_SW_TAGS=' \
-e '^CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=' \
-e '^CONFIG_CC_IMPLICIT_FALLTHROUGH=' \
-e '^CONFIG_CC_NO_ARRAY_BOUNDS=' \
-e '^CONFIG_CC_NO_STRINGOP_OVERFLOW=' \
-e '^CONFIG_CC_HAS_ENTRY_PADDING=' \
-e '^CONFIG_CC_HAS_MARCH_NATIVE=' \
-e '^CONFIG_CC_HAS_NAMED_AS_FIXED_SANITIZERS=' \
-e '^CONFIG_CC_HAS_SLS=' \
-e '^CONFIG_GCC10_NO_ARRAY_BOUNDS=' \
-e '^CONFIG_GCC_NO_STRINGOP_OVERFLOW=' \
-e '^CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=' \
-e '^CONFIG_CC_HAVE_SHADOW_CALL_STACK=' \
-e '^CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=' \
-e '^CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=' \
-e '^CONFIG_LD_ORPHAN_WARN=' \
-e '^CONFIG_LD_ORPHAN_WARN_LEVEL=' \
-e '^CONFIG_AS_HAS_CFI_NEGATE_RA_STATE=' \
-e '^CONFIG_AS_HAS_ARMV8_5=' \
-e '^CONFIG_AS_HAS_MOPS=' \
-e '^CONFIG_AS_HAS_NON_CONST_ULEB128=' \
-e '^CONFIG_RUSTC_VERSION=' \
-e '^CONFIG_RUSTC_LLVM_VERSION=' \
-e '^CONFIG_RUSTC_HAS_' \
-e '^CONFIG_RUSTC_SUPPORTS_' \
-e '^CONFIG_PAHOLE_VERSION=' \
-e '^CONFIG_PAHOLE_HAS_' \
-e '^# CONFIG_CC_IS_([A-Z_]+) is not set' \
"$input"