| # -*- shell-script -*- |
| # Copyright (C) 2012-2020 Free Software Foundation, Inc. |
| # Contributed by Richard Henderson <rth@redhat.com>. |
| # |
| # This file is part of the GNU Atomic Library (libatomic). |
| # |
| # Libatomic is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # Libatomic 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 General Public License for |
| # more details. |
| # |
| # Under Section 7 of GPL version 3, you are granted additional |
| # permissions described in the GCC Runtime Library Exception, version |
| # 3.1, as published by the Free Software Foundation. |
| # |
| # You should have received a copy of the GNU General Public License and |
| # a copy of the GCC Runtime Library Exception along with this program; |
| # see the files COPYING3 and COPYING.RUNTIME respectively. If not, see |
| # <http://www.gnu.org/licenses/>. |
| |
| # Map the target cpu to an ARCH sub-directory. At the same time, |
| # work out any special compilation flags as necessary. |
| |
| # Give operating systems the opportunity to discard XCFLAGS modifications based |
| # on ${target_cpu}. For example to allow proper use of multilibs. |
| configure_tgt_pre_target_cpu_XCFLAGS="${XCFLAGS}" |
| |
| case "${target_cpu}" in |
| alpha*) |
| # fenv.c needs this option to generate inexact exceptions. |
| XCFLAGS="${XCFLAGS} -mfp-trap-mode=sui" |
| ARCH=alpha |
| ;; |
| rs6000 | powerpc*) ARCH=powerpc ;; |
| riscv*) ARCH=riscv ;; |
| sh*) ARCH=sh ;; |
| |
| aarch64*) |
| ARCH=aarch64 |
| case "${target}" in |
| aarch64*-*-linux*) |
| if test -n "$enable_aarch64_lse"; then |
| try_ifunc=yes |
| fi |
| ;; |
| esac |
| ;; |
| arm*) |
| ARCH=arm |
| case "${target}" in |
| arm*-*-freebsd* | arm*-*-netbsd*) |
| ;; |
| *) |
| # ??? Detect when -march=armv7 is already enabled. |
| try_ifunc=yes |
| ;; |
| esac |
| ;; |
| sparc) |
| case " ${CC} ${CFLAGS} " in |
| *" -m64 "*) |
| ;; |
| *) |
| if test -z "$with_cpu"; then |
| XCFLAGS="${XCFLAGS} -mcpu=v9" |
| fi |
| esac |
| ARCH=sparc |
| ;; |
| sparc64|sparcv9) |
| case " ${CC} ${CFLAGS} " in |
| *" -m32 "*) |
| XCFLAGS="${XCFLAGS} -mcpu=v9" |
| ;; |
| esac |
| ARCH=sparc |
| ;; |
| |
| i[3456]86) |
| case " ${CC} ${CFLAGS} " in |
| *" -m64 "*|*" -mx32 "*) |
| ;; |
| *) |
| if test -z "$with_arch"; then |
| XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}" |
| XCFLAGS="${XCFLAGS} -fomit-frame-pointer" |
| fi |
| esac |
| ARCH=x86 |
| # ??? Detect when -march=i686 is already enabled. |
| try_ifunc=yes |
| ;; |
| x86_64) |
| case " ${CC} ${CFLAGS} " in |
| *" -m32 "*) |
| XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" |
| XCFLAGS="${XCFLAGS} -fomit-frame-pointer" |
| ;; |
| *) |
| ;; |
| esac |
| ARCH=x86 |
| # ??? Detect when -mcx16 is already enabled. |
| try_ifunc=yes |
| ;; |
| |
| *) ARCH="${target_cpu}" ;; |
| esac |
| |
| # The cpu configury is always most relevant. |
| if test -d ${srcdir}/config/$ARCH ; then |
| config_path="$ARCH" |
| fi |
| |
| # Other system configury |
| case "${target}" in |
| aarch64*-*-linux*) |
| # OS support for atomic primitives. |
| config_path="${config_path} linux/aarch64 posix" |
| ;; |
| |
| arm*-*-linux* | arm*-*-uclinux*) |
| # OS support for atomic primitives. |
| config_path="${config_path} linux/arm posix" |
| ;; |
| |
| s390*-*-linux*) |
| # OS support for atomic primitives. |
| config_path="${config_path} s390 posix" |
| ;; |
| |
| *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu \ |
| | *-*-netbsd* | *-*-freebsd* | *-*-openbsd* | *-*-dragonfly* \ |
| | *-*-solaris2* | *-*-sysv4* | *-*-irix6* | *-*-osf* | *-*-hpux11* \ |
| | *-*-darwin* | *-*-aix* | *-*-cygwin*) |
| # POSIX system. The OS is supported. |
| config_path="${config_path} posix" |
| ;; |
| |
| *-*-mingw*) |
| # OS support for atomic primitives. |
| case ${target_thread_file} in |
| win32) |
| config_path="${config_path} mingw" |
| ;; |
| posix) |
| config_path="${config_path} posix" |
| ;; |
| esac |
| ;; |
| |
| *-*-rtems*) |
| XCFLAGS="${configure_tgt_pre_target_cpu_XCFLAGS}" |
| config_path="rtems" |
| ;; |
| |
| *-*-elf*) |
| # ??? No target OS. We could be targeting bare-metal kernel-mode, |
| # or user-mode for some custom OS. If the target supports TAS, |
| # we can build our own spinlocks, given there are no signals. |
| # If the target supports disabling interrupts, we can work in |
| # kernel-mode, given the system is not multi-processor. |
| UNSUPPORTED=1 |
| ;; |
| |
| *) |
| # Who are you? |
| UNSUPPORTED=1 |
| ;; |
| esac |
| |
| # glibc will pass hwcap to ifunc resolver functions as an argument. |
| # The type may be different on different architectures. |
| case "${target}" in |
| aarch64*-*-*) |
| IFUNC_RESOLVER_ARGS="uint64_t hwcap" |
| ;; |
| *) |
| IFUNC_RESOLVER_ARGS="void" |
| ;; |
| esac |