mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-01 10:36:18 +00:00
Update the files which contain no license information with the 'Apache-2.0' SPDX license identifier. Many source files in the tree are missing licensing information, which makes it harder for compliance tools to determine the correct license. By default all files without license information are under the default license of Zephyr, which is Apache version 2. Signed-off-by: Anas Nashif <anas.nashif@intel.com>
156 lines
4.8 KiB
CMake
156 lines
4.8 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_ifndef(DTS_SOURCE ${BOARD_DIR}/${BOARD}.dts)
|
|
set_ifndef(DTS_COMMON_OVERLAYS ${ZEPHYR_BASE}/dts/common/common.dts)
|
|
set_ifndef(DTS_APP_BINDINGS ${APPLICATION_SOURCE_DIR}/dts/bindings)
|
|
set_ifndef(DTS_APP_INCLUDE ${APPLICATION_SOURCE_DIR}/dts)
|
|
|
|
set(dts_files
|
|
${DTS_SOURCE}
|
|
${DTS_COMMON_OVERLAYS}
|
|
${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()
|
|
|
|
# Ensure that changes to 'dts_file's cause CMake to be re-run
|
|
set_property(DIRECTORY APPEND PROPERTY
|
|
CMAKE_CONFIGURE_DEPENDS
|
|
${dts_file}
|
|
)
|
|
|
|
math(EXPR i "${i}+1")
|
|
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
|
|
execute_process(
|
|
COMMAND ${CMAKE_C_COMPILER}
|
|
-x assembler-with-cpp
|
|
-nostdinc
|
|
-isystem ${DTS_APP_INCLUDE}
|
|
-isystem ${ZEPHYR_BASE}/include
|
|
-isystem ${ZEPHYR_BASE}/dts/${ARCH}
|
|
-isystem ${ZEPHYR_BASE}/dts
|
|
${DTC_INCLUDE_FLAG_FOR_DTS} # include the DTS source and overlays
|
|
-I${ZEPHYR_BASE}/dts/common
|
|
${NOSYSDEF_CFLAG}
|
|
-D__DTS__
|
|
-P
|
|
-E ${ZEPHYR_BASE}/misc/empty_file.c
|
|
-o ${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 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()
|
|
|
|
if(NOT EXISTS ${DTS_APP_BINDINGS})
|
|
set(DTS_APP_BINDINGS)
|
|
endif()
|
|
|
|
set(CMD_EXTRACT_DTS_INCLUDES ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/dts/extract_dts_includes.py
|
|
--dts ${BOARD}.dts_compiled
|
|
--yaml ${ZEPHYR_BASE}/dts/bindings ${DTS_APP_BINDINGS}
|
|
--keyvalue ${GENERATED_DTS_BOARD_CONF}
|
|
--include ${GENERATED_DTS_BOARD_UNFIXED_H}
|
|
--old-alias-names
|
|
)
|
|
|
|
# Run extract_dts_includes.py to create a .conf and a header file that can be
|
|
# included into the CMake namespace
|
|
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(CONFIG_ ${GENERATED_DTS_BOARD_CONF})
|
|
import_kconfig(DT_ ${GENERATED_DTS_BOARD_CONF})
|
|
|
|
else()
|
|
file(WRITE ${GENERATED_DTS_BOARD_UNFIXED_H} "/* WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY! */")
|
|
endif(SUPPORTS_DTS)
|