mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-21 02:15:22 +00:00
Remove the common.dts file which has been used for a year. common.dts at one point allowed us to conditionally add an MCUBoot overlay based on Kconfig. but since DT lost access to Kconfig options it has been unused. The overridable variable DTS_COMMON_OVERLAYS, which by default points to common.dts, is also unused in-tree, and any out-of-tree usage can be ported over to use DTC_OVERLAY_FILE instead, so we remove the variable as well. This simplifies the configuration system. Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
221 lines
6.5 KiB
CMake
221 lines
6.5 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/generated)
|
|
|
|
# Zephyr code can configure itself based on a KConfig'uration with the
|
|
# header file autoconf.h. There exists an analogous file
|
|
# generated_dts_board_unfixed.h that allows configuration based on information
|
|
# encoded in DTS.
|
|
#
|
|
# Here we call on dtc, the gcc preprocessor, and
|
|
# scripts/dts/extract_dts_includes.py to generate this header file at
|
|
# CMake configure-time.
|
|
#
|
|
# See ~/zephyr/doc/dts
|
|
set(GENERATED_DTS_BOARD_UNFIXED_H ${PROJECT_BINARY_DIR}/include/generated/generated_dts_board_unfixed.h)
|
|
set(GENERATED_DTS_BOARD_CONF ${PROJECT_BINARY_DIR}/include/generated/generated_dts_board.conf)
|
|
set(DTS_POST_CPP ${PROJECT_BINARY_DIR}/${BOARD}.dts.pre.tmp)
|
|
|
|
set_ifndef(DTS_SOURCE ${BOARD_DIR}/${BOARD}.dts)
|
|
|
|
if(DEFINED DTS_COMMON_OVERLAYS)
|
|
# TODO: remove this warning in version 1.16
|
|
message(FATAL_ERROR "DTS_COMMON_OVERLAYS is no longer supported. Use DTC_OVERLAY_FILE instead.")
|
|
endif()
|
|
|
|
# 'DTS_ROOT' is a list of directories where a directory tree with DT
|
|
# files may be found. It always includes the application directory,
|
|
# the board directory, and ${ZEPHYR_BASE}.
|
|
list(APPEND
|
|
DTS_ROOT
|
|
${APPLICATION_SOURCE_DIR}
|
|
${BOARD_DIR}
|
|
${ZEPHYR_BASE}
|
|
)
|
|
|
|
set(dts_files
|
|
${DTS_SOURCE}
|
|
${shield_dts_files}
|
|
)
|
|
|
|
# TODO: What to do about non-posix platforms where NOT CONFIG_HAS_DTS (xtensa)?
|
|
# Drop support for NOT CONFIG_HAS_DTS perhaps?
|
|
if(EXISTS ${DTS_SOURCE})
|
|
set(SUPPORTS_DTS 1)
|
|
else()
|
|
set(SUPPORTS_DTS 0)
|
|
endif()
|
|
|
|
if(SUPPORTS_DTS)
|
|
if(DTC_OVERLAY_FILE)
|
|
# Convert from space-separated files into file list
|
|
string(REPLACE " " ";" DTC_OVERLAY_FILE_AS_LIST ${DTC_OVERLAY_FILE})
|
|
list(APPEND
|
|
dts_files
|
|
${DTC_OVERLAY_FILE_AS_LIST}
|
|
)
|
|
endif()
|
|
|
|
set(i 0)
|
|
unset(DTC_INCLUDE_FLAG_FOR_DTS)
|
|
foreach(dts_file ${dts_files})
|
|
list(APPEND DTC_INCLUDE_FLAG_FOR_DTS
|
|
-include ${dts_file})
|
|
|
|
if(i EQUAL 0)
|
|
message(STATUS "Loading ${dts_file} as base")
|
|
else()
|
|
message(STATUS "Overlaying ${dts_file}")
|
|
endif()
|
|
|
|
math(EXPR i "${i}+1")
|
|
endforeach()
|
|
|
|
foreach(dts_root ${DTS_ROOT})
|
|
foreach(dts_root_path
|
|
include
|
|
dts/common
|
|
dts/${ARCH}
|
|
dts
|
|
)
|
|
set(full_path ${dts_root}/${dts_root_path})
|
|
if(EXISTS ${full_path})
|
|
list(APPEND
|
|
DTS_ROOT_SYSTEM_INCLUDE_DIRS
|
|
-isystem ${full_path}
|
|
)
|
|
endif()
|
|
endforeach()
|
|
endforeach()
|
|
|
|
foreach(dts_root ${DTS_ROOT})
|
|
set(full_path ${dts_root}/dts/bindings)
|
|
if(EXISTS ${full_path})
|
|
list(APPEND
|
|
DTS_ROOT_BINDINGS
|
|
${full_path}
|
|
)
|
|
endif()
|
|
endforeach()
|
|
|
|
# TODO: Cut down on CMake configuration time by avoiding
|
|
# regeneration of generated_dts_board_unfixed.h on every configure. How
|
|
# challenging is this? What are the dts dependencies? We run the
|
|
# preprocessor, and it seems to be including all kinds of
|
|
# directories with who-knows how many header files.
|
|
|
|
# Run the C preprocessor on an empty C source file that has one or
|
|
# more DTS source files -include'd into it to create the
|
|
# intermediary file *.dts.pre.tmp. Also, generate a dependency file
|
|
# so that changes to DT sources are detected.
|
|
execute_process(
|
|
COMMAND ${CMAKE_C_COMPILER}
|
|
-x assembler-with-cpp
|
|
-nostdinc
|
|
${DTS_ROOT_SYSTEM_INCLUDE_DIRS}
|
|
${DTC_INCLUDE_FLAG_FOR_DTS} # include the DTS source and overlays
|
|
${NOSYSDEF_CFLAG}
|
|
-D__DTS__
|
|
-P
|
|
-E # Stop after preprocessing
|
|
-MD # Generate a dependency file as a side-effect
|
|
-o ${BOARD}.dts.pre.tmp
|
|
${ZEPHYR_BASE}/misc/empty_file.c
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
RESULT_VARIABLE ret
|
|
)
|
|
if(NOT "${ret}" STREQUAL "0")
|
|
message(FATAL_ERROR "command failed with return code: ${ret}")
|
|
endif()
|
|
|
|
# Parse the generated dependency file to find the DT sources that
|
|
# were included and then add them to the list of files that trigger
|
|
# a re-run of CMake.
|
|
toolchain_parse_make_rule(
|
|
${PROJECT_BINARY_DIR}/${BOARD}.dts.pre.d
|
|
include_files # Output parameter
|
|
)
|
|
|
|
set_property(DIRECTORY APPEND PROPERTY
|
|
CMAKE_CONFIGURE_DEPENDS
|
|
${include_files}
|
|
)
|
|
|
|
# Run the DTC on *.dts.pre.tmp to create the intermediary file *.dts_compiled
|
|
|
|
set(DTC_WARN_UNIT_ADDR_IF_ENABLED "")
|
|
check_dtc_flag("-Wunique_unit_address_if_enabled" check)
|
|
if (check)
|
|
set(DTC_WARN_UNIT_ADDR_IF_ENABLED "-Wunique_unit_address_if_enabled")
|
|
endif()
|
|
set(DTC_NO_WARN_UNIT_ADDR "")
|
|
check_dtc_flag("-Wno-unique_unit_address" check)
|
|
if (check)
|
|
set(DTC_NO_WARN_UNIT_ADDR "-Wno-unique_unit_address")
|
|
endif()
|
|
execute_process(
|
|
COMMAND ${DTC}
|
|
-O dts
|
|
-o ${BOARD}.dts_compiled
|
|
-b 0
|
|
-E unit_address_vs_reg
|
|
${DTC_NO_WARN_UNIT_ADDR}
|
|
${DTC_WARN_UNIT_ADDR_IF_ENABLED}
|
|
${EXTRA_DTC_FLAGS} # User settable
|
|
${BOARD}.dts.pre.tmp
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
RESULT_VARIABLE ret
|
|
)
|
|
if(NOT "${ret}" STREQUAL "0")
|
|
message(FATAL_ERROR "command failed with return code: ${ret}")
|
|
endif()
|
|
|
|
#
|
|
# Run gen_defines.py to create a .conf file and a header file
|
|
#
|
|
|
|
set(CMD_NEW_EXTRACT ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/dts/gen_defines.py
|
|
--dts ${BOARD}.dts.pre.tmp
|
|
--bindings-dirs ${DTS_ROOT_BINDINGS}
|
|
--conf-out ${GENERATED_DTS_BOARD_CONF}
|
|
--header-out ${GENERATED_DTS_BOARD_UNFIXED_H}
|
|
)
|
|
|
|
execute_process(
|
|
COMMAND ${CMD_NEW_EXTRACT}
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
RESULT_VARIABLE ret
|
|
)
|
|
if(NOT "${ret}" STREQUAL "0")
|
|
message(FATAL_ERROR "new extractor failed with return code: ${ret}")
|
|
endif()
|
|
|
|
#
|
|
# Run extract_dts_includes.py (the older DT/binding parser) to generate some
|
|
# legacy identifiers (via --deprecated-only). This will go away later.
|
|
#
|
|
|
|
set(CMD_EXTRACT_DTS_INCLUDES ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/dts/extract_dts_includes.py
|
|
--deprecated-only
|
|
--dts ${BOARD}.dts_compiled
|
|
--yaml ${DTS_ROOT_BINDINGS}
|
|
--include ${GENERATED_DTS_BOARD_UNFIXED_H}.deprecated
|
|
--old-alias-names
|
|
)
|
|
|
|
execute_process(
|
|
COMMAND ${CMD_EXTRACT_DTS_INCLUDES}
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
RESULT_VARIABLE ret
|
|
)
|
|
if(NOT "${ret}" STREQUAL "0")
|
|
message(FATAL_ERROR "command failed with return code: ${ret}")
|
|
endif()
|
|
|
|
import_kconfig(DT_ ${GENERATED_DTS_BOARD_CONF})
|
|
|
|
else()
|
|
file(WRITE ${GENERATED_DTS_BOARD_UNFIXED_H} "/* WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY! */")
|
|
file(WRITE ${GENERATED_DTS_BOARD_UNFIXED_H}.deprecated "/* WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY! */")
|
|
endif(SUPPORTS_DTS)
|