summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2021-05-27 15:49:15 -0600
committerCommit Bot <commit-bot@chromium.org>2022-01-28 23:56:08 +0000
commit5b4c6473a341ebbd88463c908b39bb2820e5c43b (patch)
treee6e5c87b9164cbbec214d389fa8752977d0c89d0
parentd680d3972ab9c3060165ef8a39445ff2e132efd1 (diff)
downloadchrome-ec-5b4c6473a341ebbd88463c908b39bb2820e5c43b.tar.gz
Makefile: Switch to the Python script for CONFIG checking
Now that the Python script seems to do what we need, switch over to use that for checking for allowed ad-hoc CONFIGs. Sadly we need a work-around for the very old Python 3 version used in the chroot. The new script is better at finding Kconfig options, so this allows some reductions in the config_allowed.txt file. Delete the now-unused shell scripts. BUG=b:181323955 BRANCH=none TEST=python3 util/test_kconfig_check.py Signed-off-by: Simon Glass <sjg@chromium.org> Change-Id: I2dafc9dfe9d9020638f4e49b5c5ee0fc0b10000b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2923233 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
-rw-r--r--Makefile.rules4
-rwxr-xr-xutil/build_allowed.sh83
-rwxr-xr-xutil/check_allowed.sh99
-rw-r--r--util/config_allowed.txt47
-rwxr-xr-xutil/kconfig_check.py16
5 files changed, 17 insertions, 232 deletions
diff --git a/Makefile.rules b/Makefile.rules
index 9808fa712d..6e15b67860 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -230,7 +230,9 @@ print-boards:
$(sort $(boards)))
ifeq ($(ALLOW_CONFIG),)
-cmd_check_allowed = ./util/check_allowed.sh ${config} util/config_allowed.txt .
+cmd_check_allowed = ./util/kconfig_check.py -c ${config} \
+ -a util/config_allowed.txt -p PLATFORM_EC_ -s zephyr/ \
+ -I $(abspath ../../../src/third_party/zephyr/main) check
else
cmd_check_allowed = true
endif
diff --git a/util/build_allowed.sh b/util/build_allowed.sh
deleted file mode 100755
index 9aa769a726..0000000000
--- a/util/build_allowed.sh
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2021 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Taken from U-Boot and modified.
-
-# This grubby little script creates the list of allowed configurations. This
-# file contains all the config options which are allowed to be used outside
-# Kconfig. Please do not add things to the list. Instead, add your new option to
-# Kconfig.
-#
-# Usage:
-# build_allowed.sh [-u]
-#
-# -u : Update the existing allowed file
-
-export LC_ALL=C LC_COLLATE=C
-
-# Current list of allowed ad-hoc CONFIGs
-allowed=util/config_allowed.txt
-
-[ "$1" == "-u" ] && update=1
-
-tmp=$(mktemp -d)
-kconfigs="${tmp}/kconfigs"
-
-#
-# Look for the CONFIG options, excluding those in Kconfig and defconfig files.
-#
-git grep CONFIG_ | \
- grep -E -vi "(Kconfig:|defconfig:|README|\.py|\.pl:)" \
- | tr ' \t' '\n' \
- | sed -n 's/^\(CONFIG_[A-Za-z0-9_]*\).*/\1/p' \
- | sort | uniq >"${tmp}/allowed.tmp1";
-
-# We need a list of the valid Kconfig options to exclude these from the allowed
-# list.
-find . -type f -name "Kconfig*" -exec cat {} \; | sed -n -e \
- 's/^\s*\(config\|menuconfig\) *\([A-Za-z0-9_]*\)$/CONFIG_\2/p' \
- | sort | uniq > "${kconfigs}"
-
-# Most Kconfigs follow the pattern of CONFIG_PLATFORM_EC_*. Strip PLATFORM_EC_
-# from the config name to match the cros-ec namespace.
-sed -e 's/^CONFIG_PLATFORM_EC_/CONFIG_/p' "${kconfigs}" | sort | uniq \
- > "${tmp}/allowed.tmp2"
-
-# Use only the options that are present in the first file but not the second.
-# These comprise new ad-hoc CONFIG options.
-comm -23 "${tmp}/allowed.tmp1" "${tmp}/allowed.tmp2" \
- | sort | uniq >"${tmp}/allowed.tmp3"
-
-# If ${allowed} already exists, take the intersection of the current
-# list and the new one. We do not want to increase the allowed options.
-if [ -r "${allowed}" ]; then
- comm -12 "${tmp}/allowed.tmp3" "${allowed}" > "${tmp}/allowed.tmp4"
-
- # Find any ad-hoc configs that now have Kconfig options
- comm -13 "${tmp}/allowed.tmp4" "${allowed}" > "${tmp}/allowed.tmp5"
- if [ -n "${update}" ]; then
- echo >&2 "Removing these CONFIG options from the allowed list:"
- comm -13 "${tmp}/allowed.tmp4" "${allowed}"
- mv "${tmp}/allowed.tmp4" "${allowed}"
- elif [ -s "${tmp}/allowed.tmp5" ]; then
- echo >&2 "The following options are now in Kconfig:"
- cat >&2 "${tmp}/allowed.tmp5"
- echo >&2
- echo >&2 "Please run this to update the list of allowed ad-hoc"
- echo >&2 "CONFIGs and include this update in your CL:"
- echo >&2
- echo -e >&2 "\t./util/build_allowed.sh -u"
- exit 1
- fi
-else
- # If there is no file yet, add one. This allows it to be regenerated
- # from scratch if needed.
- mv "${tmp}/allowed.tmp3" "${allowed}"
-fi
-
-rm -rf "${tmp}"
-
-unset LC_ALL LC_COLLATE
diff --git a/util/check_allowed.sh b/util/check_allowed.sh
deleted file mode 100755
index 5212a55a14..0000000000
--- a/util/check_allowed.sh
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2021 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# Taken from U-Boot and modified.
-#
-# Check that the .config file provided does not introduce any new ad-hoc CONFIG
-# options
-#
-# Use util/build_allowed.sh to generate the list of current ad-hoc
-# CONFIG options (those which are not in Kconfig).
-
-# Usage
-# check_allowed.sh <path to .config> <path to allow file> <source dir>
-#
-# For example:
-# scripts/check_allowed.sh build/volteer/.config config_allowed.txt .
-
-set -e
-set -u
-
-PROG_NAME="${0##*/}"
-
-usage() {
- echo >&2 "Check that a build does not introduce new ad-hoc CONFIGs"
- echo >&2 "Usage:"
- echo -e >&2 "\t${PROG_NAME} <.config file> <allow file> <source dir>"
- exit 1
-}
-
-die() {
- echo >&2 "$1"
- exit 2
-}
-
-[ $# -ge 3 ] || usage
-
-config="$1"
-allow="$2"
-srctree="$3"
-
-tmp=$(mktemp -d)
-
-# Temporary files
-new_configs="${tmp}/configs"
-suspects="${tmp}/suspects"
-kconfigs="${tmp}/kconfigs"
-ok="${tmp}/ok"
-new_adhoc="${tmp}/adhoc"
-
-export LC_ALL=C LC_COLLATE=C
-
-# Get a sorted list of CONFIG options in the .config file
-sed -n 's/^\(CONFIG_[A-Za-z0-9_]*\).*/\1/p' "${config}" | sort | uniq \
- >"${new_configs}"
-
-# Find any not mentioned in the allowed file
-comm -23 --check-order "${new_configs}" "${allow}" > "${suspects}" || \
- die "${allow} must be sorted"
-
-# Find all the Kconfig options so far defined
-find "${srctree}" -type f -name "Kconfig*" -exec cat {} \; | sed -n -e \
- 's/^\s*\(config\|menuconfig\) *\([A-Za-z0-9_]*\)$/CONFIG_\2/p' \
- | sort | uniq > "${kconfigs}"
-
-# Most Kconfigs follow the pattern of CONFIG_PLATFORM_EC_*. Strip PLATFORM_EC_
-# from the config name to match the cros-ec namespace.
-sed -e 's/^CONFIG_PLATFORM_EC_/CONFIG_/p' "${kconfigs}" | sort | uniq > "${ok}"
-
-# Complain about any new ad-hoc CONFIGs
-comm -23 "${suspects}" "${ok}" >"${new_adhoc}"
-if [ -s "${new_adhoc}" ]; then
- echo >&2 "Error: The EC is in the process of migrating to Zephyr."
- echo -e >&2 "\tZephyr uses Kconfig for configuration rather than"
- echo -e >&2 "\tad-hoc #defines."
- echo -e >&2 "\tAny new EC CONFIG options must ALSO be added to Zephyr"
- echo -e >&2 "\tso that new functionality is available in Zephyr also."
- echo -e >&2 "\tThe following new ad-hoc CONFIG options were detected:"
- echo >&2
- cat >&2 "${new_adhoc}"
- echo >&2
- echo >&2 "Please add these via Kconfig instead. Find a suitable Kconfig"
- echo >&2 "file in zephyr/ and add a 'config' or 'menuconfig' option."
- echo >&2 "Also see details in http://issuetracker.google.com/181253613"
- echo >&2
- echo >&2 "To temporarily disable this, use: ALLOW_CONFIG=1 make ..."
- rm -rf "${tmp}"
- exit 1
-else
- # If we are running in a git repo, check if we can remove some things
- # from the allowed file
- if git status 2>/dev/null; then
- ./util/build_allowed.sh
- fi
-fi
-
-rm -rf "${tmp}"
diff --git a/util/config_allowed.txt b/util/config_allowed.txt
index 16ad96d7b5..3488b27653 100644
--- a/util/config_allowed.txt
+++ b/util/config_allowed.txt
@@ -1,4 +1,3 @@
-CONFIG_
CONFIG_8042_AUX
CONFIG_ACCELGYRO_BMI160_INT2_OUTPUT
CONFIG_ACCELGYRO_BMI160_INT_EVENT
@@ -59,11 +58,8 @@ CONFIG_AON_RAM_BASE
CONFIG_AON_RAM_SIZE
CONFIG_AP_HANG_DETECT
CONFIG_AP_WARM_RESET_INTERRUPT
-CONFIG_ARCH_POSIX
-CONFIG_ARM64
CONFIG_ARMV7M_CACHE
CONFIG_ASSEMBLY_MULA32
-CONFIG_AUDIO_CODEC
CONFIG_AUDIO_CODEC_
CONFIG_AUDIO_CODEC_CAP_WOV_AUDIO_SHM
CONFIG_AUDIO_CODEC_CAP_WOV_LANG_SHM
@@ -104,7 +100,6 @@ CONFIG_BATTERY_RETRY_NACK
CONFIG_BATTERY_VENDOR_PARAM
CONFIG_BATT_HOST_FULL_FACTOR
CONFIG_BATT_HOST_SHUTDOWN_PERCENTAGE
-CONFIG_BBRAM_INIT_PRIORITY
CONFIG_BC12_DETECT_DATA_ROLE_TRIGGER
CONFIG_BC12_DETECT_MAX14637
CONFIG_BC12_DETECT_PI3USB9281
@@ -218,7 +213,6 @@ CONFIG_CHIP_MEMORY_REGIONS
CONFIG_CHIP_PANIC_BACKUP
CONFIG_CHIP_PRE_INIT
CONFIG_CHIP_UNCACHED_REGION
-CONFIG_CLOCK_CONTROL_EMUL_LOG_LEVEL
CONFIG_CLOCK_CRYSTAL
CONFIG_CLOCK_SRC_EXTERNAL
CONFIG_CMD_
@@ -345,8 +339,6 @@ CONFIG_CONSOLE_HISTORY
CONFIG_CONSOLE_INPUT_LINE_SIZE
CONFIG_CONSOLE_UART
CONFIG_CONSOLE_VERBOSE
-CONFIG_COVERAGE
-CONFIG_CPU_CORTEX_M
CONFIG_CPU_PROCHOT_ACTIVE_LOW
CONFIG_CRC8
CONFIG_CROS_EC_RO_MEM_SIZE
@@ -355,7 +347,6 @@ CONFIG_CTN730
CONFIG_CTS_TASK_LIST
CONFIG_CURVE25519
CONFIG_CUSTOM_FAN_CONTROL
-CONFIG_DAC
CONFIG_DATA_RAM_SIZE
CONFIG_DEBUG_BRINGUP
CONFIG_DEBUG_DISABLE_WRITE_BUFFER
@@ -370,7 +361,6 @@ CONFIG_DELAY_DSW_PWROK_TO_PWRBTN
CONFIG_DETACHABLE_BASE
CONFIG_DEVICE_EVENT
CONFIG_DEVICE_STATE
-CONFIG_DMA
CONFIG_DMA_DEFAULT_HANDLERS
CONFIG_DMA_HELP
CONFIG_DMA_PAGING
@@ -393,9 +383,7 @@ CONFIG_EC_PROTECTED_STORAGE_OFF
CONFIG_EC_PROTECTED_STORAGE_SIZE
CONFIG_EC_WRITABLE_STORAGE_OFF
CONFIG_EC_WRITABLE_STORAGE_SIZE
-CONFIG_EEPROM
CONFIG_ENABLE_JTAG_SELECTION
-CONFIG_ESPI_LOG_LEVEL
CONFIG_EVENT_LOG_SIZE
CONFIG_EXPERIMENTAL_CONSOLE
CONFIG_EXTENDED_VERSION_INFO
@@ -463,8 +451,6 @@ CONFIG_GESTURE_TAP_SENSOR
CONFIG_GESTURE_TAP_THRES_MG
CONFIG_GMR_TABLET_MODE_CUSTOM
CONFIG_GPIO_GET_EXTENDED
-CONFIG_GPIO_LOG_LEVEL
-CONFIG_GPIO_NCT38XX
CONFIG_GPIO_POWER_DOWN
CONFIG_GPOI_EXTENDED
CONFIG_GYRO_L3GD20H
@@ -519,20 +505,13 @@ CONFIG_HOSYCMD_BATTERY_V2
CONFIG_HWTIMER_64BIT
CONFIG_HW_CRC
CONFIG_HW_SPECIFIC_UDELAY
-CONFIG_I2C_BITBANG
CONFIG_I2C_BUS_MAY_BE_UNPOWERED
CONFIG_I2C_CHIP_MAX_TRANSFER_SIZE
CONFIG_I2C_CONTROLLER
-CONFIG_I2C_EMUL
CONFIG_I2C_EXTRA_PACKET_SIZE
CONFIG_I2C_HID_TOUCHPAD
-CONFIG_I2C_ITE_IT8XXX2
-CONFIG_I2C_LOG_LEVEL
-CONFIG_I2C_LOG_LEVEL_DBG
-CONFIG_I2C_MOCK_LOG_LEVEL
CONFIG_I2C_MULTI_PORT_CONTROLLER
CONFIG_I2C_NACK_RETRY_COUNT
-CONFIG_I2C_NPCX
CONFIG_I2C_PERIPHERAL
CONFIG_I2C_SCL_GATE_ADDR
CONFIG_I2C_SCL_GATE_ADDR_FLAGS
@@ -541,7 +520,6 @@ CONFIG_I2C_SCL_GATE_PORT
CONFIG_I2C_UPDATE_IF_CHANGED
CONFIG_I2C_XFER_BOARD_CALLBACK
CONFIG_I2C_XFER_LARGE_TRANSFER
-CONFIG_INA219
CONFIG_INA231
CONFIG_INA3221
CONFIG_INDUCTIVE_CHARGING
@@ -577,7 +555,6 @@ CONFIG_ISH_PM_D0I3
CONFIG_ISH_PM_D3
CONFIG_ISH_PM_RESET_PREP
CONFIG_ISH_UART_0
-CONFIG_ISL923X_EMUL_LOG_LEVEL
CONFIG_ISL9241_SWITCHING_FREQ
CONFIG_IT83XX_ENABLE_MOUSE_DEVICE
CONFIG_IT83XX_FLASH_CLOCK_48MHZ
@@ -589,10 +566,6 @@ CONFIG_IT83XX_TUNE_CC_PHY
CONFIG_IT83XX_VCC_1P8V
CONFIG_IT83XX_VCC_3P3V
CONFIG_ITE_FLASH_SUPPORT
-CONFIG_ITE_IT8XXX2_INTC
-CONFIG_KERNEL_INIT_PRIORITY_DEFAULT
-CONFIG_KERNEL_INIT_PRIORITY_DEVICE
-CONFIG_KERNEL_INIT_PRIORITY_OBJECTS
CONFIG_KEYBOARD_ASSISTANT_KEY
CONFIG_KEYBOARD_BACKLIGHT
CONFIG_KEYBOARD_BOOT_KEYS
@@ -634,14 +607,11 @@ CONFIG_LID_ANGLE_TABLET_MODE
CONFIG_LID_SWITCH_GPIO_LIST
CONFIG_LIGHTBAR_POWER_RAILS
CONFIG_LIGHTBAR_TAP_DIM_LAST_SEGMENT
-CONFIG_LIS2DW12_EMUL_LOG_LEVEL
CONFIG_LLSR_TEST
CONFIG_LN9310
-CONFIG_LN9310_EMUL_LOG_LEVEL
CONFIG_LOADER_MEM_OFF
CONFIG_LOADER_SIZE
CONFIG_LOADER_STORAGE_OFF
-CONFIG_LOG
CONFIG_LOG_MAX_LEVEL
CONFIG_LOW_POWER_IDLE_LIMITED
CONFIG_LOW_POWER_S0
@@ -719,13 +689,10 @@ CONFIG_PANIC_DRAM_SIZE
CONFIG_PANIC_STRIP_GPR
CONFIG_PD_RETRY_COUNT
CONFIG_PD_USE_DAC_AS_REF
-CONFIG_PECI
CONFIG_PECI_COMMON
CONFIG_PECI_TJMAX
CONFIG_PERIPHERAL_CHARGER
-CONFIG_PINMUX_INIT_PRIORITY
CONFIG_PLATFORM_EC_
-CONFIG_PM
CONFIG_PMIC_FW_LONG_PRESS_TIMER
CONFIG_PMU_HARD_RESET
CONFIG_POLLING_UART
@@ -749,7 +716,6 @@ CONFIG_PRINTF_LEGACY_LI_FORMAT
CONFIG_PRINT_IN_INT
CONFIG_PROGRAM_MEMORY_BASE
CONFIG_PROGRAM_MEMORY_BASE_LOAD
-CONFIG_PS2
CONFIG_PSTORE
CONFIG_PVD
CONFIG_PWM_INPUT_LFCLK
@@ -831,18 +797,11 @@ CONFIG_SHELL_HELP
CONFIG_SIMULATED_BUTTON
CONFIG_SLEEP_TIMEOUT_MS
CONFIG_SMBUS
-CONFIG_SN5S330_EMUL_LOG_LEVEL
CONFIG_SOC
-CONFIG_SOC_FAMILY_NPCX
-CONFIG_SOC_FAMILY_RISCV_ITE
-CONFIG_SOC_IT8XXX2
-CONFIG_SOC_POSIX
CONFIG_SOC_POWER_MANAGEMENT_TRACE
-CONFIG_SOC_SERIES_NPCX7
CONFIG_SOFTWARE_CLZ
CONFIG_SOFTWARE_CTZ
CONFIG_SOMETHING
-CONFIG_SPI
CONFIG_SPI_ACCEL_PORT
CONFIG_SPI_CONTROLLER
CONFIG_SPI_CS_GPIO
@@ -859,10 +818,8 @@ CONFIG_SPI_FLASH_W25Q80
CONFIG_SPI_FLASH_W25X40
CONFIG_SPI_FP_PORT
CONFIG_SPI_HALFDUPLEX
-CONFIG_SPI_NOR
CONFIG_SPI_NOR_BLOCK_ERASE
CONFIG_SPI_NOR_DEBUG
-CONFIG_SPI_NOR_INIT_PRIORITY
CONFIG_SPI_NOR_MAX_MESSAGE_SIZE
CONFIG_SPI_NOR_MAX_READ_SIZE
CONFIG_SPI_NOR_MAX_WRITE_SIZE
@@ -906,7 +863,6 @@ CONFIG_SYV682X_HV_ILIM
CONFIG_TASK_LIST
CONFIG_TASK_PROFILING
CONFIG_TASK_RESET_LIST
-CONFIG_TCPCI_EMUL_LOG_LEVEL
CONFIG_TCPC_I2C_BASE_ADDR
CONFIG_TCPC_I2C_BASE_ADDR_FLAGS
CONFIG_TCS_USE_LUX_TABLE
@@ -950,7 +906,6 @@ CONFIG_TOUCHPAD_VIRTUAL_SIZE
CONFIG_TRICKLE_CHARGING
CONFIG_TUSB544_EQ_BY_REGISTER
CONFIG_UART_BAUD_RATE
-CONFIG_UART_CONSOLE
CONFIG_UART_HOST
CONFIG_UART_HOST_COMMAND_BAUD_RATE
CONFIG_UART_HOST_COMMAND_HW
@@ -1114,7 +1069,6 @@ CONFIG_VALUE
CONFIG_VBOOT_EFS
CONFIG_WATCHDOG_HELP
CONFIG_WATCHDOG_MAX_RETRIES
-CONFIG_WDT_ITE_WARNING_LEADING_TIME_MS
CONFIG_WEBUSB_URL
CONFIG_WIRELESS
CONFIG_WIRELESS_CHARGER_P9221_R7
@@ -1128,5 +1082,4 @@ CONFIG_WP_STORAGE_OFF
CONFIG_WP_STORAGE_SIZE
CONFIG_X86_64
CONFIG_ZEPHYR
-CONFIG_ZTEST
CONFIG_xxx
diff --git a/util/kconfig_check.py b/util/kconfig_check.py
index 93f3afd53c..30a798b8f4 100755
--- a/util/kconfig_check.py
+++ b/util/kconfig_check.py
@@ -70,7 +70,12 @@ a corresponding Kconfig option for Zephyr'''
parser.add_argument('-s', '--srctree', type=str, default='zephyr/',
help='Path to source tree to look for Kconfigs')
- subparsers = parser.add_subparsers(dest='cmd', required=True)
+ # TODO(sjg@chromium.org): The chroot uses a very old Python. Once it moves
+ # to 3.7 or later we can use this instead:
+ # subparsers = parser.add_subparsers(dest='cmd', required=True)
+ subparsers = parser.add_subparsers(dest='cmd')
+ subparsers.required = True
+
subparsers.add_parser('check', help='Check for new ad-hoc CONFIGs')
return parser.parse_args(argv)
@@ -269,7 +274,14 @@ class KconfigCheck:
current state of the Kconfig options
"""
configs = self.read_configs(configs_file, use_defines)
- kconfigs = self.scan_kconfigs(srcdir, prefix, search_paths)
+ try:
+ kconfigs = self.scan_kconfigs(srcdir, prefix, search_paths)
+ except kconfiglib.KconfigError:
+ # If we don't actually have access to the full Kconfig then we may
+ # get an error. Fall back to using manual methods.
+ kconfigs = self.scan_kconfigs(srcdir, prefix, search_paths,
+ try_kconfiglib=False)
+
allowed = self.read_allowed(allowed_file)
new_adhoc = self.find_new_adhoc(configs, kconfigs, allowed)
unneeded_adhoc = self.find_unneeded_adhoc(kconfigs, allowed)