162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Print the linker 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# Convert the version string x.y.z to a canonical 5 or 6-digit form. 1062306a36Sopenharmony_ciget_canonical_version() 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci IFS=. 1362306a36Sopenharmony_ci set -- $1 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci # If the 2nd or 3rd field is missing, fill it with a zero. 1662306a36Sopenharmony_ci # 1762306a36Sopenharmony_ci # The 4th field, if present, is ignored. 1862306a36Sopenharmony_ci # This occurs in development snapshots as in 2.35.1.20201116 1962306a36Sopenharmony_ci echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0})) 2062306a36Sopenharmony_ci} 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciorig_args="$@" 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci# Get the first line of the --version output. 2562306a36Sopenharmony_ciIFS=' 2662306a36Sopenharmony_ci' 2762306a36Sopenharmony_ciset -- $(LC_ALL=C "$@" --version) 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci# Split the line on spaces. 3062306a36Sopenharmony_ciIFS=' ' 3162306a36Sopenharmony_ciset -- $1 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cimin_tool_version=$(dirname $0)/min-tool-version.sh 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciif [ "$1" = GNU -a "$2" = ld ]; then 3662306a36Sopenharmony_ci shift $(($# - 1)) 3762306a36Sopenharmony_ci version=$1 3862306a36Sopenharmony_ci min_version=$($min_tool_version binutils) 3962306a36Sopenharmony_ci name=BFD 4062306a36Sopenharmony_ci disp_name="GNU ld" 4162306a36Sopenharmony_cielif [ "$1" = GNU -a "$2" = gold ]; then 4262306a36Sopenharmony_ci echo "gold linker is not supported as it is not capable of linking the kernel proper." >&2 4362306a36Sopenharmony_ci exit 1 4462306a36Sopenharmony_cielse 4562306a36Sopenharmony_ci while [ $# -gt 1 -a "$1" != "LLD" ]; do 4662306a36Sopenharmony_ci shift 4762306a36Sopenharmony_ci done 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci if [ "$1" = LLD ]; then 5062306a36Sopenharmony_ci version=$2 5162306a36Sopenharmony_ci min_version=$($min_tool_version llvm) 5262306a36Sopenharmony_ci name=LLD 5362306a36Sopenharmony_ci disp_name=LLD 5462306a36Sopenharmony_ci else 5562306a36Sopenharmony_ci echo "$orig_args: unknown linker" >&2 5662306a36Sopenharmony_ci exit 1 5762306a36Sopenharmony_ci fi 5862306a36Sopenharmony_cifi 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci# Some distributions append a package release number, as in 2.34-4.fc32 6162306a36Sopenharmony_ci# Trim the hyphen and any characters that follow. 6262306a36Sopenharmony_civersion=${version%-*} 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cicversion=$(get_canonical_version $version) 6562306a36Sopenharmony_cimin_cversion=$(get_canonical_version $min_version) 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ciif [ "$cversion" -lt "$min_cversion" ]; then 6862306a36Sopenharmony_ci echo >&2 "***" 6962306a36Sopenharmony_ci echo >&2 "*** Linker is too old." 7062306a36Sopenharmony_ci echo >&2 "*** Your $disp_name version: $version" 7162306a36Sopenharmony_ci echo >&2 "*** Minimum $disp_name version: $min_version" 7262306a36Sopenharmony_ci echo >&2 "***" 7362306a36Sopenharmony_ci exit 1 7462306a36Sopenharmony_cifi 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ciecho $name $cversion 77