| # SPDX-License-Identifier: Apache-2.0 |
| |
| include(${ZEPHYR_BASE}/cmake/toolchain/zephyr/host-tools.cmake) |
| |
| # west is optional |
| find_program( |
| WEST |
| west |
| ) |
| if(${WEST} STREQUAL WEST-NOTFOUND) |
| unset(WEST) |
| else() |
| # If west is found, make sure its version matches the minimum |
| # required one. |
| set(MIN_WEST_VERSION 0.5.6) |
| execute_process( |
| COMMAND |
| ${WEST} --version |
| OUTPUT_VARIABLE west_version_output |
| ) |
| |
| # The west --version output is currently multiline: bootstrapper |
| # followed by installation version. Test both. This will still work |
| # when .west/west is eliminated from the installation and obtained |
| # via pypi, which will result in a single line of output. |
| string(REGEX REPLACE "\n" ";" west_version_output "${west_version_output}") |
| foreach(item ${west_version_output}) |
| if("${item}" MATCHES "^[^\/\\]*v([0-9]+[.][0-9]+[.][0-9]+)") |
| set(west_version "${CMAKE_MATCH_1}") |
| if(${west_version} VERSION_LESS ${MIN_WEST_VERSION}) |
| message(FATAL_ERROR "The detected west version is unsupported.\n\ |
| The version was found to be ${west_version}:\n\ |
| ${item}\n\ |
| But the minimum supported version is ${MIN_WEST_VERSION}\n\ |
| Please upgrade, e.g. with:\n\ |
| pip3 install --upgrade west\n\ |
| if the version from pip is too old, or:\n\ |
| west update\n\ |
| if the version in the installation is too old.") |
| endif() |
| endif() |
| endforeach() |
| # Just output information for a single version. This will still work |
| # even after output is one line. |
| message(STATUS "Found west: ${WEST} (found suitable version \"${west_version}\", minimum required is \"${MIN_WEST_VERSION}\")") |
| endif() |
| |
| # Search for the must-have program dtc on PATH and in |
| # TOOLCHAIN_HOME. Usually DTC will be provided by an SDK, but for |
| # SDK-less projects like gnuarmemb, it is up to the user to install |
| # dtc. |
| find_program( |
| DTC |
| dtc |
| ) |
| if(${DTC} STREQUAL DTC-NOTFOUND) |
| message(FATAL_ERROR "Unable to find dtc") |
| endif() |
| |
| # Parse the 'dtc --version' and make sure it is at least MIN_DTC_VERSION |
| set(MIN_DTC_VERSION 1.4.6) |
| execute_process( |
| COMMAND |
| ${DTC} --version |
| OUTPUT_VARIABLE dtc_version_output |
| ) |
| string(REGEX MATCH "Version: DTC ([0-9]+\.[0-9]+.[0-9]+).*" out_var ${dtc_version_output}) |
| if(${CMAKE_MATCH_1} VERSION_LESS ${MIN_DTC_VERSION}) |
| assert(0 "The detected dtc version is unsupported. \n\ |
| The version was found to be ${CMAKE_MATCH_1} \n\ |
| But the minimum supported version is ${MIN_DTC_VERSION} \n\ |
| See https://docs.zephyrproject.org/latest/getting_started/ \n\ |
| for how to use the SDK's dtc alongside a custom toolchain." |
| ) |
| endif() |
| |
| find_program( |
| GPERF |
| gperf |
| ) |
| if(${GPERF} STREQUAL GPERF-NOTFOUND) |
| message(FATAL_ERROR "Unable to find gperf") |
| endif() |
| |
| # openocd is an optional dependency |
| find_program( |
| OPENOCD |
| openocd |
| ) |
| |
| # bossac is an optional dependency |
| find_program( |
| BOSSAC |
| bossac |
| ) |
| |
| # 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. |