From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C6FE3148AE for ; Wed, 31 Dec 2025 08:41:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767170495; cv=none; b=gzqH0ts8MwT4zROZhscnjv9TzJVBf9wFJwC0MAOVqPkgSUwSYWBwkkXk53ChMdp1KXQxkzQH1+gw19e9wqloFFvjIrSVXD1Zhiw6EtdxGXPpe5r8XQpdEN1Clpz1kfsKQpk6OxgqztszsT4+x3oWCE7iW7OWNlw28HKIa7TuoMo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767170495; c=relaxed/simple; bh=aksW9Gl27Y2TlzheBx6d4KGRf/+Nv/r77hGaPdRG7s0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P1Z05rexqFPbfBKd/Q+PA8col+1Oh6fIgJ8x3mJkzh/Y3LcqQ7uFqYd8Tipzn8ZVIF399ZIMrJItEj6nkMr46T4Qi0pYzKK0nEqVZ7rNQeKYqZOELfQ4dMgHLUFpC2xHl0WhzTyxsuMrtxDI/Ny5lNZ8+6dVn/9T8K/cB5/1O5U= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=J/Vj0Jsn; arc=none smtp.client-ip=209.85.167.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="J/Vj0Jsn" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-594270ec7f9so11672071e87.3 for ; Wed, 31 Dec 2025 00:41:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1767170490; x=1767775290; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=umne1FnYLWlRCQvCp7bwG/HVqfB+9OUNWkZhOjj9nsQ=; b=J/Vj0JsnFnlU6sTTKp1sUm2DVNR5LRoATm2qwamgB3tUXu3LkkBUK4TaQyXXhBPMEz kasCD/wOph/L0cTrRyv4xlRTvbZELoF3lvki6xztB3FXDS1Rzenz9Tlc6XojjL39Ed6i Nd8EpjVX1hIw0i88lNO3VPaB8KJXfYNIP7h2NH/IJSk8N5gqfXVGtkKQ9Us0IwPwE7sL DeV+w6dGlp+tD/IMGSuIY25O8ntIPySVLXKGJkWiouMMfPpf8klvFgURpx4hLGtTPjrW BIE5f0fm1RPgRqmn2yYiyxobq1wRK/XrsTMlSUZSRYOeDm8pcxxkVoIiDEbUqQrZ4fMj cs3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767170490; x=1767775290; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=umne1FnYLWlRCQvCp7bwG/HVqfB+9OUNWkZhOjj9nsQ=; b=m9EZFTqSM8Mw97Mc2lyJJq9VACrEiEOgHpkdzBZOYredYoNNUhulujCgNS6pgCv/2l HM9GKLwG+630kAYMiWkj9muKAGi6/V5x6b2BYTd9u+6iH/LLvgP0tNKVI3Z8CTecqEe/ zJK98JbpE2Eld+LTFfG4OeLTBPGMDs/r47BE55ifzfvqbTheWStXf4yGQ9Dg+FRr4c3j gP1WaSP4ZFGDDsVfdxz3R9173yafcoQ297z91OdGafmvcABumCtFo5ibNbNae6fvY5Js DmSsHjptiOlkAJXNZKPzsEFSFO4PVfQqFBhAsYfvlYDLiNb13OdQlWydLSksxLX1+3yY YNiw== X-Forwarded-Encrypted: i=1; AJvYcCVkAktFWPdvdtspC3eqOWnsOXCn7T2CVg0vETuRr8xCSDJfviE93vwkftP2026Pz/qIr30j0qQFbo+9Mr8=@vger.kernel.org X-Gm-Message-State: AOJu0YzlcjnoN6OD4lkR0hifXutv47cQXu+kNhIRdPXr3kiqAlhkNSB3 ho7g/9jfxGd9wrVVOxRnwtzPJ57OCfDy/Y/Z+7XBwxMLz6k+UMlwA84drJlw3muwpNo= X-Gm-Gg: AY/fxX424Up1byy+ye7TC62VAX4dax064koilaiLG6gqMusg94Ux7MOG7slyMrPteFG L+xg41OrWuhKiYK3g1TfT8zCNGC4ATvxgu8yRK9Dd/c03Df8UDjwJxPEkLZoUxh0C10yYoISni/ aROfv3TEki3CTVsdrdp8tiP0C7RxM7VY8fOBCZNPoOMMu6x1oZ0JrRHl0DKbQHALlqkDFogYOXC F4A+8r51zaNlrVwmRsK5CrsMEep+pCQQi3BGVaW2Xbs9UxS3zn890ApkRl8trw8Mk4gwsQyhVCR AYgssyL6b2O4OS4R49Oa2nc8ahJeLS/xQ4hQvLEWJBfJjQv7Ofy4aCh2ow44bvoH+RwS2fMy6HC V4z5YTrCBPF9w9t/91e+vj7gtiyfRuRngmwe2BCspOy9gzyusxechn5U2mNjQehyNkhzquWZX1j 4LrjPowsco8aOuHfJOAFdo+2UwuTaQU5tDCJEzAi6acNTE X-Google-Smtp-Source: AGHT+IEIwvixiSbKY20D9N8TRsDhAat/GfJPMUsS6YFx8gT9L9seon1KnPGyRhp5hbdWlklwpUNyBw== X-Received: by 2002:a05:6512:4002:b0:599:afa:3997 with SMTP id 2adb3069b0e04-59a17d08b75mr12785880e87.3.1767170489557; Wed, 31 Dec 2025 00:41:29 -0800 (PST) Received: from nuoska (87-100-249-247.bb.dnainternet.fi. [87.100.249.247]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-59a181beb5csm10666566e87.0.2025.12.31.00.41.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Dec 2025 00:41:29 -0800 (PST) From: Mikko Rapeli To: Nathan Chancellor , Nicolas Schier , Anders Roxell , linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Mikko Rapeli Subject: [PATCH v2 2/3] scripts: kconfig: merge_config.sh: use awk in checks too Date: Wed, 31 Dec 2025 10:40:49 +0200 Message-ID: <20251231084050.186874-2-mikko.rapeli@linaro.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251231084050.186874-1-mikko.rapeli@linaro.org> References: <20251230205549.GE4062669@ax162> <20251231084050.186874-1-mikko.rapeli@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Converting from shell/sed/grep loop to awk improves runtime checks of Yocto genericarm64 kernel config from 20 seconds to under 1 second. Also fix the tests to take into account: * kernel config lines with comments CONFIG_FOO=m # this is a comment * match "# CONFIG_FOO is not set" with "CONFIG_FOO=n" * match unset config value to "CONFIG_FOO=n" Cc: Anders Roxell Signed-off-by: Mikko Rapeli --- scripts/kconfig/merge_config.sh | 99 +++++++++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 11 deletions(-) v2: awk from ${AWK} v1: https://lore.kernel.org/linux-kbuild/20251229114447.45236-1-mikko.rapeli@linaro.org/T/#t diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh index 4cefe3cdfc2f..462c791cca12 100755 --- a/scripts/kconfig/merge_config.sh +++ b/scripts/kconfig/merge_config.sh @@ -286,16 +286,93 @@ fi # allnoconfig: Fills in any missing symbols with # CONFIG_* is not set make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET +# Check all specified config values took effect (might have missed-dependency issues) +if ! "${AWK}" -v prefix="$CONFIG_PREFIX" \ + -v warnoverride="$WARNOVERRIDE" \ + -v strict="$STRICT" \ + -v warnredun="$WARNREDUN" ' +BEGIN { + strict_violated = 0 + cfg_regex = "^" prefix "[a-zA-Z0-9_]+" + notset_regex = "^# " prefix "[a-zA-Z0-9_]+ is not set$" +} -# Check all specified config values took (might have missed-dependency issues) -for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do +# Extract config name from a line, returns "" if not a config line +function get_cfg(line) { + if (match(line, cfg_regex)) { + return substr(line, RSTART, RLENGTH) + } else if (match(line, notset_regex)) { + # Extract CONFIG_FOO from "# CONFIG_FOO is not set" + sub(/^# /, "", line) + sub(/ is not set$/, "", line) + return line + } + return "" +} - REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE) - ACTUAL_VAL=$(grep -w -e "$CFG" "$KCONFIG_CONFIG" || true) - if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then - echo "Value requested for $CFG not in final .config" - echo "Requested value: $REQUESTED_VAL" - echo "Actual value: $ACTUAL_VAL" - echo "" - fi -done +# Normalize: strip trailing comments, convert "is not set" to "=n" +function normalize(line) { + if (line == "") return "" + sub(/[[:space:]]+#.*/, "", line) + if (line ~ / is not set$/) { + sub(/^# /, "", line) + sub(/ is not set$/, "=n", line) + } + return line +} + +function warn_mismatch(cfg, merged, final) { + if (warnredun == "true") return + if (final == "" && !(merged ~ /=n$/)) { + print "WARNING: " cfg " not in final config but set in merged config to: " merged > "/dev/stderr" + } else if (final == "" && merged ~ /=n$/) { + # not set is the same as =n, pass + } else if (merged == "" && final != "") { + print "WARNING: " cfg " not in merged config but added in final config: " final > "/dev/stderr" + } else { + print "WARNING: " cfg " differs:" > "/dev/stderr" + print "Merged value: " merged > "/dev/stderr" + print "Final value: " final > "/dev/stderr" + } +} + +# First pass: read effective config file, store all lines +FILENAME == ARGV[1] { + cfg = get_cfg($0) + if (cfg != "") { + config_cfg[cfg] = $0 + } + next +} + +# Second pass: process merged config and compare against effective config +{ + cfg = get_cfg($0) + if (cfg == "") next + + merged_val = normalize($0) + final_val = normalize(config_cfg[cfg]) + + if (merged_val == final_val) next + + warn_mismatch(cfg, merged_val, final_val) + + if (strict == "true") { + strict_violated = 1 + } +} + +END { + if (strict_violated) { + exit 1 + } +}' \ +"$KCONFIG_CONFIG" "$TMP_FILE"; then + # awk exited non-zero, strict mode was violated + STRICT_MODE_VIOLATED=true +fi + +if [ "$STRICT" == "true" ] && [ "$STRICT_MODE_VIOLATED" == "true" ]; then + echo "Requested and effective config differ" + exit 1 +fi -- 2.34.1