diff --git a/CMakeLists.txt b/CMakeLists.txt index 240acda3cbd..a31b6172fdf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -407,7 +407,8 @@ zephyr_compile_options(${COMPILER_OPT_AS_LIST}) # TODO: Include arch compiler options at this point. -if(NOT CMAKE_C_COMPILER_ID STREQUAL "Clang") +if(NOT CMAKE_C_COMPILER_ID STREQUAL "Clang" AND + NOT CMAKE_C_COMPILER_ID STREQUAL "IntelLLVM") # GCC assumed zephyr_cc_option(-fno-reorder-functions) diff --git a/cmake/bintools/oneApi/target.cmake b/cmake/bintools/oneApi/target.cmake index 4b69900f068..488e2345e9f 100644 --- a/cmake/bintools/oneApi/target.cmake +++ b/cmake/bintools/oneApi/target.cmake @@ -1,12 +1,18 @@ # SPDX-License-Identifier: Apache-2.0 if(DEFINED TOOLCHAIN_HOME) - set(find_program_clang_args PATHS ${TOOLCHAIN_HOME} ${ONEAPI_PYTHON_PATH} NO_DEFAULT_PATH) + set(find_program_clang_args PATHS ${TOOLCHAIN_HOME} ${ONEAPI_LLVM_BIN_PATH} NO_DEFAULT_PATH) set(find_program_binutils_args PATHS ${TOOLCHAIN_HOME} ) endif() +find_package(oneApi 2023.0.0 REQUIRED) + find_program(CMAKE_AR llvm-ar ${find_program_clang_args} ) -find_program(CMAKE_NM llvm-nm ${find_program_clang_args} ) +if(ONEAPI_VERSION VERSION_LESS_EQUAL "2023.0.0") + find_program(CMAKE_NM nm ${find_program_binutils_args} ) +else() + find_program(CMAKE_NM llvm-nm ${find_program_clang_args} ) +endif() # In OneApi installation directory on Windows, there is no llvm-objdump # binary, so would better use objdump from system environment both # on Linux and Windows. diff --git a/cmake/modules/FindoneApi.cmake b/cmake/modules/FindoneApi.cmake new file mode 100644 index 00000000000..0b3ff56fbf3 --- /dev/null +++ b/cmake/modules/FindoneApi.cmake @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: Apache-2.0 +# +# Copyright (c) 2023 Intel Corporation +# +# FindoneApi module for locating oneAPI compiler, icx. +# +# The module defines the following variables: +# +# 'oneApi_FOUND', 'ONEAPI_FOUND' +# True if the oneApi toolchain/compiler, icx, was found. +# +# 'ONEAPI_VERSION' +# The version of the oneAPI toolchain. + +if(CMAKE_C_COMPILER) + # Parse the 'clang --version' output to find the installed version. + execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE ONEAPI_VERSION) + string(REGEX REPLACE "[^0-9]*([0-9.]+) .*" "\\1" ONEAPI_VERSION ${ONEAPI_VERSION}) +endif() + +find_package_handle_standard_args(oneApi + REQUIRED_VARS CMAKE_C_COMPILER + VERSION_VAR ONEAPI_VERSION +) diff --git a/cmake/toolchain/oneApi/generic.cmake b/cmake/toolchain/oneApi/generic.cmake index c72a7a873db..d22176ff22a 100644 --- a/cmake/toolchain/oneApi/generic.cmake +++ b/cmake/toolchain/oneApi/generic.cmake @@ -10,7 +10,7 @@ endif() string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} system) if(ONEAPI_TOOLCHAIN_PATH) set(TOOLCHAIN_HOME ${ONEAPI_TOOLCHAIN_PATH}/compiler/latest/${system}/bin/) - set(ONEAPI_PYTHON_PATH ${ONEAPI_TOOLCHAIN_PATH}/intelpython/latest/bin) + set(ONEAPI_LLVM_BIN_PATH ${ONEAPI_TOOLCHAIN_PATH}/compiler/latest/${system}/bin-llvm) endif() set(ONEAPI_TOOLCHAIN_PATH ${ONEAPI_TOOLCHAIN_PATH} CACHE PATH "oneApi install directory") @@ -43,4 +43,6 @@ elseif(system STREQUAL "windows") add_link_options(--target=${triple}) endif() +set(TOOLCHAIN_HAS_NEWLIB OFF CACHE BOOL "True if toolchain supports newlib") + message(STATUS "Found toolchain: host (clang/ld)")