This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[RFC v4 19/24] RISC-V: Build Infastructure for the 32-bit
- From: Alistair Francis <alistair dot francis at wdc dot com>
- To: libc-alpha at sourceware dot org
- Cc: arnd at arndb dot de, adhemerval dot zanella at linaro dot org, fweimer at redhat dot com, palmer at sifive dot com, macro at wdc dot com, zongbox at gmail dot com, alistair dot francis at wdc dot com, alistair23 at gmail dot com
- Date: Fri, 9 Aug 2019 18:00:37 -0700
- Subject: [RFC v4 19/24] RISC-V: Build Infastructure for the 32-bit
- Ironport-sdr: Qq+q+Fxwy7daLf0NaOOz3fjDzR6ZXsayhRw2meJ3dORMxzZ536naTUB2D1tl0zXzRA10Te5Ifj 6bRP3hKBRUK00Ak8AuTsiWIp3WoXkwkRCVVPfYZQXG1gg2EfP5bKi+r5IRV/x1NstPeAPgEIzM zzk6C0mtq1apnsCouEPlVY9H+HOHhOdkH8FO6Hp7uC/KV/x9awM0tDqFMc+D+4bbsfK98YwsUB QE3i1yvxITqqubphQVYCyYZp/PrTtMTO8MoB9JTV+U3Dt5HwVsVLKZ932PVMcavKa1jHzoCB2j 4Os=
- Ironport-sdr: E5TWGonJ/pPJCb+l38bFNQj1HYPX9r6+gYiPnmxXKDV8MfMg9kjiyBhs0Eg/MIN+8hN6FGJK4O Wo2BVAJhj7bJ+r3kAJHYVVLKX4VwtmsEpkLucI05b4qIsZ3/s4TdqthaISRaxYeetY4V1Y5KAf oUWZSiR0pJSIOGT1U7zurUpL/bFZhhzaw3mMj2VHmVif+QDP0JbdmfDPl0GL8sa0Vf6/TpzLxY hAhvSn2nvGge2Zl8sq7MUAi5t6zMNhrlUVGcMsltDtAy+fO1VrTPM+Ej8IaMUZn2cAvxaaq3lS uJZku4eYWPofNVJ5VDYTS/r9
- Ironport-sdr: uXTt+i5S8vOomgPeflUiWqJQfg0+jcfbF5nyzzhmC53PjtYz2scZ2Rh7iS/Rp6p9tOYG/LXKnH y7F1nGOgSPm9mYXnHy0pjmp4kugzCxOqB9tvRUf5d6AZANoo7bFbwVkx+A6kpa4Jd0VjNhoWjq pvLFg77yPAkV4t/cbmui2JTPO+C2aTyaxStK1HKfOvSSU+R6mSSXkrKHvuNzls6+uIQl/xoPWS k3x/TwxLxzF53U0nSMobYvaFULuX62w/amP0MWLnweJF50XvgsYJOUCdQFgABuJXotDnSaSsWM abg=
- References: <cover.1565398513.git.alistair.francis@wdc.com>
From: Zong Li <zongbox@gmail.com>
This patch lays out the top-level orginazition of the RISC-V 32-bit port. It
contains all the Implies files as well as various other fragments of
build infastructure for the RISC-V 32-bit port.
2018-11-29 Zong Li <zong@andestech.com>
* sysdeps/riscv/rv32/Implies-after: New file.
* sysdeps/riscv/rv32/rvd/Implies: Likewise.
* sysdeps/riscv/rv32/rvf/Implies: Likewise.
* sysdeps/unix/sysv/linux/riscv/rv32/Implies: Likewise.
* sysdeps/unix/sysv/linux/riscv/Makefile: Support rv32.
* sysdeps/unix/sysv/linux/riscv/configure: Likewise.
* sysdeps/unix/sysv/linux/riscv/configure.ac: Likewise.
* sysdeps/unix/sysv/linux/riscv/shlib-versions: Likewise.
* sysdeps/riscv/preconfigure: Likewise.
---
ChangeLog | 9 +++++
sysdeps/riscv/preconfigure | 6 +--
sysdeps/riscv/rv32/Implies-after | 1 +
sysdeps/riscv/rv32/rvd/Implies | 3 ++
sysdeps/riscv/rv32/rvf/Implies | 1 +
sysdeps/unix/sysv/linux/riscv/Makefile | 4 +-
sysdeps/unix/sysv/linux/riscv/configure | 39 ++++++++++++++++++++
sysdeps/unix/sysv/linux/riscv/configure.ac | 8 ++++
sysdeps/unix/sysv/linux/riscv/rv32/Implies | 3 ++
sysdeps/unix/sysv/linux/riscv/shlib-versions | 10 ++++-
10 files changed, 76 insertions(+), 8 deletions(-)
create mode 100644 sysdeps/riscv/rv32/Implies-after
create mode 100644 sysdeps/riscv/rv32/rvd/Implies
create mode 100644 sysdeps/riscv/rv32/rvf/Implies
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/Implies
diff --git a/ChangeLog b/ChangeLog
index 6896401d0e9..a0399acdcbc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1482,6 +1482,15 @@
* sysdeps/unix/sysv/linux/riscv/rv32/libutil.abilist: Likewise.
* sysdeps/unix/sysv/linux/riscv/rv32/libBrokenLocale.abilist:
Likewise.
+ * sysdeps/riscv/rv32/Implies-after: New file.
+ * sysdeps/riscv/rv32/rvd/Implies: Likewise.
+ * sysdeps/riscv/rv32/rvf/Implies: Likewise.
+ * sysdeps/unix/sysv/linux/riscv/rv32/Implies: Likewise.
+ * sysdeps/unix/sysv/linux/riscv/Makefile: Support rv32.
+ * sysdeps/unix/sysv/linux/riscv/configure: Likewise.
+ * sysdeps/unix/sysv/linux/riscv/configure.ac: Likewise.
+ * sysdeps/unix/sysv/linux/riscv/shlib-versions: Likewise.
+ * sysdeps/riscv/preconfigure: Likewise.
2019-06-20 Dmitry V. Levin <ldv@altlinux.org>
Florian Weimer <fweimer@redhat.com>
diff --git a/sysdeps/riscv/preconfigure b/sysdeps/riscv/preconfigure
index d9adb31b649..1ab5d20f0ec 100644
--- a/sysdeps/riscv/preconfigure
+++ b/sysdeps/riscv/preconfigure
@@ -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
diff --git a/sysdeps/riscv/rv32/Implies-after b/sysdeps/riscv/rv32/Implies-after
new file mode 100644
index 00000000000..39a34c5f574
--- /dev/null
+++ b/sysdeps/riscv/rv32/Implies-after
@@ -0,0 +1 @@
+wordsize-32
diff --git a/sysdeps/riscv/rv32/rvd/Implies b/sysdeps/riscv/rv32/rvd/Implies
new file mode 100644
index 00000000000..1151214e8f4
--- /dev/null
+++ b/sysdeps/riscv/rv32/rvd/Implies
@@ -0,0 +1,3 @@
+riscv/rv32/rvf
+riscv/rvd
+riscv/rvf
diff --git a/sysdeps/riscv/rv32/rvf/Implies b/sysdeps/riscv/rv32/rvf/Implies
new file mode 100644
index 00000000000..66c401443b8
--- /dev/null
+++ b/sysdeps/riscv/rv32/rvf/Implies
@@ -0,0 +1 @@
+riscv/rvf
diff --git a/sysdeps/unix/sysv/linux/riscv/Makefile b/sysdeps/unix/sysv/linux/riscv/Makefile
index b47858769f5..bf9c24ad77d 100644
--- a/sysdeps/unix/sysv/linux/riscv/Makefile
+++ b/sysdeps/unix/sysv/linux/riscv/Makefile
@@ -15,11 +15,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-ilp32-condition := !defined __LP64__ && defined __riscv_float_abi_soft
+abi-ilp32d-condition := !defined __LP64__ && defined __riscv_float_abi_double
abi-lp64-condition := defined __LP64__ && defined __riscv_float_abi_soft
abi-lp64d-condition := defined __LP64__ && defined __riscv_float_abi_double
diff --git a/sysdeps/unix/sysv/linux/riscv/configure b/sysdeps/unix/sysv/linux/riscv/configure
index 3018ca8f1b8..2b3c77f18cb 100755
--- a/sysdeps/unix/sysv/linux/riscv/configure
+++ b/sysdeps/unix/sysv/linux/riscv/configure
@@ -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
@@ -214,6 +225,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
diff --git a/sysdeps/unix/sysv/linux/riscv/configure.ac b/sysdeps/unix/sysv/linux/riscv/configure.ac
index d4819931ca3..710d46afcd3 100644
--- a/sysdeps/unix/sysv/linux/riscv/configure.ac
+++ b/sysdeps/unix/sysv/linux/riscv/configure.ac
@@ -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
@@ -33,6 +35,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
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/Implies b/sysdeps/unix/sysv/linux/riscv/rv32/Implies
new file mode 100644
index 00000000000..8b7deb33cd5
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/Implies
@@ -0,0 +1,3 @@
+unix/sysv/linux/riscv
+unix/sysv/linux/generic/wordsize-32
+unix/sysv/linux/generic
diff --git a/sysdeps/unix/sysv/linux/riscv/shlib-versions b/sysdeps/unix/sysv/linux/riscv/shlib-versions
index 98c9b29cc4d..0f9552a1dd5 100644
--- a/sysdeps/unix/sysv/linux/riscv/shlib-versions
+++ b/sysdeps/unix/sysv/linux/riscv/shlib-versions
@@ -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.31
+ld=ld-linux-riscv32-ilp32d.so.1
+%elif RISCV_ABI_XLEN == 32 && RISCV_ABI_FLEN == 0
+DEFAULT GLIBC_2.31
+ld=ld-linux-riscv32-ilp32.so.1
%else
%error cannot determine ABI
%endif
--
2.22.0