162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Print the C compiler name and its version in a 5 or 6-digit form. 562306a36Sopenharmony_ci# Also, perform the minimum version check. 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciset -e 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci# Print the C compiler name and some version components. 1062306a36Sopenharmony_ciget_c_compiler_info() 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci cat <<- EOF | "$@" -E -P -x c - 2>/dev/null 1362306a36Sopenharmony_ci #if defined(__clang__) 1462306a36Sopenharmony_ci Clang __clang_major__ __clang_minor__ __clang_patchlevel__ 1562306a36Sopenharmony_ci #elif defined(__GNUC__) 1662306a36Sopenharmony_ci GCC __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__ 1762306a36Sopenharmony_ci #else 1862306a36Sopenharmony_ci unknown 1962306a36Sopenharmony_ci #endif 2062306a36Sopenharmony_ci EOF 2162306a36Sopenharmony_ci} 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci# Convert the version string x.y.z to a canonical 5 or 6-digit form. 2462306a36Sopenharmony_ciget_canonical_version() 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci IFS=. 2762306a36Sopenharmony_ci set -- $1 2862306a36Sopenharmony_ci echo $((10000 * $1 + 100 * $2 + $3)) 2962306a36Sopenharmony_ci} 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci# $@ instead of $1 because multiple words might be given, e.g. CC="ccache gcc". 3262306a36Sopenharmony_ciorig_args="$@" 3362306a36Sopenharmony_ciset -- $(get_c_compiler_info "$@") 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciname=$1 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cimin_tool_version=$(dirname $0)/min-tool-version.sh 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cicase "$name" in 4062306a36Sopenharmony_ciGCC) 4162306a36Sopenharmony_ci version=$2.$3.$4 4262306a36Sopenharmony_ci min_version=$($min_tool_version gcc) 4362306a36Sopenharmony_ci ;; 4462306a36Sopenharmony_ciClang) 4562306a36Sopenharmony_ci version=$2.$3.$4 4662306a36Sopenharmony_ci min_version=$($min_tool_version llvm) 4762306a36Sopenharmony_ci ;; 4862306a36Sopenharmony_ci*) 4962306a36Sopenharmony_ci echo "$orig_args: unknown C compiler" >&2 5062306a36Sopenharmony_ci exit 1 5162306a36Sopenharmony_ci ;; 5262306a36Sopenharmony_ciesac 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cicversion=$(get_canonical_version $version) 5562306a36Sopenharmony_cimin_cversion=$(get_canonical_version $min_version) 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciif [ "$cversion" -lt "$min_cversion" ]; then 5862306a36Sopenharmony_ci echo >&2 "***" 5962306a36Sopenharmony_ci echo >&2 "*** C compiler is too old." 6062306a36Sopenharmony_ci echo >&2 "*** Your $name version: $version" 6162306a36Sopenharmony_ci echo >&2 "*** Minimum $name version: $min_version" 6262306a36Sopenharmony_ci echo >&2 "***" 6362306a36Sopenharmony_ci exit 1 6462306a36Sopenharmony_cifi 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ciecho $name $cversion 67