diff options
Diffstat (limited to 'sysdeps/riscv/preconfigure')
-rw-r--r-- | sysdeps/riscv/preconfigure | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/sysdeps/riscv/preconfigure b/sysdeps/riscv/preconfigure new file mode 100644 index 0000000000..d9adb31b64 --- /dev/null +++ b/sysdeps/riscv/preconfigure @@ -0,0 +1,71 @@ +case "$machine" in +riscv*) + xlen=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __riscv_xlen \(.*\)/\1/p'` + flen=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __riscv_flen \(.*\)/\1/p'` + float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __riscv_float_abi_\([^ ]*\) .*/\1/p'` + atomic=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep '#define __riscv_atomic' | cut -d' ' -f2` + + case "$xlen" in + 32) + echo "glibc does not yet support 32-bit systems" >&2 + exit 1 + ;; + 64) + ;; + *) + echo "Unable to determine XLEN" >&2 + exit 1 + ;; + esac + + case "$flen" in + 64) + float_machine=rvd + with_fp_cond=1 + ;; + 32) + echo "glibc does not yet support systems with the F but not D extensions" >&2 + exit 1 + ;; + "") + with_fp_cond=0 + ;; + *) + echo "Unable to determine FLEN" >&2 + exit 1 + ;; + esac + + case "$float_abi" in + soft) + abi_flen=0 + ;; + single) + echo "glibc does not yet support the single floating-point ABI" >&2 + exit 1 + ;; + double) + abi_flen=64 + ;; + *) + echo "Unable to determine floating-point ABI" >&2 + exit 1 + ;; + esac + + case "$atomic" in + __riscv_atomic) + ;; + *) + echo "glibc requires the A extension" >&2 + exit 1 + ;; + esac + + base_machine=riscv + machine=riscv/rv$xlen/$float_machine + + $as_echo "#define RISCV_ABI_XLEN $xlen" >>confdefs.h + $as_echo "#define RISCV_ABI_FLEN $abi_flen" >>confdefs.h + ;; +esac |