1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/dist/tools/ci/print_toolchain_versions.sh
Marian Buschsieweke 147945402c
dist/tools/ci/print_toolchain_versions.sh: Update
This drops support for the legacy riscv-none-embed target triple. That
value has been incorrect since the beginning and the toolchain that
used that has been long declared obsolete and is fairly outdated.

With our CI updating the toolchain, we no longer need to check for
that.
2024-02-12 20:40:30 +01:00

181 lines
4.6 KiB
Bash
Executable File

#!/usr/bin/env bash
MAKE=${MAKE:-make}
get_cmd_version() {
if [ -z "$1" ]; then
return
fi
VERSION_RAW=$( ($@ --version) 2>&1)
ERR=$?
VERSION=$(echo "$VERSION_RAW" | head -n 1)
if [ $ERR -eq 127 ] ; then # 127 means command not found
VERSION="missing"
elif [ $ERR -ne 0 ] ; then
VERSION="error: ${VERSION}"
fi
printf "%s" "$VERSION"
}
get_define() {
local cc="$1"
local line=
if command -v "$cc" 2>&1 >/dev/null; then
line=$(echo "$3" | "$cc" -x c -include "$2" -E -o - - 2>/dev/null | sed -e '/^[ ]*#/d' -e '/^[ ]*$/d')
fi
if [ -z "$line" ]; then
line=missing
fi
printf "%s" "$line"
}
get_kernel_info() {
uname -mprs
}
get_os_info() {
local os="$(uname -s)"
local osname="unknown"
local osvers="unknown"
if [ "$os" = "Linux" ]; then
osname="$(cat /etc/os-release | grep ^NAME= | awk -F'=' '{print $2}')"
osvers="$(cat /etc/os-release | grep ^VERSION= | awk -F'=' '{print $2}')"
elif [ "$os" = "Darwin" ]; then
osname="$(sw_vers -productName)"
osvers="$(sw_vers -productVersion)"
elif [ "$os" = "FreeBSD" ]; then
osname="$os"
osvers="$(freebsd-version)"
fi
printf "%s %s" "$osname" "$osvers"
}
extract_shell_version() {
SHELL_NAME=$"(basename $1)"
SHELL_VERSION="$($1 --version 2>/dev/null)"
ERR=$?
if [ $ERR -ne 0 ] ; then # if it does not like the --version switch, it is probably dash
printf "%s" "$1"
# we do not say "probably dash" if we are sure it IS dash
if [ "$SHELL_NAME" != dash ] ; then
printf " (probably dash)"
fi
else
printf "%s" "$(echo "$SHELL_VERSION" | head -n 1)"
fi
}
get_sys_shell() {
case "$(uname -s)" in
MINGW*)
# MINGW has no realpath, but also no (meaningful) symlinks
SH_PATH=/bin/sh
;;
*)
SH_PATH="$(realpath /bin/sh)"
;;
esac
extract_shell_version "$SH_PATH"
}
_get_make_shell() {
${MAKE} -sf - --no-print-directory 2>/dev/null <<MAKEFILE
\$(info \$(realpath \$(SHELL)))
MAKEFILE
}
get_make_shell() {
extract_shell_version "$(_get_make_shell)"
}
newlib_version() {
if [ -z "$1" ]; then
printf "%s" "error"
else
local cc="$1"
printf "%s" "$(get_define "$cc" newlib.h _NEWLIB_VERSION)"
fi
}
avr_libc_version() {
if [ -z "$1" ]; then
printf "%s" "error"
else
local cc="$1"
printf "%s (%s)" "$(get_define "$cc" avr/version.h __AVR_LIBC_VERSION_STRING__)" "$(get_define "$cc" avr/version.h __AVR_LIBC_DATE_STRING__)"
fi
}
printf "\n"
# print operating system information
printf "%s\n" "Operating System Environment"
printf "%s\n" "----------------------------"
printf "%25s: %s\n" "Operating System" "$(get_os_info)"
printf "%25s: %s\n" "Kernel" "$(get_kernel_info)"
printf "%25s: %s\n" "System shell" "$(get_sys_shell)"
printf "%25s: %s\n" "make's shell" "$(get_make_shell)"
printf "\n"
printf "%s\n" "Installed compiler toolchains"
printf "%s\n" "-----------------------------"
printf "%25s: %s\n" "native gcc" "$(get_cmd_version gcc)"
for p in \
arm-none-eabi \
avr \
msp430-elf \
riscv-none-elf \
riscv64-unknown-elf \
riscv32-esp-elf \
xtensa-esp32-elf \
xtensa-esp32s2-elf \
xtensa-esp32s3-elf \
xtensa-esp8266-elf \
; do
printf "%25s: %s\n" "$p-gcc" "$(get_cmd_version ${p}-gcc)"
done
printf "%25s: %s\n" "clang" "$(get_cmd_version clang)"
printf "\n"
printf "%s\n" "Installed compiler libs"
printf "%s\n" "-----------------------"
# platform specific newlib version
for p in \
arm-none-eabi \
msp430-elf \
riscv-none-elf \
riscv64-unknown-elf \
riscv32-esp-elf \
xtensa-esp32-elf \
xtensa-esp32s2-elf \
xtensa-esp32s3-elf \
xtensa-esp8266-elf \
; do
printf "%25s: %s\n" "$p-newlib" "$(newlib_version ${p}-gcc)"
done
# avr libc version
printf "%25s: %s\n" "avr-libc" "$(avr_libc_version avr-gcc)"
# tools
printf "\n"
printf "%s\n" "Installed development tools"
printf "%s\n" "---------------------------"
for c in \
ccache \
cmake \
cppcheck \
doxygen \
git \
${MAKE} \
openocd \
python \
python2 \
python3 \
; do
printf "%25s: %s\n" "$c" "$(get_cmd_version "${c}")"
done
printf "%25s: %s\n" "flake8" "$(get_cmd_version "python3 -Wignore -m flake8")"
printf "%25s: %s\n" "coccinelle" "$(get_cmd_version spatch)"
exit 0