From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Mon, 12 Sep 2016 23:20:02 -0600 Subject: [U-Boot] [PATCH v2 2/2] Makefile: Give a build error if ad-hoc CONFIG options are added In-Reply-To: <1473744002-16018-1-git-send-email-sjg@chromium.org> References: <1473744002-16018-1-git-send-email-sjg@chromium.org> Message-ID: <1473744002-16018-3-git-send-email-sjg@chromium.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de New CONFIG options should be added via Kconfig. To help prevent new ad-hoc CONFIGs from being added, give a build error when these are detected. Signed-off-by: Simon Glass Acked-by: Stephen Warren Tested-by: Stephen Warren Series-to: u-boot --- Changes in v2: - Rebase to mainline - Fix scripts so that there are no errors - Add the 'build-whitelist.sh' script to the tree Makefile | 10 ++++++++- scripts/check-config.sh | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100755 scripts/check-config.sh diff --git a/Makefile b/Makefile index 03329e7..466e0a7 100644 --- a/Makefile +++ b/Makefile @@ -740,7 +740,8 @@ DO_STATIC_RELA = endif # Always append ALL so that arch config.mk's can add custom ones -ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map u-boot.cfg binary_size_check +ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map u-boot.cfg \ + binary_size_check no_new_adhoc_configs_check ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin ifeq ($(CONFIG_SPL_FSL_PBL),y) @@ -946,6 +947,13 @@ u-boot.dis: u-boot u-boot.cfg: include/config.h FORCE $(call if_changed,cpp_cfg) +# Check that this build does not use CONFIG options that we don't know about +# unless they are in Kconfig. All the existing CONFIG options are whitelisted, +# so new ones should not be added. +no_new_adhoc_configs_check: u-boot.cfg FORCE + $(srctree)/scripts/check-config.sh $< \ + $(srctree)/scripts/config_whitelist.txt ${srctree} + ifdef CONFIG_TPL SPL_PAYLOAD := tpl/u-boot-with-tpl.bin else diff --git a/scripts/check-config.sh b/scripts/check-config.sh new file mode 100755 index 0000000..2810e21 --- /dev/null +++ b/scripts/check-config.sh @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright (c) 2016 Google, Inc +# Written by Simon Glass +# +# Check that the u-boot.cfg file provided does not introduce any new +# ad-hoc CONFIG options +# +# You can generate the list of current ad-hoc CONFIG options (those which are +# not in Kconfig) with this command: +# +# export LC_ALL=C LC_COLLATE=C +# git grep CONFIG_ |tr ' \t' '\n\n' |sed -n 's/^\(CONFIG_[A-Z0-9_]*\).*/\1/p' \ +# |sort |uniq >scripts/config_whitelist.txt; +# unset LC_ALL LC_COLLATE + +# Usage +# check-config.sh +# +# For example: +# scripts/check-config.sh b/chromebook_link/u-boot.cfg kconfig_whitelist.txt . + +path="$1" +whitelist="$2" +srctree="$3" + +# Temporary files +configs="${path}.configs" +suspects="${path}.suspects" +ok="${path}.ok" +new_adhoc="${path}.adhoc" + +export LC_ALL=C +export LC_COLLATE=C + +cat ${path} |sed -n 's/^#define \(CONFIG_[A-Z0-9_]*\).*/\1/p' |sort |uniq \ + >${configs} + +comm -23 ${configs} ${whitelist} > ${suspects} + +cat `find ${srctree} -name Kconfig` |sed -n \ + -e 's/^config \([A-Za-z0-9_]*\).*$/CONFIG_\1/p' \ + -e 's/^menuconfig \([A-Za-z0-9_]*\).*$/CONFIG_\1/p' |sort |uniq > ${ok} +comm -23 ${suspects} ${ok} >${new_adhoc} +if [ -s ${new_adhoc} ]; then + echo "Error: You must add new CONFIG options using Kconfig" + echo "The following new ad-hoc CONFIG options were detected:" + cat ${new_adhoc} + echo + echo "Please add these via Kconfig instead. Find a suitable Kconfig" + echo "file and add a 'config' or 'menuconfig' option." + # Don't delete the temporary files in case they are useful + exit 1 +else + rm ${suspects} ${ok} ${new_adhoc} +fi -- 2.8.0.rc3.226.g39d4020