zephyr/cmake/modules/Findarmclang.cmake
Torsten Rasmussen 25d82ddead cmake: armclang version detection
The armclang version detection introduced in #55133 does not correctly
detect a valid ARM Compiler (armclang) installation in all situations.

When ARM Compiler for Embedded is installed as part of ARM-DS or Keil,
then it may report itself in following output:
> Product: Arm Development Studio ... <year>.<no>
> Component: ARM Compiler x.y(.z)
> Tool: armclang [...]
>
> Target: ...

Correct the version extraction by turning each line into a list of
strings which can then be looped to find the ARM compiler component to
ensure the correct line is used for retrieving the version information.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
2023-09-13 16:23:30 +02:00

35 lines
1.1 KiB
CMake

# SPDX-License-Identifier: Apache-2.0
#
# Copyright (c) 2023 Intel Corporation
#
# Findarmclang module for locating arm clang compiler.
#
# The module defines the following variables:
#
# 'armclang_FOUND', 'ARMCLANG_FOUND'
# True if the arm clang toolchain/compiler was found.
#
# 'ARMCLANG_VERSION'
# The version of the arm clang toolchain.
include(FindPackageHandleStandardArgs)
if(CMAKE_C_COMPILER)
# Parse the 'clang --version' output to find the installed version.
execute_process(COMMAND ${CMAKE_C_COMPILER} --target=${triple} --version OUTPUT_VARIABLE ARMCLANG_VERSION ERROR_QUIET)
string(REPLACE "\n" ";" armclang_version_list "${ARMCLANG_VERSION}")
set(ARMCLANG_VERSION ARMCLANG_VERSION-NOTFOUND)
foreach(line ${armclang_version_list})
# Compiler version is either terminated directly, or followed by space and extra build info.
if(line MATCHES ".*[aA]rm [cC]ompiler[^0-9]*([0-9.]+)($| .*$)")
set(ARMCLANG_VERSION "${CMAKE_MATCH_1}")
break()
endif()
endforeach()
endif()
find_package_handle_standard_args(armclang
REQUIRED_VARS CMAKE_C_COMPILER
VERSION_VAR ARMCLANG_VERSION
)