diff --git a/Makefile b/Makefile index 1cf15cefd12..fffc188f9ac 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) @@ -938,6 +939,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} 1>&2 + 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 00000000000..28c8fe98bac --- /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-Za-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