RISC-V: Build infrastructure for 32-bit port

This patch lays out the top-level organisation of the RISC-V 32-bit port.
It provides all the Implies files as well as various other fragments of
the build infrastructure.

Reviewed-by: Maciej W. Rozycki <macro@wdc.com>
This commit is contained in:
Zong Li 2018-11-30 17:18:00 +08:00 committed by Alistair Francis
parent 30b963c143
commit 72dfddeffc
9 changed files with 69 additions and 10 deletions

View File

@ -6,11 +6,7 @@ riscv*)
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)
64 | 32)
;;
*)
echo "Unable to determine XLEN" >&2

View File

@ -0,0 +1 @@
wordsize-32

View File

@ -0,0 +1,3 @@
riscv/rv32/rvf
riscv/rvd
riscv/rvf

View File

@ -0,0 +1 @@
riscv/rvf

View File

@ -7,11 +7,13 @@ ifeq ($(subdir),stdlib)
gen-as-const-headers += ucontext_i.sym
endif
abi-variants := lp64 lp64d
abi-variants := ilp32 ilp32d lp64 lp64d
ifeq (,$(filter $(default-abi),$(abi-variants)))
$(error Unknown ABI $(default-abi), must be one of $(abi-variants))
endif
abi-lp64-condition := defined __LP64__ && defined __riscv_float_abi_soft
abi-lp64d-condition := defined __LP64__ && defined __riscv_float_abi_double
abi-ilp32-condition := __WORDSIZE == 32 && defined __riscv_float_abi_soft
abi-ilp32d-condition := __WORDSIZE == 32 && defined __riscv_float_abi_double
abi-lp64-condition := __WORDSIZE == 64 && defined __riscv_float_abi_soft
abi-lp64d-condition := __WORDSIZE == 64 && defined __riscv_float_abi_double

View File

@ -147,6 +147,17 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
fi
rm -f conftest*
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
$EGREP "4 4 4" >/dev/null 2>&1; then :
libc_cv_riscv_int_abi=ilp32
fi
rm -f conftest*
if test $libc_cv_riscv_int_abi = no; then
as_fn_error $? "Unable to determine integer ABI" "$LINENO" 5
fi
@ -218,6 +229,34 @@ case "$prefix" in
;;
esac
;;
ilp32-riscv/rv32/*)
test -n "$libc_cv_slibdir" ||
case "$prefix" in
/usr | /usr/)
libc_cv_slibdir='/lib32/ilp32'
libc_cv_rtlddir='/lib'
if test "$libdir" = '${exec_prefix}/lib'; then
libdir='${exec_prefix}/lib32/ilp32';
# Locale data can be shared between 32-bit and 64-bit libraries.
libc_cv_complocaledir='${exec_prefix}/lib/locale'
fi
;;
esac
;;
ilp32d-riscv/rv32/*)
test -n "$libc_cv_slibdir" ||
case "$prefix" in
/usr | /usr/)
libc_cv_slibdir='/lib32/ilp32d'
libc_cv_rtlddir='/lib'
if test "$libdir" = '${exec_prefix}/lib'; then
libdir='${exec_prefix}/lib32/ilp32d';
# Locale data can be shared between 32-bit and 64-bit libraries.
libc_cv_complocaledir='${exec_prefix}/lib/locale'
fi
;;
esac
;;
esac
ldd_rewrite_script=sysdeps/unix/sysv/linux/riscv/ldd-rewrite.sed

View File

@ -7,6 +7,8 @@ arch_minimum_kernel=4.15.0
libc_cv_riscv_int_abi=no
AC_EGREP_CPP(4 8 8, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
], libc_cv_riscv_int_abi=lp64)
AC_EGREP_CPP(4 4 4, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
], libc_cv_riscv_int_abi=ilp32)
if test $libc_cv_riscv_int_abi = no; then
AC_MSG_ERROR([Unable to determine integer ABI])
fi
@ -37,6 +39,12 @@ lp64-riscv/rv64/*)
lp64d-riscv/rv64/*)
LIBC_SLIBDIR_RTLDDIR([lib64/lp64d], [lib])
;;
ilp32-riscv/rv32/*)
LIBC_SLIBDIR_RTLDDIR([lib32/ilp32], [lib])
;;
ilp32d-riscv/rv32/*)
LIBC_SLIBDIR_RTLDDIR([lib32/ilp32d], [lib])
;;
esac
ldd_rewrite_script=sysdeps/unix/sysv/linux/riscv/ldd-rewrite.sed

View File

@ -0,0 +1,3 @@
unix/sysv/linux/riscv
unix/sysv/linux/generic/wordsize-32
unix/sysv/linux/generic

View File

@ -1,9 +1,15 @@
DEFAULT GLIBC_2.27
%if RISCV_ABI_XLEN == 64 && RISCV_ABI_FLEN == 64
DEFAULT GLIBC_2.27
ld=ld-linux-riscv64-lp64d.so.1
%elif RISCV_ABI_XLEN == 64 && RISCV_ABI_FLEN == 0
DEFAULT GLIBC_2.27
ld=ld-linux-riscv64-lp64.so.1
%elif RISCV_ABI_XLEN == 32 && RISCV_ABI_FLEN == 64
DEFAULT GLIBC_2.33
ld=ld-linux-riscv32-ilp32d.so.1
%elif RISCV_ABI_XLEN == 32 && RISCV_ABI_FLEN == 0
DEFAULT GLIBC_2.33
ld=ld-linux-riscv32-ilp32.so.1
%else
%error cannot determine ABI
%endif