1aec6c60aSMasahiro Yamada#!/bin/sh 2aec6c60aSMasahiro Yamada# SPDX-License-Identifier: GPL-2.0 3aec6c60aSMasahiro Yamada# 4*2f7ab126SMiguel Ojeda# Print the C compiler name and its version in a 5 or 6-digit form. 5aec6c60aSMasahiro Yamada# Also, perform the minimum version check. 6aec6c60aSMasahiro Yamada 7aec6c60aSMasahiro Yamadaset -e 8aec6c60aSMasahiro Yamada 9*2f7ab126SMiguel Ojeda# Print the C compiler name and some version components. 10*2f7ab126SMiguel Ojedaget_c_compiler_info() 11aec6c60aSMasahiro Yamada{ 12aec6c60aSMasahiro Yamada cat <<- EOF | "$@" -E -P -x c - 2>/dev/null 13aec6c60aSMasahiro Yamada #if defined(__clang__) 14aec6c60aSMasahiro Yamada Clang __clang_major__ __clang_minor__ __clang_patchlevel__ 15aec6c60aSMasahiro Yamada #elif defined(__GNUC__) 16aec6c60aSMasahiro Yamada GCC __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__ 17aec6c60aSMasahiro Yamada #else 18aec6c60aSMasahiro Yamada unknown 19aec6c60aSMasahiro Yamada #endif 20aec6c60aSMasahiro Yamada EOF 21aec6c60aSMasahiro Yamada} 22aec6c60aSMasahiro Yamada 23aec6c60aSMasahiro Yamada# Convert the version string x.y.z to a canonical 5 or 6-digit form. 24aec6c60aSMasahiro Yamadaget_canonical_version() 25aec6c60aSMasahiro Yamada{ 26aec6c60aSMasahiro Yamada IFS=. 27aec6c60aSMasahiro Yamada set -- $1 28aec6c60aSMasahiro Yamada echo $((10000 * $1 + 100 * $2 + $3)) 29aec6c60aSMasahiro Yamada} 30aec6c60aSMasahiro Yamada 31aec6c60aSMasahiro Yamada# $@ instead of $1 because multiple words might be given, e.g. CC="ccache gcc". 32aec6c60aSMasahiro Yamadaorig_args="$@" 33*2f7ab126SMiguel Ojedaset -- $(get_c_compiler_info "$@") 34aec6c60aSMasahiro Yamada 35aec6c60aSMasahiro Yamadaname=$1 36aec6c60aSMasahiro Yamada 37e24b3ffcSMasahiro Yamadamin_tool_version=$(dirname $0)/min-tool-version.sh 38e24b3ffcSMasahiro Yamada 39aec6c60aSMasahiro Yamadacase "$name" in 40aec6c60aSMasahiro YamadaGCC) 41aec6c60aSMasahiro Yamada version=$2.$3.$4 42e24b3ffcSMasahiro Yamada min_version=$($min_tool_version gcc) 43aec6c60aSMasahiro Yamada ;; 44aec6c60aSMasahiro YamadaClang) 45aec6c60aSMasahiro Yamada version=$2.$3.$4 46e24b3ffcSMasahiro Yamada min_version=$($min_tool_version llvm) 47aec6c60aSMasahiro Yamada ;; 48aec6c60aSMasahiro Yamada*) 49*2f7ab126SMiguel Ojeda echo "$orig_args: unknown C compiler" >&2 50aec6c60aSMasahiro Yamada exit 1 51aec6c60aSMasahiro Yamada ;; 52aec6c60aSMasahiro Yamadaesac 53aec6c60aSMasahiro Yamada 54aec6c60aSMasahiro Yamadacversion=$(get_canonical_version $version) 55aec6c60aSMasahiro Yamadamin_cversion=$(get_canonical_version $min_version) 56aec6c60aSMasahiro Yamada 57aec6c60aSMasahiro Yamadaif [ "$cversion" -lt "$min_cversion" ]; then 58aec6c60aSMasahiro Yamada echo >&2 "***" 59*2f7ab126SMiguel Ojeda echo >&2 "*** C compiler is too old." 60aec6c60aSMasahiro Yamada echo >&2 "*** Your $name version: $version" 61aec6c60aSMasahiro Yamada echo >&2 "*** Minimum $name version: $min_version" 62aec6c60aSMasahiro Yamada echo >&2 "***" 63aec6c60aSMasahiro Yamada exit 1 64aec6c60aSMasahiro Yamadafi 65aec6c60aSMasahiro Yamada 66aec6c60aSMasahiro Yamadaecho $name $cversion 67