LoongArch: Build Infrastructure

This commit is contained in:
caiyinyu 2022-07-19 09:22:07 +08:00 committed by Adhemerval Zanella
parent 0d4a891a7c
commit 3d87c89815
15 changed files with 434 additions and 0 deletions

View File

@ -0,0 +1,3 @@
ieee754/ldbl-128
ieee754/dbl-64
ieee754/flt-32

View File

@ -0,0 +1,15 @@
ifeq ($(subdir),misc)
sysdep_headers += sys/asm.h
endif
# LoongArch's assembler also needs to know about PIC as it changes the
# definition of some assembler macros.
ASFLAGS-.os += $(pic-ccflag)
abi-variants := lp64
ifeq (,$(filter $(default-abi),$(abi-variants)))
$(error Unknown ABI $(default-abi), must be one of $(abi-variants))
endif
abi-lp64-condition := defined __loongarch_lp64

5
sysdeps/loongarch/configure vendored Normal file
View File

@ -0,0 +1,5 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/loongarch/elf.
$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h

View File

@ -0,0 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/loongarch/elf.
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)

View File

@ -0,0 +1 @@
wordsize-64

View File

@ -0,0 +1,53 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local preconfigure fragment for sysdeps/loongarch
case "$machine" in
loongarch*)
abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(lp64\|ilp32\).*/\1/p'`
float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'`
with_fp_cond="!defined __loongarch_soft_float"
case "$float_abi" in
soft)
abi_flen=0
as_fn_error 1 "loongarch does not yet support soft floating-point ABI!!" "$LINENO" 5
;;
single)
as_fn_error 1 "glibc does not yet support the single floating-point ABI!!" "$LINENO" 5
;;
double)
abi_flen=64
;;
*)
as_fn_error 1 "Unable to determine floating-point ABI!!" "$LINENO" 5
;;
esac
case "$abi" in
ilp32)
as_fn_error 1 "loongarch does not yet support ilp32 ABI!!" "$LINENO" 5
;;
lp64)
grlen=64
machine=loongarch/lp64
;;
*)
as_fn_error 1 "Unable to determine GRLEN!!" "$LINENO" 5
;;
esac
cat >>confdefs.h <<_ACEOF
#define LOONGARCH_ABI_GRLEN $grlen
_ACEOF
cat >>confdefs.h <<_ACEOF
#define LOONGARCH_ABI_FRLEN $abi_flen
_ACEOF
base_machine=loongarch
;;
esac

View File

@ -0,0 +1,47 @@
GLIBC_PROVIDES[]dnl See aclocal.m4 in the top level source directory.
# Local preconfigure fragment for sysdeps/loongarch
case "$machine" in
loongarch*)
abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(lp64\|ilp32\).*/\1/p'`
float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'`
with_fp_cond="!defined __loongarch_soft_float"
case "$float_abi" in
soft)
abi_flen=0
AC_MSG_ERROR([loongarch does not yet support soft floating-point ABI!!], 1)
;;
single)
AC_MSG_ERROR([glibc does not yet support the single floating-point ABI!!], 1)
;;
double)
abi_flen=64
;;
*)
AC_MSG_ERROR([Unable to determine floating-point ABI!!], 1)
;;
esac
case "$abi" in
ilp32)
AC_MSG_ERROR([loongarch does not yet support ilp32 ABI!!], 1)
;;
lp64)
grlen=64
machine=loongarch/lp64
;;
*)
AC_MSG_ERROR([Unable to determine GRLEN!!], 1)
;;
esac
AC_DEFINE_UNQUOTED([LOONGARCH_ABI_GRLEN], [$grlen])
AC_DEFINE_UNQUOTED([LOONGARCH_ABI_FRLEN], [$abi_flen])
base_machine=loongarch
;;
esac

View File

@ -0,0 +1,93 @@
/* Register Macro definitions
Copyright (C) 2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_REGDEF_H
#define _SYS_REGDEF_H
#define zero $r0
#define ra $r1
#define tp $r2
#define sp $r3
#define a0 $r4
#define a1 $r5
#define a2 $r6
#define a3 $r7
#define a4 $r8
#define a5 $r9
#define a6 $r10
#define a7 $r11
#define v0 $r4
#define v1 $r5
#define t0 $r12
#define t1 $r13
#define t2 $r14
#define t3 $r15
#define t4 $r16
#define t5 $r17
#define t6 $r18
#define t7 $r19
#define t8 $r20
#define x $r21
#define fp $r22
#define s0 $r23
#define s1 $r24
#define s2 $r25
#define s3 $r26
#define s4 $r27
#define s5 $r28
#define s6 $r29
#define s7 $r30
#define s8 $r31
#define fa0 $f0
#define fa1 $f1
#define fa2 $f2
#define fa3 $f3
#define fa4 $f4
#define fa5 $f5
#define fa6 $f6
#define fa7 $f7
#define fv0 $f0
#define fv1 $f1
#define ft0 $f8
#define ft1 $f9
#define ft2 $f10
#define ft3 $f11
#define ft4 $f12
#define ft5 $f13
#define ft6 $f14
#define ft7 $f15
#define ft8 $f16
#define ft9 $f17
#define ft10 $f18
#define ft11 $f19
#define ft12 $f20
#define ft13 $f21
#define ft14 $f22
#define ft15 $f23
#define fs0 $f24
#define fs1 $f25
#define fs2 $f26
#define fs3 $f27
#define fs4 $f28
#define fs5 $f29
#define fs6 $f30
#define fs7 $f31
#endif /* _SYS_REGDEF_H */

