Files
gps/tools/doctor.sh
T

59 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -u
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
# shellcheck source=../source.sh
source "$repo_dir/source.sh"
status=0
check() {
local label="$1"
local command_path="$2"
shift 2
if [[ -n "$command_path" && -x "$command_path" ]] && "$command_path" "$@" >/dev/null 2>&1; then
printf 'OK %-10s %s\n' "$label" "$command_path"
else
printf 'MISSING %-10s %s\n' "$label" "${command_path:-not found}"
status=1
fi
}
printf 'Project: %s\n' "$GPS_ROOT"
printf 'Platform: %s-%s\n' "$(uname -s)" "$(uname -m)"
check java "$JAVA_HOME/bin/java" -version
check mill "$MILL" --version
check firtool "$FIRTOOL" --version
riscv_gcc=""
if [[ -n "$TOOLCHAIN" ]]; then
riscv_gcc="$TOOLCHAIN/${RISCV_PREFIX}gcc"
fi
check riscv-gcc "$riscv_gcc" --version
if [[ -n "$riscv_gcc" && -x "$riscv_gcc" ]]; then
medany_dir="$(mktemp -d "${TMPDIR:-/tmp}/gps-medany-check.XXXXXXXX")"
printf '%s\n' \
'#include <stdlib.h>' \
'void _start(void) { void *p = malloc(16); free(p); for (;;) {} }' \
> "$medany_dir/check.c"
if "$riscv_gcc" \
-march=rv64imafdc_zicsr_zifencei -mabi=lp64d -mcmodel=medany \
-Os -ffreestanding -fno-builtin -static -nostartfiles \
-Wl,-Ttext=0x80000000 -Wl,--unresolved-symbols=ignore-all \
"$medany_dir/check.c" -Wl,--start-group -lc -lgcc -Wl,--end-group \
-o "$medany_dir/check.elf" >/dev/null 2>&1; then
printf 'OK %-10s %s\n' riscv-libc 'medany @ 0x80000000'
else
printf 'INCOMPAT %-10s %s\n' riscv-libc \
'libc is not medany; select RISCV_TOOLCHAIN=/tools/toolchains/rvtc-medany'
status=1
fi
rm -rf "$medany_dir"
fi
if [[ "$(uname -s)" != Linux || "$(uname -m)" != x86_64 ]]; then
printf 'WARNING Kilitli JDK/CIRCT paketleri Linux-x86_64 icindir.\n'
fi
exit "$status"