| # |
| # Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) |
| # |
| # SPDX-License-Identifier: BSD-2-Clause |
| # |
| cmake_minimum_required(VERSION 3.8.2) |
| include_guard(GLOBAL) |
| |
| # This path is guaranteed to exist |
| find_path(DTS_PATH "sabre.dts" PATHS ${KERNEL_PATH}/tools/dts CMAKE_FIND_ROOT_PATH_BOTH) |
| # find a dts file matching platform.dts and put into a cache variable named |
| # <platform>_FOUND_DTS |
| function(FindDTS var platform) |
| find_file(${platform}_FOUND_DTS ${platform}.dts PATHS ${DTS_PATH} CMAKE_FIND_ROOT_PATH_BOTH) |
| if("${${platform}_FOUND_DTS}}" STREQUAL "${platform}_FOUND_DTS-NOTFOUND") |
| message(WARNING "Could not find default dts file ${PLATFORM.dts}") |
| endif() |
| set(${var} ${${platform}_FOUND_DTS} PARENT_SCOPE) |
| endfunction() |
| |
| # generate a dtb from a dts file using the dtc tool |
| function(GenDTB dts_file var) |
| # find the dtc tool |
| find_program(DTC_TOOL dtc) |
| if("${DTC_TOOL}" STREQUAL "DTC_TOOL-NOTFOUND") |
| message(FATAL_ERROR "Cannot find 'dtc' program.") |
| endif() |
| # check the dts we have been given exists |
| if(NOT EXISTS "${dts_file}") |
| message(FATAL_ERROR "Cannot find dts file ${dts_file}") |
| endif() |
| # put all the files into /dtb in the binary dir |
| set(dtb_dir "${CMAKE_BINARY_DIR}/dtb") |
| file(MAKE_DIRECTORY "${dtb_dir}") |
| # generate a file name |
| get_filename_component(FILE_NAME ${dts_file} NAME_WE) |
| set(filename "${dtb_dir}/${FILE_NAME}.dtb") |
| set(${var} ${filename} PARENT_SCOPE) |
| # now add the command to generate the dtb |
| execute_process( |
| COMMAND |
| ${DTC_TOOL} -I dts -O dtb -o ${filename} ${dts_file} |
| OUTPUT_VARIABLE output |
| ERROR_VARIABLE output |
| ) |
| if(NOT EXISTS "${filename}") |
| message(FATAL_ERROR "${output} |
| failed to gen ${filename}") |
| endif() |
| endfunction() |