View File

@ -0,0 +1 @@
loongarch/nptl

View File

@ -0,0 +1,3 @@
ifeq ($(subdir),stdlib)
gen-as-const-headers += ucontext_i.sym
endif

View File

@ -0,0 +1,174 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/unix/sysv/linux/loongarch.
arch_minimum_kernel=5.19.0
libc_cv_loongarch_int_abi=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
if ${ac_cv_path_GREP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$GREP"; then
ac_path_GREP_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_prog in grep ggrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_GREP" || continue
# Check for GNU ac_path_GREP and select it if it is found.
# Check for GNU $ac_path_GREP
case `"$ac_path_GREP" --version 2>&1` in
*GNU*)
ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
*)
ac_count=0
$as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
$as_echo 'GREP' >> "conftest.nl"
"$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
if test $ac_count -gt ${ac_path_GREP_max-0}; then
# Best one so far, save it but keep looking for a better one
ac_cv_path_GREP="$ac_path_GREP"
ac_path_GREP_max=$ac_count
fi
# 10*(2^10) chars as input seems more than enough
test $ac_count -gt 10 && break
done
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
esac
$ac_path_GREP_found && break 3
done
done
done
IFS=$as_save_IFS
if test -z "$ac_cv_path_GREP"; then
as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
fi
else
ac_cv_path_GREP=$GREP
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
$as_echo "$ac_cv_path_GREP" >&6; }
GREP="$ac_cv_path_GREP"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
$as_echo_n "checking for egrep... " >&6; }
if ${ac_cv_path_EGREP+:} false; then :
$as_echo_n "(cached) " >&6
else
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
then ac_cv_path_EGREP="$GREP -E"
else
if test -z "$EGREP"; then
ac_path_EGREP_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_prog in egrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_EGREP" || continue
# Check for GNU ac_path_EGREP and select it if it is found.
# Check for GNU $ac_path_EGREP
case `"$ac_path_EGREP" --version 2>&1` in
*GNU*)
ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
*)
ac_count=0
$as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
$as_echo 'EGREP' >> "conftest.nl"
"$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
if test $ac_count -gt ${ac_path_EGREP_max-0}; then
# Best one so far, save it but keep looking for a better one
ac_cv_path_EGREP="$ac_path_EGREP"
ac_path_EGREP_max=$ac_count
fi
# 10*(2^10) chars as input seems more than enough
test $ac_count -gt 10 && break
done
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
esac
$ac_path_EGREP_found && break 3
done
done
done
IFS=$as_save_IFS
if test -z "$ac_cv_path_EGREP"; then
as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
fi
else
ac_cv_path_EGREP=$EGREP
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
$as_echo "$ac_cv_path_EGREP" >&6; }
EGREP="$ac_cv_path_EGREP"
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 8 8" >/dev/null 2>&1; then :
libc_cv_loongarch_int_abi=lp64
fi
rm -f conftest*
if test $libc_cv_loongarch_int_abi = no; then
as_fn_error $? "Unable to determine integer ABI" "$LINENO" 5
fi
config_vars="$config_vars
default-abi = $libc_cv_loongarch_int_abi"
case $libc_cv_loongarch_int_abi in
lp64)
test -n "$libc_cv_slibdir" ||
case "$prefix" in
/usr | /usr/)
libc_cv_slibdir='/lib64'
libc_cv_rtlddir='/lib64'
if test "$libdir" = '${exec_prefix}/lib'; then
libdir='${exec_prefix}/lib64';
# 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/loongarch/ldd-rewrite.sed

View File

@ -0,0 +1,22 @@
sinclude(./aclocal.m4)dnl Autoconf lossage
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/unix/sysv/linux/loongarch.
arch_minimum_kernel=5.19.0
libc_cv_loongarch_int_abi=no
AC_EGREP_CPP(4 8 8, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
], libc_cv_loongarch_int_abi=lp64)
if test $libc_cv_loongarch_int_abi = no; then
AC_MSG_ERROR([Unable to determine integer ABI])
fi
LIBC_CONFIG_VAR([default-abi], [$libc_cv_loongarch_int_abi])
case $libc_cv_loongarch_int_abi in
lp64)
LIBC_SLIBDIR_RTLDDIR([lib64], [lib64])
;;
esac
ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed

View File

@ -0,0 +1 @@
s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|32\)\(/[^/]*\)\(-loongarch\)\(64\|32\)\(\.so\.[0-9.]*\)[[:blank:]]*$_\1"\2\4\7 \264\4-loongarch64\7 \232\4-loongarch32\7"_

View File

@ -0,0 +1,3 @@
unix/sysv/linux/loongarch
unix/sysv/linux/generic
unix/sysv/linux/wordsize-64

View File

@ -0,0 +1,7 @@
DEFAULT GLIBC_2.36
%if LOONGARCH_ABI_GRLEN == 64 && LOONGARCH_ABI_FRLEN == 64
ld=ld-linux-loongarch-lp64d.so.1
%else
%error cannot determine ABI
%endif