diff --git a/Kconfig.zephyr b/Kconfig.zephyr index 7b01c9b3cfa..604c62378cd 100644 --- a/Kconfig.zephyr +++ b/Kconfig.zephyr @@ -18,6 +18,8 @@ # Note: $ARCH and $BOARD_DIR might be glob patterns. source "$(BOARD_DIR)/Kconfig.defconfig" +source "boards/shields/*/Kconfig.defconfig" + source "$(SOC_DIR)/$(ARCH)/*/Kconfig.defconfig" source "boards/Kconfig" diff --git a/boards/Kconfig b/boards/Kconfig index 3dc060313a1..303c20a6c05 100644 --- a/boards/Kconfig +++ b/boards/Kconfig @@ -29,3 +29,7 @@ endmenu menu "Shields" source "boards/shields/Kconfig" endmenu + +menu "Shields" +source "boards/shields/*/Kconfig.shield" +endmenu diff --git a/cmake/dts.cmake b/cmake/dts.cmake index f4cf4710053..8b8c7c5f778 100644 --- a/cmake/dts.cmake +++ b/cmake/dts.cmake @@ -14,15 +14,55 @@ set_ifndef(DTS_SOURCE ${BOARD_ROOT}/boards/${ARCH}/${BOARD_FAMILY}/${BOARD}.dts) set_ifndef(DTS_COMMON_OVERLAYS ${ZEPHYR_BASE}/dts/common/common.dts) set_ifndef(DTS_APP_BINDINGS ${APPLICATION_SOURCE_DIR}/dts/bindings) + +#Parse boards/shields to generate the shield list + +set(shield_dir ${ZEPHYR_BASE}/boards/shields) + +# Match the .overlay files in the shield directories to make sure we are +# finding shields, e.g. x_nucleo_iks01a1/x_nucleo_iks01a1.overlay +file(GLOB_RECURSE shields_refs_list + RELATIVE ${shield_dir} + ${shield_dir}/*/*.overlay + ) + +# The above gives a list like +# x_nucleo_iks01a1/x_nucleo_iks01a1.overlay;x_nucleo_iks01a2/x_nucleo_iks01a2.overlay +# we construct a list of shield names by extracting file name and +# removing the extension. +foreach(shield_path ${shields_refs_list}) + get_filename_component(shield ${shield_path} NAME_WE) + + # Generate CONFIG flags matching each shield + string(TOUPPER "CONFIG_SHIELD_${shield}" shield_config) + + if(${shield_config}) + # if shield config flag is on, add shield overlay to the shield overlays + # list and dts.fixup file to the shield fixup file + set(DTC_SHIELD_OVERLAY_FILE ${DTC_SHIELD_OVERLAY_FILE} ${shield_dir}/${shield_path}) + set(DTC_SHIELD_FIXUP ${DTC_SHIELD_FIXUP} ${shield_dir}/${shield}/dts.fixup) + endif() + +endforeach() + + message(STATUS "Generating zephyr/include/generated/generated_dts_board.h") if(CONFIG_HAS_DTS) + if(DTC_SHIELD_OVERLAY_FILE) + # Convert from space-separated files into file list + string(REPLACE " " ";" DTC_SHIELD_OVERLAY_FILES_AS_LIST ${DTC_SHIELD_OVERLAY_FILE}) + endif() + if(DTC_OVERLAY_FILE) # Convert from space-separated files into file list string(REPLACE " " ";" DTC_OVERLAY_FILE_AS_LIST ${DTC_OVERLAY_FILE}) endif() + # Prepend shield overlays + set(DTC_OVERLAY_FILE_AS_LIST ${DTC_SHIELD_OVERLAY_FILES_AS_LIST} ${DTC_OVERLAY_FILE_AS_LIST}) + # Prepend common overlays set(DTC_OVERLAY_FILE_AS_LIST ${DTS_COMMON_OVERLAYS} ${DTC_OVERLAY_FILE_AS_LIST}) @@ -98,7 +138,7 @@ if(CONFIG_HAS_DTS) set(DTS_APP_FIXUP ${APPLICATION_SOURCE_DIR}/dts.fixup) endif() - set(DTS_FIXUPS ${DTS_SOC_FIXUP} ${DTS_BOARD_FIXUP} ${DTS_APP_FIXUP}) + set(DTS_FIXUPS ${DTS_SOC_FIXUP} ${DTS_BOARD_FIXUP} ${DTC_SHIELD_FIXUP} ${DTS_APP_FIXUP}) if(NOT "${DTS_FIXUPS}" STREQUAL "") set(DTS_FIXUPS --fixup ${DTS_FIXUPS}) endif()