diff options
-rw-r--r-- | Makefile.rules | 4 | ||||
-rwxr-xr-x | util/build_allowed.sh | 83 | ||||
-rwxr-xr-x | util/check_allowed.sh | 99 | ||||
-rw-r--r-- | util/config_allowed.txt | 47 | ||||
-rwxr-xr-x | util/kconfig_check.py | 16 |
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) |