45 lines
2.0 KiB
CMake
45 lines
2.0 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# Purpose of the generic.cmake is to define a generic C compiler which can be
|
|
# used for devicetree pre-processing and other pre-processing tasks which must
|
|
# be performed before the target can be determined.
|
|
|
|
# Todo: deprecate CLANG_ROOT_DIR
|
|
set_ifndef(LLVM_TOOLCHAIN_PATH "$ENV{CLANG_ROOT_DIR}")
|
|
zephyr_get(LLVM_TOOLCHAIN_PATH)
|
|
|
|
if(LLVM_TOOLCHAIN_PATH)
|
|
set(TOOLCHAIN_HOME ${LLVM_TOOLCHAIN_PATH}/bin/)
|
|
endif()
|
|
|
|
set(LLVM_TOOLCHAIN_PATH ${CLANG_ROOT_DIR} CACHE PATH "clang install directory")
|
|
|
|
set(COMPILER clang)
|
|
set(BINTOOLS llvm)
|
|
|
|
# LLVM is flexible, meaning that it can in principle always support newlib or picolibc.
|
|
# This is not decided by LLVM itself, but depends on libraries distributed with the installation.
|
|
# Also newlib or picolibc may be created as add-ons. Thus always stating that LLVM does not have
|
|
# newlib or picolibc would be wrong. Same with stating that LLVM has newlib or Picolibc.
|
|
# The best assumption for TOOLCHAIN_HAS_<NEWLIB|PICOLIBC> is to check for the presence of
|
|
# '_newlib_version.h' / 'picolibc' and have the default value set accordingly.
|
|
# This provides a best effort mechanism to allow developers to have the newlib C / Picolibc library
|
|
# selection available in Kconfig.
|
|
# Developers can manually indicate library support with '-DTOOLCHAIN_HAS_<NEWLIB|PICOLIBC>=<ON|OFF>'
|
|
|
|
# Support for newlib is indicated by the presence of '_newlib_version.h' in the toolchain path.
|
|
if(NOT LLVM_TOOLCHAIN_PATH STREQUAL "")
|
|
file(GLOB_RECURSE newlib_header ${LLVM_TOOLCHAIN_PATH}/_newlib_version.h)
|
|
if(newlib_header)
|
|
set(TOOLCHAIN_HAS_NEWLIB ON CACHE BOOL "True if toolchain supports newlib")
|
|
endif()
|
|
|
|
# Support for picolibc is indicated by the presence of 'picolibc.h' in the toolchain path.
|
|
file(GLOB_RECURSE picolibc_header ${LLVM_TOOLCHAIN_PATH}/picolibc.h)
|
|
if(picolibc_header)
|
|
set(TOOLCHAIN_HAS_PICOLIBC ON CACHE BOOL "True if toolchain supports picolibc")
|
|
endif()
|
|
endif()
|
|
|
|
message(STATUS "Found toolchain: llvm (clang/ld)")
|