diff --git a/cmake/Zephyr-sdkConfig.cmake b/cmake/Zephyr-sdkConfig.cmake index a5f41049..5e767538 100644 --- a/cmake/Zephyr-sdkConfig.cmake +++ b/cmake/Zephyr-sdkConfig.cmake @@ -11,8 +11,28 @@ set(SDK_MAJOR_MINOR_MICRO ${SDK_VERSION}) get_filename_component(ZEPHYR_SDK_INSTALL_DIR ${CMAKE_CURRENT_LIST_DIR}/.. ABSOLUTE) set(ZEPHYR_SDK_INSTALL_DIR ${ZEPHYR_SDK_INSTALL_DIR}) -set(ZEPHYR_TOOLCHAIN_VARIANT zephyr) + +if(ZEPHYR_TOOLCHAIN_VARIANT STREQUAL "zephyr") + set(ZEPHYR_TOOLCHAIN_VARIANT "zephyr-gnu") +endif() + +if(NOT DEFINED ZEPHYR_TOOLCHAIN_VARIANT) + file(GLOB use_gnu "${ZEPHYR_SDK_INSTALL_DIR}/gnu/*/bin/*zephyr-*-gcc") + if(use_gnu) + set(ZEPHYR_TOOLCHAIN_VARIANT zephyr-gnu) + elseif(EXISTS "${ZEPHYR_SDK_INSTALL_DIR}/llvm/bin/clang") + set(ZEPHYR_TOOLCHAIN_VARIANT zephyr-llvm) + else() + # We are in a Zephyr-sdk but gnu nor llvm was properly detected. + # Warn the user and set toolchain to zephyr-gnu. + message(WARNING + "Zephyr SDK found in ${ZEPHYR_SDK_INSTALL_DIR} but gcc nor clang was properly detected.\n" + "Please check you Zephyr SDK installation. Defaulting to 'zephyr-gnu'" + ) + set(ZEPHYR_TOOLCHAIN_VARIANT zephyr-gnu) + endif() +endif() # Those are CMake package parameters. set(Zephyr-sdk_FOUND True) -set(Zephyr-sdk_DIR ${ZEPHYR_SDK_INSTALL_DIR}) +set(Zephyr-sdk_dir ${ZEPHYR_SDK_INSTALL_DIR}) diff --git a/cmake/Zephyr-sdkConfigVersion.cmake b/cmake/Zephyr-sdkConfigVersion.cmake index bfa09f22..db020004 100644 --- a/cmake/Zephyr-sdkConfigVersion.cmake +++ b/cmake/Zephyr-sdkConfigVersion.cmake @@ -11,21 +11,27 @@ string(STRIP ${SDK_VERSION} PACKAGE_VERSION) if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() - # Currently, this Zephyr SDK is expected to work with any Zephyr project - # requiring this version or any older version. - # - # In case this version of Zephyr SDK is no longer backwards compatible with - # previous versions of Zephyr SDK, this is the place to test if the caller - # requested an older (incompatible) revision. - # For example, imagine caller requests Zephyr SDK v0.10, and this Zephyr SDK - # is revision v0.11, then the below snippet can be activated to ensure that - # this Zephyr SDK (v0.11) is marked as not compatible if caller requested an - # older version, like v0.10 - # set(ZEPHYR_SDK_MINIMUM_COMPATIBLE_VERSION 0.11) - # if(PACKAGE_FIND_VERSION VERSION_LESS ZEPHYR_SDK_MINIMUM_COMPATIBLE_VERSION) - # set(PACKAGE_VERSION_COMPATIBLE FALSE) - # return() - # endif() + # This Zephyr SDK will not work with Zephyr projects requiring Zephyr SDK <0.18.x + set(ZEPHYR_SDK_MINIMUM_COMPATIBLE_VERSION 0.18) + if(PACKAGE_FIND_VERSION VERSION_LESS ZEPHYR_SDK_MINIMUM_COMPATIBLE_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + return() + endif() + + # Basic validation if user requests 'zephyr-gnu' ('zephyr') or 'zephyr-llvm'. + # We must ensure gcc is available, likewise with clang. + if(ZEPHYR_TOOLCHAIN_VARIANT STREQUAL "zephyr-gnu" OR ZEPHYR_TOOLCHAIN_VARIANT STREQUAL "zephyr") + file(GLOB has_gnu "${CMAKE_CURRENT_LIST_DIR}/../gnu/*/bin/*zephyr-*-gcc") + if(NOT has_gnu) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + return() + endif() + elseif(ZEPHYR_TOOLCHAIN_VARIANT STREQUAL "zephyr-llvm") + if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../llvm/bin/clang") + set(PACKAGE_VERSION_COMPATIBLE FALSE) + return() + endif() + endif() set(PACKAGE_VERSION_COMPATIBLE TRUE) if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)