# SPDX-License-Identifier: Apache-2.0 # # Copyright (c) 2022, Nordic Semiconductor ASA # FindZephyr-sdk module for supporting module search mode of Zephyr SDK. # # Its purpose is to allow the find_package basic signature mode to lookup Zephyr # SDK and based on user / environment settings of selected toolchain decide if # the Zephyr SDK CMake package should be loaded. # # It extends the Zephyr-sdk CMake package by providing more flexibility in when # the Zephyr SDK is loaded and loads additional host tools from the Zephyr SDK. # # The module defines the following variables: # # 'ZEPHYR_SDK_INSTALL_DIR' # Install location of the Zephyr SDK # # 'ZEPHYR_TOOLCHAIN_VARIANT' # Zephyr toolchain variant to use if not defined already. # # 'Zephyr-sdk_FOUND' # True if the Zephyr SDK was found. # 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() # Load 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) 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 ${Zephyr-sdk_FIND_VERSION} REQUIRED QUIET CONFIG 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 ${Zephyr-sdk_FIND_VERSION} REQUIRED QUIET CONFIG 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(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") endif() if(Zephyr-sdk_FOUND) include(${ZEPHYR_SDK_INSTALL_DIR}/cmake/zephyr/host-tools.cmake) message(STATUS "Found host-tools: zephyr ${SDK_VERSION} (${ZEPHYR_SDK_INSTALL_DIR})") endif()