Based on preprocessor defines we determine which type of ARC core we're targeting and set slibdir accordingly so that on installation of libraries to sysroot libs for different ARC cores end up in different locations which match ARC Linux multilib spec. Note though it all only happens if 2 conditions happen simultaneously: 1. Glibc configured with "--prefix=/usr" 2. "-mcpu=xxx" exists in CC passed to Glibc's configure script I.e. when we build Glibc for default CPU libs are installed in default location. Signed-off-by: Alexey Brodkin <abrodkin@xxxxxxxxxxxx> --- sysdeps/unix/sysv/linux/arc/configure | 329 ++++++++++++++++++++++++++++++- sysdeps/unix/sysv/linux/arc/configure.ac | 70 +++++++ 2 files changed, 398 insertions(+), 1 deletion(-) mode change 100644 => 100755 sysdeps/unix/sysv/linux/arc/configure diff --git a/sysdeps/unix/sysv/linux/arc/configure b/sysdeps/unix/sysv/linux/arc/configure old mode 100644 new mode 100755 index f74fa7cb025..2173bd45484 --- a/sysdeps/unix/sysv/linux/arc/configure +++ b/sysdeps/unix/sysv/linux/arc/configure @@ -1,4 +1,331 @@ -# This file is generated from configure.in by Autoconf. DO NOT EDIT! +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! # Local configure fragment for sysdeps/unix/sysv/linux/arc. arch_minimum_kernel=3.9.0 + +# If "-mcpu=xxx" found in passed CC assume we're building for +# non-default CPU and thus we need to install libs in non-default location. +if { ac_try='echo $CC | grep -F "mcpu" > /dev/null' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; +then + libc_cv_arc_arch=no + + # If this is ARCompact-based core + + +{ $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. */ +#ifdef __ARC700__ + yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_arc_arch=arc700 +fi +rm -f conftest* + + + # If this is ARCv2-based core + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ARCHS__ + yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_arc_arch=hs +fi +rm -f conftest* + + + if test $libc_cv_arc_arch = no; then + as_fn_error $? "Unable to determine ARC architecture" "$LINENO" 5 + fi + + if test $libc_cv_arc_arch = arc700; then + # NPS400 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __NPS400__ + yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_arc_arch=nps400 +fi +rm -f conftest* + + else + # Base-line HS38 + HW multiplier + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ARC_MPY__ + yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_arc_arch=archs +fi +rm -f conftest* + + + # Base-line HS38 + HW quad-multiplier + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ARC_MPY_QMACW__ + yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_arc_arch=hs38 +fi +rm -f conftest* + + + # Base-line HS38 + HW quad-multiplier + FPU + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ARC_FPU_DP__ + yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_arc_arch=hs38_linux +fi +rm -f conftest* + + fi + + case $libc_cv_arc_arch in + arc700) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib/arc700' + libc_cv_rtlddir='/lib/arc700' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib/arc700'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; + nps400) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib/nps400' + libc_cv_rtlddir='/lib/nps400' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib/nps400'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; + hs) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib/hs' + libc_cv_rtlddir='/lib/hs' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib/hs'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; + archs) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib/archs' + libc_cv_rtlddir='/lib/archs' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib/archs'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; + hs38) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib/hs38' + libc_cv_rtlddir='/lib/hs38' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib/hs38'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; + hs38_linux) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib/hs38_linux' + libc_cv_rtlddir='/lib/hs38_linux' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib/hs38_linux'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; + esac +fi diff --git a/sysdeps/unix/sysv/linux/arc/configure.ac b/sysdeps/unix/sysv/linux/arc/configure.ac index a9528032d32..3615db8eabc 100644 --- a/sysdeps/unix/sysv/linux/arc/configure.ac +++ b/sysdeps/unix/sysv/linux/arc/configure.ac @@ -2,3 +2,73 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. # Local configure fragment for sysdeps/unix/sysv/linux/arc. arch_minimum_kernel=3.9.0 + +# If "-mcpu=xxx" found in passed CC assume we're building for +# non-default CPU and thus we need to install libs in non-default location. +if AC_TRY_COMMAND([echo $CC | grep -F "mcpu" > /dev/null]); +then + libc_cv_arc_arch=no + + # If this is ARCompact-based core + AC_EGREP_CPP(yes, [#ifdef __ARC700__ + yes + #endif + ],libc_cv_arc_arch=arc700) + + # If this is ARCv2-based core + AC_EGREP_CPP(yes, [#ifdef __ARCHS__ + yes + #endif + ],libc_cv_arc_arch=hs) + + if test $libc_cv_arc_arch = no; then + AC_MSG_ERROR([Unable to determine ARC architecture]) + fi + + if test $libc_cv_arc_arch = arc700; then + # NPS400 + AC_EGREP_CPP(yes, [#ifdef __NPS400__ + yes + #endif + ],libc_cv_arc_arch=nps400) + else + # Base-line HS38 + HW multiplier + AC_EGREP_CPP(yes, [#ifdef __ARC_MPY__ + yes + #endif + ],libc_cv_arc_arch=archs) + + # Base-line HS38 + HW quad-multiplier + AC_EGREP_CPP(yes, [#ifdef __ARC_MPY_QMACW__ + yes + #endif + ],libc_cv_arc_arch=hs38) + + # Base-line HS38 + HW quad-multiplier + FPU + AC_EGREP_CPP(yes, [#ifdef __ARC_FPU_DP__ + yes + #endif + ],libc_cv_arc_arch=hs38_linux) + fi + + case $libc_cv_arc_arch in + arc700) + LIBC_SLIBDIR_RTLDDIR([lib/arc700], [lib/arc700]) + ;; + nps400) + LIBC_SLIBDIR_RTLDDIR([lib/nps400], [lib/nps400]) + ;; + hs) + LIBC_SLIBDIR_RTLDDIR([lib/hs], [lib/hs]) + ;; + archs) + LIBC_SLIBDIR_RTLDDIR([lib/archs], [lib/archs]) + ;; + hs38) + LIBC_SLIBDIR_RTLDDIR([lib/hs38], [lib/hs38]) + ;; + hs38_linux) + LIBC_SLIBDIR_RTLDDIR([lib/hs38_linux], [lib/hs38_linux]) + ;; + esac +fi -- 2.16.2 _______________________________________________ linux-snps-arc mailing list linux-snps-arc@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/linux-snps-arc