From a9ba0acb2abbfc1cd8272f99d655fbc9cda55349 Mon Sep 17 00:00:00 2001 From: Peter van der Perk Date: Sun, 31 Mar 2024 21:32:17 +0200 Subject: [PATCH] cmake: all allyes target for better CI coverage Currently only v6x-rt and SITL are supported But targets with label allyes will try to enable all kconfig symbols --- Tools/kconfig/allyesconfig.py | 126 +++++++++++ boards/px4/fmu-v6xrt/allyes.px4board | 1 + .../nuttx-config/scripts/allyes-script.ld | 197 ++++++++++++++++++ boards/px4/sitl/allyes.px4board | 0 cmake/kconfig.cmake | 12 +- 5 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 Tools/kconfig/allyesconfig.py create mode 100644 boards/px4/fmu-v6xrt/allyes.px4board create mode 100644 boards/px4/fmu-v6xrt/nuttx-config/scripts/allyes-script.ld create mode 100644 boards/px4/sitl/allyes.px4board diff --git a/Tools/kconfig/allyesconfig.py b/Tools/kconfig/allyesconfig.py new file mode 100644 index 0000000000..889b659195 --- /dev/null +++ b/Tools/kconfig/allyesconfig.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2018-2019, Ulf Magnusson +# SPDX-License-Identifier: ISC + +""" +Writes a configuration file where as many symbols as possible are set to 'y'. + +The default output filename is '.config'. A different filename can be passed +in the KCONFIG_CONFIG environment variable. + +Usage for the Linux kernel: + + $ make [ARCH=] scriptconfig SCRIPT=Kconfiglib/allyesconfig.py +""" +import kconfiglib +import os + + +exception_list = [ + 'DRIVERS_BOOTLOADERS', # Only used for bootloader target + 'MODULES_PX4IOFIRMWARE', # Only needed for PX4IO firmware itself, maybe fix through dependencies + 'BOARD_LTO', # Experimental + 'BOARD_TESTING', # Don't build test suite + 'BOARD_CONSTRAINED_FLASH', # only used to reduce flash size + 'BOARD_NO_HELP', # only used to reduce flash size + 'BOARD_CONSTRAINED_MEMORY', # only used to reduce flash size + 'BOARD_EXTERNAL_METADATA', # only used to reduce flash size + 'BOARD_CRYPTO', # Specialized use + 'BOARD_PROTECTED', # Experimental for MPU use + 'DRIVERS_LIGHTS_RGBLED_PWM', # Only on specific boards, needs dependency fixing + 'DRIVERS_LIGHTS_NEOPIXEL', # Only on specific boards, needs dependency fixing + 'DRIVERS_DISTANCE_SENSOR_LIGHTWARE_SF45_SERIAL', # Only on specific boards, needs dependency fixing + 'PARAM_PRIMARY', # Plainly broken + 'PARAM_REMOTE', # Plainly broken + 'DRIVERS_ACTUATORS_VOXL_ESC', # Dependency need fixing, requires VOXL_ESC_DEFAULT_XXX + 'DRIVERS_VOXL2_IO', # Dependency need fixing, requires VOXL2_IO_DEFAULT_XX + 'DRIVERS_BAROMETER_TCBP001TA', # Requires hardcoded PX4_SPI_BUS_BARO mapping + 'DRIVERS_DISTANCE_SENSOR_BROADCOM_AFBRS50', # Requires hardcoded PX4_SPI_BUS_BARO mapping + 'DRIVERS_DISTANCE_SENSOR_SRF05', # Requires hardcoded GPIO_ULTRASOUND + 'DRIVERS_PPS_CAPTURE', # Requires PPS GPIO config + 'DRIVERS_PWM_INPUT', # Requires PWM config + 'DRIVERS_TEST_PPM', # PIN config not portable + 'DRIVERS_TATTU_CAN', # Broken needs fixing + 'MODULES_REPLAY', # Fails on NuttX targets maybe force POSIX dependency? + 'SYSTEMCMDS_HIST', # This module can only be used on boards that enable BOARD_ENABLE_LOG_HISTORY + 'SYSTEMCMDS_GPIO', # PIN config not portable + 'SYSTEMCMDS_SHUTDOWN', # Needs dependency checking + 'EXAMPLES_DYN_HELLO', # NuttX doesn't support dynamic linking + 'SYSTEMCMDS_DYN', # NuttX doesn't support dynamic linking + 'DRIVERS_RPI_RC_IN', # RPI specific driver + 'SYSTEMCMDS_I2C_LAUNCHER', # undefined reference to `system', + 'MODULES_MUORB_APPS', # Weird QURT/Posix package doesn't work on x86 px4 sitl + 'MODULES_SIMULATION_SIMULATOR_SIH', # Causes compile errors +] + +exception_list_sitl = [ + 'DRIVERS_BAROMETER', # Fails I2C dependencies + 'COMMON_BAROMETERS', # Fails I2C dependencies + 'DRIVERS_ADC_BOARD_ADC', # Fails HW dependencies, I think this only works on NuttX + 'DRIVERS_CAMERA_CAPTURE', # GPIO config failure + 'DRIVERS_DSHOT', # No Posix driver, I think this only works on NuttX + 'DRIVERS_PWM_OUT', # No Posix driver, I think this only works on NuttX + 'COMMON', # Fails I2C dependencies + 'DRIVERS', # Fails I2C dependencies + 'SYSTEMCMDS_REBOOT', # Sitl can't reboot + 'MODULES_BATTERY_STATUS', # Sitl doesn't provide a power brick + 'SYSTEMCMDS_SERIAL_PASSTHRU', # Not supported in SITL + 'SYSTEMCMDS_SERIAL_TEST', # Not supported in SITL + 'SYSTEMCMDS_SD_STRESS', # Not supported in SITL + 'SYSTEMCMDS_SD_BENCH', # Not supported in SITL + 'SYSTEMCMDS_I2CDETECT', # Not supported in SITL + 'SYSTEMCMDS_DMESG', # Not supported in SITL + 'SYSTEMCMDS_USB_CONNECTED', # Not supported in SITL +] + +def main(): + kconf = kconfiglib.standard_kconfig(__doc__) + + + if 'BASE_DEFCONFIG' in os.environ: + kconf.load_config(os.environ['BASE_DEFCONFIG']) + + if 'MODEL' in os.environ: + if os.environ['MODEL'] == 'sitl': + for sym in kconf.unique_defined_syms: + if sym.name.startswith(tuple(exception_list_sitl)): + exception_list.append(sym.name) + + + # See allnoconfig.py + kconf.warn = False + + # Try to set all symbols to 'y'. Dependencies might truncate the value down + # later, but this will at least give the highest possible value. + # + # Assigning 0/1/2 to non-bool/tristate symbols has no effect (int/hex + # symbols still take a string, because they preserve formatting). + for sym in kconf.unique_defined_syms: + # Set choice symbols to 'm'. This value will be ignored for choices in + # 'y' mode (the "normal" mode), which will instead just get their + # default selection, but will set all symbols in m-mode choices to 'm', + # which is as high as they can go. + # + # Here's a convoluted example of how you might get an m-mode choice + # even during allyesconfig: + # + # choice + # tristate "weird choice" + # depends on m + if sym.name not in exception_list: + sym.set_value(1 if sym.choice else 2) + + # Set all choices to the highest possible mode + for choice in kconf.unique_choices: + choice.set_value(2) + + kconf.warn = True + + kconf.load_allconfig("allyes.config") + + print(kconf.write_config()) + + +if __name__ == "__main__": + main() diff --git a/boards/px4/fmu-v6xrt/allyes.px4board b/boards/px4/fmu-v6xrt/allyes.px4board new file mode 100644 index 0000000000..5f1bc9ab3d --- /dev/null +++ b/boards/px4/fmu-v6xrt/allyes.px4board @@ -0,0 +1 @@ +CONFIG_BOARD_LINKER_PREFIX="allyes" diff --git a/boards/px4/fmu-v6xrt/nuttx-config/scripts/allyes-script.ld b/boards/px4/fmu-v6xrt/nuttx-config/scripts/allyes-script.ld new file mode 100644 index 0000000000..2d4167f138 --- /dev/null +++ b/boards/px4/fmu-v6xrt/nuttx-config/scripts/allyes-script.ld @@ -0,0 +1,197 @@ +/**************************************************************************** + * boards/px4/fmu-v6xrt/nuttx-config/scripts/script.ld + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/* Specify the memory areas */ + + /* Reallocate + * Final Configuration is + * No DTCM + * 512k OCRAM M7 (FlexRAM) (2038:0000-203f:ffff) + * 128k OCRAMM7 FlexRAM ECC (2036:0000-2037:ffff) + * 64k OCRAM2 ECC parity (2035:0000-2035:ffff) + * 64k OCRAM1 ECC parity (2034:0000-2034:ffff) + * 512k FlexRAM OCRAM2 (202C:0000-2033:ffff) + * 512k FlexRAM OCRAM1 (2024:0000-202B:ffff) + * 256k System OCRAM M4 (2020:0000-2023:ffff) + */ + +MEMORY +{ + flash (rx) : ORIGIN = 0x30020000, LENGTH = 4M-128K /* We have 64M but we do not want to wait to program it all */ + sram (rwx) : ORIGIN = 0x20240000, LENGTH = 2M-256k-512k + itcm (rwx) : ORIGIN = 0x00000000, LENGTH = 256K /* TODO FlexRAM partition */ + dtcm (rwx) : ORIGIN = 0x20000000, LENGTH = 256K +} + +OUTPUT_ARCH(arm) +EXTERN(_vectors) +EXTERN(g_flash_config) +EXTERN(g_image_vector_table) +EXTERN(g_boot_data) +EXTERN(board_get_manifest) +EXTERN(_bootdelay_signature) +EXTERN(imxrt_flexspi_initialize) + +ENTRY(__start) + +SECTIONS +{ + /* Image Vector Table and Boot Data for booting from external flash */ + + .boot_hdr : ALIGN(4) + { + FILL(0xff) + . = 0x400 ; + __boot_hdr_start__ = ABSOLUTE(.) ; + KEEP(*(.boot_hdr.conf)) + . = 0x1000 ; + KEEP(*(.boot_hdr.ivt)) + . = 0x1020 ; + KEEP(*(.boot_hdr.boot_data)) + . = 0x1030 ; + KEEP(*(.boot_hdr.dcd_data)) + __boot_hdr_end__ = ABSOLUTE(.) ; + . = 0x2000 ; + } >flash + + .vectors : + { + KEEP(*(.vectors)) + *(.text .text.__start) + } >flash + + .itcmfunc : + { + . = ALIGN(8); + _sitcmfuncs = ABSOLUTE(.); + FILL(0xFF) + . = 0x40 ; + INCLUDE "itcm_static_functions.ld" + . = ALIGN(8); + _eitcmfuncs = ABSOLUTE(.); + } > itcm AT > flash + + _fitcmfuncs = LOADADDR(.itcmfunc); + + /* The RAM vector table (if present) should lie at the beginning of SRAM */ + + .ram_vectors (COPY) : { + *(.ram_vectors) + } > dtcm + + .text : ALIGN(4) + { + _stext = ABSOLUTE(.); + *(.vectors) + . = ALIGN(32); + /* + This signature provides the bootloader with a way to delay booting + */ + _bootdelay_signature = ABSOLUTE(.); + FILL(0xffecc2925d7d05c5) + . += 8; + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.got) + *(.gcc_except_table) + *(.gnu.linkonce.r.*) + . = ALIGN(4096); + _etext = ABSOLUTE(.); + _srodata = ABSOLUTE(.); + *(.rodata .rodata.*) + . = ALIGN(4096); + _erodata = ABSOLUTE(.); + } > flash + + .init_section : + { + _sinit = ABSOLUTE(.); + KEEP(*(.init_array .init_array.*)) + _einit = ABSOLUTE(.); + } > flash + + .ARM.extab : + { + *(.ARM.extab*) + } > flash + + .ARM.exidx : + { + __exidx_start = ABSOLUTE(.); + *(.ARM.exidx*) + __exidx_end = ABSOLUTE(.); + } > flash + + _eronly = ABSOLUTE(.); + + .data : + { + _sdata = ABSOLUTE(.); + *(.data .data.*) + *(.gnu.linkonce.d.*) + CONSTRUCTORS + . = ALIGN(4); + _edata = ABSOLUTE(.); + } > sram AT > flash + + .ramfunc ALIGN(4): + { + _sramfuncs = ABSOLUTE(.); + *(.ramfunc .ramfunc.*) + _eramfuncs = ABSOLUTE(.); + } > sram AT > flash + + _framfuncs = LOADADDR(.ramfunc); + + .bss : + { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(4); + _ebss = ABSOLUTE(.); + } > sram + + /* Stabs debugging sections. */ + + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } + + _boot_loadaddr = ORIGIN(flash); + _boot_size = LENGTH(flash); + _ram_size = LENGTH(sram); + _sdtcm = ORIGIN(dtcm); + _edtcm = ORIGIN(dtcm) + LENGTH(dtcm); +} diff --git a/boards/px4/sitl/allyes.px4board b/boards/px4/sitl/allyes.px4board new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cmake/kconfig.cmake b/cmake/kconfig.cmake index eb418bf6cc..7eaaa00d67 100644 --- a/cmake/kconfig.cmake +++ b/cmake/kconfig.cmake @@ -25,6 +25,7 @@ set(COMMON_KCONFIG_ENV_SETTINGS TOOLCHAIN=${CMAKE_TOOLCHAIN_FILE} ARCHITECTURE=${CMAKE_SYSTEM_PROCESSOR} ROMFSROOT=${config_romfs_root} + BASE_DEFCONFIG=${BOARD_CONFIG} ) set(config_user_list) @@ -52,6 +53,15 @@ if(EXISTS ${BOARD_DEFCONFIG}) ) endif() + if(${LABEL} MATCHES "allyes") + message(AUTHOR_WARNING "allyes build: allyes is for CI coverage and not for use in production") + execute_process( + COMMAND ${CMAKE_COMMAND} -E env ${COMMON_KCONFIG_ENV_SETTINGS} + ${PYTHON_EXECUTABLE} ${PX4_SOURCE_DIR}/Tools/kconfig/allyesconfig.py + WORKING_DIRECTORY ${PX4_SOURCE_DIR} + ) + endif() + # Generate header file for C/C++ preprocessor execute_process( COMMAND ${CMAKE_COMMAND} -E env ${COMMON_KCONFIG_ENV_SETTINGS} @@ -438,7 +448,7 @@ if(${LABEL} MATCHES "default" OR ${LABEL} MATCHES "bootloader" OR ${LABEL} MATCH COMMAND_EXPAND_LISTS ) -else() +elseif(NOT ${LABEL} MATCHES "allyes") # All other configs except allyes which isn't configurable add_custom_target(boardconfig ${CMAKE_COMMAND} -E env ${COMMON_KCONFIG_ENV_SETTINGS} ${MENUCONFIG_PATH} Kconfig COMMAND ${CMAKE_COMMAND} -E env ${COMMON_KCONFIG_ENV_SETTINGS} ${SAVEDEFCONFIG_PATH}