123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/generated)
- set(GEN_DEFINES_SCRIPT ${ZEPHYR_BASE}/scripts/dts/gen_defines.py)
- set(ZEPHYR_DTS ${PROJECT_BINARY_DIR}/zephyr.dts)
- set(EDT_PICKLE ${PROJECT_BINARY_DIR}/edt.pickle)
- set(DEVICETREE_UNFIXED_H ${PROJECT_BINARY_DIR}/include/generated/devicetree_unfixed.h)
- set(DEVICE_EXTERN_H ${PROJECT_BINARY_DIR}/include/generated/device_extern.h)
- set(DTS_POST_CPP ${PROJECT_BINARY_DIR}/${BOARD}.dts.pre.tmp)
- set(VENDOR_PREFIXES dts/bindings/vendor-prefixes.txt)
- set(DTS_CMAKE_SCRIPT ${ZEPHYR_BASE}/scripts/dts/gen_dts_cmake.py)
- set(DTS_CMAKE ${PROJECT_BINARY_DIR}/dts.cmake)
- set_ifndef(DTS_SOURCE ${BOARD_DIR}/${BOARD}.dts)
- zephyr_file(APPLICATION_ROOT DTS_ROOT)
- list(APPEND
- DTS_ROOT
- ${APPLICATION_SOURCE_DIR}
- ${BOARD_DIR}
- ${SHIELD_DIRS}
- ${ZEPHYR_BASE}
- )
- list(REMOVE_DUPLICATES
- DTS_ROOT
- )
- if(EXISTS ${DTS_SOURCE})
- set(SUPPORTS_DTS 1)
- if(BOARD_REVISION AND EXISTS ${BOARD_DIR}/${BOARD}_${BOARD_REVISION_STRING}.overlay)
- list(APPEND DTS_SOURCE ${BOARD_DIR}/${BOARD}_${BOARD_REVISION_STRING}.overlay)
- endif()
- else()
- set(SUPPORTS_DTS 0)
- endif()
- set(dts_files
- ${DTS_SOURCE}
- ${shield_dts_files}
- )
- if(SUPPORTS_DTS)
- if(DTC_OVERLAY_FILE)
-
- string(REPLACE " " ";" DTC_OVERLAY_FILE_RAW_LIST "${DTC_OVERLAY_FILE}")
- foreach(file ${DTC_OVERLAY_FILE_RAW_LIST})
- file(TO_CMAKE_PATH "${file}" cmake_path_file)
- list(APPEND DTC_OVERLAY_FILE_AS_LIST ${cmake_path_file})
- endforeach()
- 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 "Found BOARD.dts: ${dts_file}")
- else()
- message(STATUS "Found devicetree overlay: ${dts_file}")
- endif()
- math(EXPR i "${i}+1")
- endforeach()
- unset(DTS_ROOT_SYSTEM_INCLUDE_DIRS)
- unset(DTS_ROOT_BINDINGS)
- foreach(dts_root ${DTS_ROOT})
- foreach(dts_root_path
- include
- dts/common
- dts/${ARCH}
- dts
- )
- get_filename_component(full_path ${dts_root}/${dts_root_path} REALPATH)
- if(EXISTS ${full_path})
- list(APPEND
- DTS_ROOT_SYSTEM_INCLUDE_DIRS
- -isystem ${full_path}
- )
- endif()
- endforeach()
- set(bindings_path ${dts_root}/dts/bindings)
- if(EXISTS ${bindings_path})
- list(APPEND
- DTS_ROOT_BINDINGS
- ${bindings_path}
- )
- endif()
- set(vendor_prefixes ${dts_root}/${VENDOR_PREFIXES})
- if(EXISTS ${vendor_prefixes})
- list(APPEND EXTRA_GEN_DEFINES_ARGS --vendor-prefixes ${vendor_prefixes})
- endif()
- endforeach()
-
-
- set(CACHED_DTS_ROOT_BINDINGS ${DTS_ROOT_BINDINGS} CACHE INTERNAL
- "DT bindings root directories")
- if(NOT DEFINED CMAKE_DTS_PREPROCESSOR)
- set(CMAKE_DTS_PREPROCESSOR ${CMAKE_C_COMPILER})
- endif()
-
-
-
-
-
-
-
-
-
- execute_process(
- COMMAND ${CMAKE_DTS_PREPROCESSOR}
- -x assembler-with-cpp
- -nostdinc
- ${DTS_ROOT_SYSTEM_INCLUDE_DIRS}
- ${DTC_INCLUDE_FLAG_FOR_DTS}
- ${NOSYSDEF_CFLAG}
- -D__DTS__
- ${DTS_EXTRA_CPPFLAGS}
- -P
- -E
- -MD
- -MF ${PROJECT_BINARY_DIR}/${BOARD}.dts.pre.d
- -o ${PROJECT_BINARY_DIR}/${BOARD}.dts.pre.tmp
- ${ZEPHYR_BASE}/misc/empty_file.c
- WORKING_DIRECTORY ${APPLICATION_SOURCE_DIR}
- RESULT_VARIABLE ret
- )
- if(NOT "${ret}" STREQUAL "0")
- message(FATAL_ERROR "command failed with return code: ${ret}")
- endif()
-
-
-
- toolchain_parse_make_rule(
- ${PROJECT_BINARY_DIR}/${BOARD}.dts.pre.d
- include_files
- )
- set_property(DIRECTORY APPEND PROPERTY
- CMAKE_CONFIGURE_DEPENDS
- ${include_files}
- ${GEN_DEFINES_SCRIPT}
- ${DTS_CMAKE_SCRIPT}
- )
-
-
-
-
-
- if(DTC)
- 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()
- set(VALID_EXTRA_DTC_FLAGS "")
- foreach(extra_opt ${EXTRA_DTC_FLAGS})
- check_dtc_flag(${extra_opt} check)
- if (check)
- list(APPEND VALID_EXTRA_DTC_FLAGS ${extra_opt})
- endif()
- endforeach()
- set(EXTRA_DTC_FLAGS ${VALID_EXTRA_DTC_FLAGS})
- execute_process(
- COMMAND ${DTC}
- -O dts
- -o -
- -b 0
- -E unit_address_vs_reg
- ${DTC_NO_WARN_UNIT_ADDR}
- ${DTC_WARN_UNIT_ADDR_IF_ENABLED}
- ${EXTRA_DTC_FLAGS}
- ${BOARD}.dts.pre.tmp
- OUTPUT_QUIET
- WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
- RESULT_VARIABLE ret
- )
- if(NOT "${ret}" STREQUAL "0")
- message(FATAL_ERROR "command failed with return code: ${ret}")
- endif()
- endif(DTC)
-
-
-
- string(REPLACE ";" " " EXTRA_DTC_FLAGS_RAW "${EXTRA_DTC_FLAGS}")
- set(CMD_EXTRACT ${PYTHON_EXECUTABLE} ${GEN_DEFINES_SCRIPT}
- --dts ${BOARD}.dts.pre.tmp
- --dtc-flags '${EXTRA_DTC_FLAGS_RAW}'
- --bindings-dirs ${DTS_ROOT_BINDINGS}
- --header-out ${DEVICETREE_UNFIXED_H}
- --device-header-out ${DEVICE_EXTERN_H}
- --dts-out ${ZEPHYR_DTS}
- --edt-pickle-out ${EDT_PICKLE}
- ${EXTRA_GEN_DEFINES_ARGS}
- )
- execute_process(
- COMMAND ${CMD_EXTRACT}
- WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
- RESULT_VARIABLE ret
- )
- if(NOT "${ret}" STREQUAL "0")
- message(FATAL_ERROR "gen_defines.py failed with return code: ${ret}")
- else()
- message(STATUS "Generated zephyr.dts: ${ZEPHYR_DTS}")
- message(STATUS "Generated devicetree_unfixed.h: ${DEVICETREE_UNFIXED_H}")
- message(STATUS "Generated device_extern.h: ${DEVICE_EXTERN_H}")
- endif()
- execute_process(
- COMMAND ${PYTHON_EXECUTABLE} ${DTS_CMAKE_SCRIPT}
- --edt-pickle ${EDT_PICKLE}
- --cmake-out ${DTS_CMAKE}
- WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
- RESULT_VARIABLE ret
- )
- if(NOT "${ret}" STREQUAL "0")
- message(FATAL_ERROR "gen_dts_cmake.py failed with return code: ${ret}")
- else()
- message(STATUS "Including generated dts.cmake file: ${DTS_CMAKE}")
- include(${DTS_CMAKE})
- endif()
- else()
- file(WRITE ${DEVICETREE_UNFIXED_H} "/* WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY! */")
- file(WRITE ${DEVICE_EXTERN_H} "/* WARNING. THIS FILE IS AUTO-GENERATED. DO NOT MODIFY! */")
- endif(SUPPORTS_DTS)
|