zephyr/cmake/host-tools.cmake
Ross Burton a4da64033d cmake: expand DTC version regex
DTC can be built with both traditional Makefiles or Meson. When built
with Makefiles the --version output looks like 'Version: DTC
1.6.1-dirty' but when built with Meson the output is 'Version: DTC
v1.6.1+.

This fails to match the version regex and the cmake then fails:

CMake Error at cmake/host-tools.cmake:28 (if):
  if given arguments:
    "VERSION_GREATER" "1.4.6"
  Unknown arguments specified

Expanding the regex with an optional 'v' covers both cases and the build
succeeds.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2021-11-17 11:14:31 -05:00

70 lines
1.9 KiB
CMake

# SPDX-License-Identifier: Apache-2.0
include(${ZEPHYR_BASE}/cmake/toolchain/zephyr/host-tools.cmake)
# dtc is an optional dependency
find_program(
DTC
dtc
)
if(DTC)
# Parse the 'dtc --version' output to find the installed version.
set(MIN_DTC_VERSION 1.4.6)
execute_process(
COMMAND
${DTC} --version
OUTPUT_VARIABLE dtc_version_output
ERROR_VARIABLE dtc_error_output
RESULT_VARIABLE dtc_status
)
if(${dtc_status} EQUAL 0)
string(REGEX MATCH "Version: DTC v?([0-9]+[.][0-9]+[.][0-9]+).*" out_var ${dtc_version_output})
# Since it is optional, an outdated version is not an error. If an
# outdated version is discovered, print a warning and proceed as if
# DTC were not installed.
if(${CMAKE_MATCH_1} VERSION_GREATER ${MIN_DTC_VERSION})
message(STATUS "Found dtc: ${DTC} (found suitable version \"${CMAKE_MATCH_1}\", minimum required is \"${MIN_DTC_VERSION}\")")
else()
message(WARNING
"Could NOT find dtc: Found unsuitable version \"${CMAKE_MATCH_1}\", but required is at least \"${MIN_DTC_VERSION}\" (found ${DTC}). Optional devicetree error checking with dtc will not be performed.")
set(DTC DTC-NOTFOUND)
endif()
else()
message(WARNING
"Could NOT find working dtc: Found dtc (${DTC}), but failed to load with:\n ${dtc_error_output}")
set(DTC DTC-NOTFOUND)
endif()
endif()
# gperf is an optional dependency
find_program(
GPERF
gperf
)
# openocd is an optional dependency
find_program(
OPENOCD
openocd
)
# bossac is an optional dependency
find_program(
BOSSAC
bossac
)
# imgtool is an optional dependency (the build may also fall back to
# scripts/imgtool.py in the mcuboot repository if that's present in
# some cases)
find_program(
IMGTOOL
imgtool
)
# TODO: Should we instead find one qemu binary for each ARCH?
# TODO: This will probably need to be re-organized when there exists more than one SDK.