forked from zephyrproject-rtos/zephyr
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmake: twister: Using common script for toolchain setting verification
Fixes: zephyrproject-rtos#30713 Now using the common script `verify-toolchain.cmake` for verifying toolchain settings. Signed-off-by: Torsten Rasmussen <[email protected]>
- Loading branch information
Showing
5 changed files
with
182 additions
and
108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
# The purpose of this file is to verify that required variables has been | ||
# defined for proper toolchain use. | ||
# | ||
# It also offers the possibility to verify that the selected toolchain matches | ||
# a specific version. | ||
# Currently only when using the Zephyr SDK the version is verified, but other | ||
# other version verification for other toolchains can be added as needed. | ||
# | ||
# This file can also be executed in script mode so that it can be used in other | ||
# places, such as python scripts. | ||
# | ||
# When invoked as a script with -P: | ||
# cmake [options] -P verify-toolchain.cmake | ||
# | ||
# it takes the following arguments: | ||
# FORMAT=json: Print the output as a json formatted string, useful for Python | ||
|
||
# This is the minimum required Zephyr-SDK version which supports CMake package | ||
set(TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION 0.11.3) | ||
|
||
# Set internal variables if set in environment. | ||
if(NOT DEFINED ZEPHYR_TOOLCHAIN_VARIANT) | ||
set(ZEPHYR_TOOLCHAIN_VARIANT $ENV{ZEPHYR_TOOLCHAIN_VARIANT}) | ||
endif() | ||
|
||
if(NOT DEFINED ZEPHYR_SDK_INSTALL_DIR) | ||
set(ZEPHYR_SDK_INSTALL_DIR $ENV{ZEPHYR_SDK_INSTALL_DIR}) | ||
endif() | ||
|
||
# Pick host system's toolchain if we are targeting posix | ||
if("${ARCH}" STREQUAL "posix") | ||
if(NOT "${ZEPHYR_TOOLCHAIN_VARIANT}" STREQUAL "llvm") | ||
set(ZEPHYR_TOOLCHAIN_VARIANT "host") | ||
endif() | ||
return() | ||
endif() | ||
|
||
if(NOT ZEPHYR_TOOLCHAIN_VARIANT AND | ||
(CROSS_COMPILE OR (DEFINED ENV{CROSS_COMPILE}))) | ||
set(ZEPHYR_TOOLCHAIN_VARIANT cross-compile) | ||
endif() | ||
|
||
# Verify Zephyr SDK Toolchain. | ||
# There are three scenarios where Zephyr SDK should be looked up: | ||
# 1) Zephyr specified as toolchain (ZEPHYR_SDK_INSTALL_DIR still used if defined) | ||
# 2) No toolchain specified == Default to Zephyr toolchain (Linux only) | ||
# Until we completely deprecate it | ||
if(("zephyr" STREQUAL ${ZEPHYR_TOOLCHAIN_VARIANT}) OR | ||
((NOT DEFINED ZEPHYR_TOOLCHAIN_VARIANT) AND (${CMAKE_HOST_SYSTEM_NAME} STREQUAL Linux)) OR | ||
(DEFINED ZEPHYR_SDK_INSTALL_DIR)) | ||
|
||
# No toolchain was specified, so inform user that we will be searching. | ||
if (NOT DEFINED ZEPHYR_SDK_INSTALL_DIR AND | ||
NOT DEFINED ZEPHYR_TOOLCHAIN_VARIANT | ||
AND NOT CMAKE_SCRIPT_MODE_FILE) | ||
message(STATUS "ZEPHYR_TOOLCHAIN_VARIANT not set, trying to locate Zephyr SDK") | ||
endif() | ||
|
||
# This ensure packages are sorted in descending order. | ||
SET(CMAKE_FIND_PACKAGE_SORT_DIRECTION_CURRENT ${CMAKE_FIND_PACKAGE_SORT_DIRECTION}) | ||
SET(CMAKE_FIND_PACKAGE_SORT_ORDER_CURRENT ${CMAKE_FIND_PACKAGE_SORT_ORDER}) | ||
SET(CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC) | ||
SET(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL) | ||
|
||
if(DEFINED ZEPHYR_SDK_INSTALL_DIR) | ||
# The Zephyr SDK will automatically set the toolchain variant. | ||
# To support Zephyr SDK tools (DTC, and other tools) with 3rd party toolchains | ||
# then we keep track of current toolchain variant. | ||
set(ZEPHYR_CURRENT_TOOLCHAIN_VARIANT ${ZEPHYR_TOOLCHAIN_VARIANT}) | ||
find_package(Zephyr-sdk ${TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION} QUIET HINTS $ENV{ZEPHYR_SDK_INSTALL_DIR}) | ||
if(DEFINED ZEPHYR_CURRENT_TOOLCHAIN_VARIANT) | ||
set(ZEPHYR_TOOLCHAIN_VARIANT ${ZEPHYR_CURRENT_TOOLCHAIN_VARIANT}) | ||
endif() | ||
else() | ||
find_package(Zephyr-sdk ${TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION} QUIET PATHS | ||
/usr | ||
/usr/local | ||
/opt | ||
$ENV{HOME} | ||
$ENV{HOME}/.local | ||
$ENV{HOME}/.local/opt | ||
$ENV{HOME}/bin) | ||
endif() | ||
|
||
SET(CMAKE_FIND_PACKAGE_SORT_DIRECTION ${CMAKE_FIND_PACKAGE_SORT_DIRECTION_CURRENT}) | ||
SET(CMAKE_FIND_PACKAGE_SORT_ORDER ${CMAKE_FIND_PACKAGE_SORT_ORDER_CURRENT}) | ||
endif() | ||
|
||
if(NOT DEFINED ZEPHYR_TOOLCHAIN_VARIANT) | ||
if (NOT Zephyr-sdk_CONSIDERED_VERSIONS) | ||
set(error_msg "ZEPHYR_TOOLCHAIN_VARIANT not specified and no Zephyr SDK is installed.\n") | ||
string(APPEND error_msg "Please set ZEPHYR_TOOLCHAIN_VARIANT to the toolchain to use or install the Zephyr SDK.") | ||
|
||
if(NOT ZEPHYR_TOOLCHAIN_VARIANT AND NOT ZEPHYR_SDK_INSTALL_DIR) | ||
set(error_note "Note: If you are using Zephyr SDK 0.11.1 or 0.11.2, remember to set ZEPHYR_SDK_INSTALL_DIR and ZEPHYR_TOOLCHAIN_VARIANT") | ||
endif() | ||
else() | ||
# Note: When CMake mimimun version becomes >= 3.17, change this loop into: | ||
# foreach(version config IN ZIP_LISTS Zephyr-sdk_CONSIDERED_VERSIONS Zephyr-sdk_CONSIDERED_CONFIGS) | ||
set(error_msg "The Zephyr SDK version you are using is not supported, please update your SDK.\n") | ||
set(missing_version "You need SDK version ${TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION} or newer.") | ||
foreach (version ${Zephyr-sdk_CONSIDERED_VERSIONS}) | ||
if(${version} VERSION_GREATER ${TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION}) | ||
set(missing_version "You need SDK version ${TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION} or compatible version.") | ||
endif() | ||
list(GET Zephyr-sdk_CONSIDERED_CONFIGS 0 zephyr-sdk-candidate) | ||
list(REMOVE_AT Zephyr-sdk_CONSIDERED_CONFIGS 0) | ||
get_filename_component(zephyr-sdk-path ${zephyr-sdk-candidate}/../.. ABSOLUTE) | ||
string(APPEND version_path " ${version} (${zephyr-sdk-path})") | ||
endforeach() | ||
string(APPEND error_msg "${missing_version}") | ||
string(APPEND error_msg "You have version(s):") | ||
string(APPEND error_msg "${version_path}") | ||
endif() | ||
|
||
message(FATAL_ERROR "${error_msg} | ||
The Zephyr SDK can be downloaded from: | ||
https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION}/zephyr-sdk-${TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION}-setup.run | ||
${error_note} | ||
") | ||
|
||
endif() | ||
|
||
if(CMAKE_SCRIPT_MODE_FILE) | ||
if("${FORMAT}" STREQUAL "json") | ||
set(json "{\"ZEPHYR_TOOLCHAIN_VARIANT\" : \"${ZEPHYR_TOOLCHAIN_VARIANT}\", ") | ||
string(APPEND json "\"SDK_VERSION\": \"${SDK_VERSION}\", ") | ||
string(APPEND json "\"ZEPHYR_SDK_INSTALL_DIR\" : \"${ZEPHYR_SDK_INSTALL_DIR}\"}") | ||
message("${json}") | ||
else() | ||
message(STATUS "ZEPHYR_TOOLCHAIN_VARIANT: ${ZEPHYR_TOOLCHAIN_VARIANT}") | ||
if(DEFINED SDK_VERSION) | ||
message(STATUS "SDK_VERSION: ${SDK_VERSION}") | ||
endif() | ||
|
||
if(DEFINED ZEPHYR_SDK_INSTALL_DIR) | ||
message(STATUS "ZEPHYR_SDK_INSTALL_DIR : ${ZEPHYR_SDK_INSTALL_DIR}") | ||
endif() | ||
endif() | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters