mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 06:02:11 +02:00

The docker images all have new, simpler names and use Ubuntu 20.04 (instead of 18.04) as their base. A few new tools have been added, specifically what is needed for: - Linux on RISC-V - see #980 - Winodows on ARM - see #969 Fixes #976
72 lines
2.9 KiB
Bash
Executable file
72 lines
2.9 KiB
Bash
Executable file
#!/bin/bash
|
|
###############################################################################
|
|
# Copyright (c) 2020, 2024 Kichwa Coders Canada Inc and others.
|
|
#
|
|
# This program and the accompanying materials
|
|
# are made available under the terms of the Eclipse Public License 2.0
|
|
# which accompanies this distribution, and is available at
|
|
# https://www.eclipse.org/legal/epl-2.0/
|
|
#
|
|
# SPDX-License-Identifier: EPL-2.0
|
|
###############################################################################
|
|
|
|
set -eu
|
|
|
|
SCRIPT=$( basename "${BASH_SOURCE[0]}" )
|
|
|
|
if ! command -v aarch64-linux-gnu-readelf &> /dev/null
|
|
then
|
|
echo "WARNING: Skipping ${SCRIPT} because aarch/powerpc cross compiler tools are not available"
|
|
exit 0
|
|
fi
|
|
|
|
|
|
###
|
|
# Check that all .so files in CDT for a given ${ARCH} (using ${PREFIX} toolchain)
|
|
# use glibc symbols no greater than ${ALLOWED_GLIBC_VERSION} and depend on
|
|
# no libs other than ${ALLOWED_LIBS}
|
|
function check {
|
|
ARCH=$1; shift
|
|
PREFIX=$1; shift
|
|
ALLOWED_GLIBC_VERSION=$1; shift
|
|
ALLOWED_LIBS="$@"; shift
|
|
ret_code=0
|
|
while read line; do
|
|
echo "checking ${line}"
|
|
${PREFIX}-linux-gnu-readelf -d ${line} | grep -E '\(NEEDED\)' | while read needed; do
|
|
needed=${needed//*Shared library: [/}
|
|
needed=${needed//]*/}
|
|
if [[ ! " ${ALLOWED_LIBS} " =~ " ${needed} " ]]; then
|
|
echo "ERROR: $line has illegal dependency of ${needed}"
|
|
ret_code=1
|
|
fi
|
|
done
|
|
|
|
# The way the version check is done is that all symbol version info is extracted
|
|
# from relocations match @GLIBC_*, the versions are sorted with the max
|
|
# allowed version added to the list too. And then we check the last entry in
|
|
# the list to make sure it is == to max allowed version.
|
|
${PREFIX}-linux-gnu-objdump -R ${line} | grep @GLIBC_ | while read version; do
|
|
echo ${version//*@GLIBC_}
|
|
done > /tmp/version_check
|
|
echo ${ALLOWED_GLIBC_VERSION} >> /tmp/version_check
|
|
max_version_in_use=$(cat /tmp/version_check | sort --unique --version-sort | tail -n1)
|
|
if [ "$max_version_in_use" != "$ALLOWED_GLIBC_VERSION" ]; then
|
|
echo "ERROR: $line has dependency on glibc greater than allowed version of ${ALLOWED_GLIBC_VERSION} for at least the following symbols"
|
|
# This only lists greatest version number symbols
|
|
${PREFIX}-linux-gnu-objdump -R ${line} | grep @GLIBC_${max_version_in_use}
|
|
ret_code=1
|
|
fi
|
|
done <<<$(git ls-files **/linux/${ARCH}/\*.so)
|
|
return ${ret_code}
|
|
}
|
|
|
|
|
|
exit_code=0
|
|
# This is the current set of allowed so dependencies for CDT code. Additional entries here are permitted,
|
|
# provided they are found on all Linux machines by default.
|
|
check aarch64 aarch64 2.31 libc.so.6 ld-linux-aarch64.so.1 || exit_code=1
|
|
check x86_64 x86_64 2.31 libc.so.6 || exit_code=1
|
|
check ppc64le powerpc64le 2.31 libc.so.6 || exit_code=1
|
|
|
|
exit ${exit_code}
|