ZEPHYR_SDK_INSTALL_DIR is set from the env if it is not passed explicitly to cmake, but one usage was reading directly from the env, not allowing passing the var to cmake instead. Change find_package of Zephyr-sdk to read from cmake var not env var. Signed-off-by: Jeremy Bettis <jbettis@google.com>
152 lines
6.2 KiB
CMake
152 lines
6.2 KiB
CMake
# 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
|
|
|
|
include_guard(GLOBAL)
|
|
|
|
# This is the minimum required Zephyr-SDK version which supports CMake package
|
|
set(TOOLCHAIN_ZEPHYR_MINIMUM_REQUIRED_VERSION 0.13.1)
|
|
|
|
# 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()
|
|
|
|
# Keep XCC_USE_CLANG behaviour for a while.
|
|
if ("${ZEPHYR_TOOLCHAIN_VARIANT}" STREQUAL "xcc"
|
|
AND "$ENV{XCC_USE_CLANG}" STREQUAL "1")
|
|
set(ZEPHYR_TOOLCHAIN_VARIANT xcc-clang)
|
|
message(STATUS "XCC_USE_CLANG is deprecated. Please set ZEPHYR_TOOLCHAIN_VARIANT to 'xcc-clang'")
|
|
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
|
|
# Until we completely deprecate it
|
|
if(("zephyr" STREQUAL ${ZEPHYR_TOOLCHAIN_VARIANT}) OR
|
|
(NOT DEFINED ZEPHYR_TOOLCHAIN_VARIANT) 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} REQUIRED QUIET HINTS ${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} REQUIRED 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.")
|
|
else()
|
|
# Note: When CMake minimum 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
|
|
")
|
|
|
|
endif()
|
|
|
|
if(DEFINED ZEPHYR_SDK_INSTALL_DIR)
|
|
# Cache the Zephyr SDK install dir.
|
|
set(ZEPHYR_SDK_INSTALL_DIR ${ZEPHYR_SDK_INSTALL_DIR} CACHE PATH "Zephyr SDK install directory")
|
|
# Use the Zephyr SDK host-tools.
|
|
set(ZEPHYR_SDK_HOST_TOOLS TRUE)
|
|
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()
|