| # configure.host |
| # |
| # This shell script handles all host based configuration for libffi. |
| # |
| |
| # THIS TABLE IS SORTED. KEEP IT THAT WAY. |
| # Most of the time we can define all the variables all at once... |
| case "${host}" in |
| aarch64*-*-cygwin* | aarch64*-*-mingw* | aarch64*-*-win* ) |
| TARGET=ARM_WIN64; TARGETDIR=aarch64 |
| if test "${ax_cv_c_compiler_vendor}" = "microsoft"; then |
| MSVC=1 |
| fi |
| ;; |
| |
| aarch64*-*-*) |
| TARGET=AARCH64; TARGETDIR=aarch64 |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| alpha*-*-*) |
| TARGET=ALPHA; TARGETDIR=alpha; |
| # Support 128-bit long double, changeable via command-line switch. |
| HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' |
| SOURCES="ffi.c osf.S" |
| ;; |
| |
| arc*-*-*) |
| TARGET=ARC; TARGETDIR=arc |
| SOURCES="ffi.c arcompact.S" |
| ;; |
| |
| arm*-*-cygwin* | arm*-*-mingw* | arm*-*-win* ) |
| TARGET=ARM_WIN32; TARGETDIR=arm |
| if test "${ax_cv_c_compiler_vendor}" = "microsoft"; then |
| MSVC=1 |
| fi |
| ;; |
| |
| arm*-*-*) |
| TARGET=ARM; TARGETDIR=arm |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| avr32*-*-*) |
| TARGET=AVR32; TARGETDIR=avr32 |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| bfin*) |
| TARGET=BFIN; TARGETDIR=bfin |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| cris-*-*) |
| TARGET=LIBFFI_CRIS; TARGETDIR=cris |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| csky-*-*) |
| TARGET=CSKY; TARGETDIR=csky |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| frv-*-*) |
| TARGET=FRV; TARGETDIR=frv |
| SOURCES="ffi.c eabi.S" |
| ;; |
| |
| hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*) |
| TARGET=PA_LINUX; TARGETDIR=pa |
| SOURCES="ffi.c linux.S" |
| ;; |
| hppa*64-*-hpux*) |
| TARGET=PA64_HPUX; TARGETDIR=pa |
| ;; |
| hppa*-*-hpux*) |
| TARGET=PA_HPUX; TARGETDIR=pa |
| SOURCES="ffi.c hpux32.S" |
| ;; |
| |
| i?86-*-freebsd* | i?86-*-openbsd*) |
| TARGET=X86_FREEBSD; TARGETDIR=x86 |
| ;; |
| |
| i?86-*-cygwin* | i?86-*-mingw* | i?86-*-win* | i?86-*-os2* | i?86-*-interix* \ |
| | x86_64-*-cygwin* | x86_64-*-mingw* | x86_64-*-win* ) |
| TARGETDIR=x86 |
| if test $ac_cv_sizeof_size_t = 4; then |
| TARGET=X86_WIN32 |
| else |
| TARGET=X86_WIN64 |
| fi |
| if test "${ax_cv_c_compiler_vendor}" = "microsoft"; then |
| MSVC=1 |
| fi |
| # All mingw/cygwin/win32 builds require -no-undefined for sharedlib. |
| # We must also check with_cross_host to decide if this is a native |
| # or cross-build and select where to install dlls appropriately. |
| if test -n "$with_cross_host" && |
| test x"$with_cross_host" != x"no"; then |
| AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"'; |
| else |
| AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"'; |
| fi |
| ;; |
| |
| i?86-*-darwin* | x86_64-*-darwin* | i?86-*-ios | x86_64-*-ios) |
| TARGETDIR=x86 |
| if test $ac_cv_sizeof_size_t = 4; then |
| TARGET=X86_DARWIN |
| else |
| TARGET=X86_64 |
| fi |
| ;; |
| |
| i?86-*-* | x86_64-*-* | amd64-*) |
| TARGETDIR=x86 |
| if test $ac_cv_sizeof_size_t = 4; then |
| echo 'int foo (void) { return __x86_64__; }' > conftest.c |
| if $CC $CFLAGS -Werror -S conftest.c -o conftest.s > /dev/null 2>&1; then |
| TARGET_X32=yes |
| TARGET=X86_64 |
| else |
| TARGET=X86; |
| fi |
| rm -f conftest.* |
| else |
| TARGET=X86_64; |
| fi |
| ;; |
| |
| ia64*-*-*) |
| TARGET=IA64; TARGETDIR=ia64 |
| SOURCES="ffi.c unix.S" |
| ;; |
| |
| kvx-*-*) |
| TARGET=KVX; TARGETDIR=kvx |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| m32r*-*-*) |
| TARGET=M32R; TARGETDIR=m32r |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| m68k-*-*) |
| TARGET=M68K; TARGETDIR=m68k |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| m88k-*-*) |
| TARGET=M88K; TARGETDIR=m88k |
| SOURCES="ffi.c obsd.S" |
| ;; |
| |
| microblaze*-*-*) |
| TARGET=MICROBLAZE; TARGETDIR=microblaze |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| moxie-*-*) |
| TARGET=MOXIE; TARGETDIR=moxie |
| SOURCES="ffi.c eabi.S" |
| ;; |
| |
| metag-*-*) |
| TARGET=METAG; TARGETDIR=metag |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*) |
| TARGET=MIPS; TARGETDIR=mips |
| ;; |
| mips*-*linux* | mips*-*-openbsd* | mips*-*-freebsd*) |
| # Support 128-bit long double for NewABI. |
| HAVE_LONG_DOUBLE='defined(__mips64)' |
| TARGET=MIPS; TARGETDIR=mips |
| ;; |
| |
| nios2*-linux*) |
| TARGET=NIOS2; TARGETDIR=nios2 |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| or1k*-*-*) |
| TARGET=OR1K; TARGETDIR=or1k |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| powerpc*-*-linux* | powerpc-*-sysv*) |
| TARGET=POWERPC; TARGETDIR=powerpc |
| HAVE_LONG_DOUBLE_VARIANT=1 |
| ;; |
| powerpc-*-amigaos*) |
| TARGET=POWERPC; TARGETDIR=powerpc |
| ;; |
| powerpc-*-eabi*) |
| TARGET=POWERPC; TARGETDIR=powerpc |
| ;; |
| powerpc-*-beos*) |
| TARGET=POWERPC; TARGETDIR=powerpc |
| ;; |
| powerpc-*-darwin* | powerpc64-*-darwin*) |
| TARGET=POWERPC_DARWIN; TARGETDIR=powerpc |
| ;; |
| powerpc-*-aix* | rs6000-*-aix*) |
| TARGET=POWERPC_AIX; TARGETDIR=powerpc |
| ;; |
| powerpc-*-freebsd* | powerpc-*-openbsd* | powerpc-*-netbsd*) |
| TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc |
| HAVE_LONG_DOUBLE_VARIANT=1 |
| ;; |
| powerpcspe-*-freebsd*) |
| TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc |
| CFLAGS="$CFLAGS -D__NO_FPRS__" |
| ;; |
| powerpc64-*-freebsd* | powerpc64le-*-freebsd*) |
| TARGET=POWERPC; TARGETDIR=powerpc |
| ;; |
| powerpc*-*-rtems*) |
| TARGET=POWERPC; TARGETDIR=powerpc |
| ;; |
| |
| riscv*-*) |
| TARGET=RISCV; TARGETDIR=riscv |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| s390-*-* | s390x-*-*) |
| TARGET=S390; TARGETDIR=s390 |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| sh-*-* | sh[34]*-*-*) |
| TARGET=SH; TARGETDIR=sh |
| SOURCES="ffi.c sysv.S" |
| ;; |
| sh64-*-* | sh5*-*-*) |
| TARGET=SH64; TARGETDIR=sh64 |
| SOURCES="ffi.c sysv.S" |
| ;; |
| |
| sparc*-*-*) |
| TARGET=SPARC; TARGETDIR=sparc |
| SOURCES="ffi.c ffi64.c v8.S v9.S" |
| ;; |
| |
| tile*-*) |
| TARGET=TILE; TARGETDIR=tile |
| SOURCES="ffi.c tile.S" |
| ;; |
| |
| vax-*-*) |
| TARGET=VAX; TARGETDIR=vax |
| SOURCES="ffi.c elfbsd.S" |
| ;; |
| |
| xtensa*-*) |
| TARGET=XTENSA; TARGETDIR=xtensa |
| SOURCES="ffi.c sysv.S" |
| ;; |
| esac |
| |
| # ... but some of the cases above share configury. |
| case "${TARGET}" in |
| ARM_WIN32) |
| if test "$MSVC" = 1; then |
| SOURCES="ffi.c sysv_msvc_arm32.S" |
| else |
| SOURCES="ffi.c sysv.S" |
| fi |
| ;; |
| ARM_WIN64) |
| if test "$MSVC" = 1; then |
| SOURCES="ffi.c win64_armasm.S" |
| else |
| SOURCES="ffi.c sysv.S" |
| fi |
| ;; |
| MIPS) |
| SOURCES="ffi.c o32.S n32.S" |
| ;; |
| POWERPC) |
| SOURCES="ffi.c ffi_sysv.c ffi_linux64.c sysv.S ppc_closure.S" |
| SOURCES="${SOURCES} linux64.S linux64_closure.S" |
| ;; |
| POWERPC_AIX) |
| SOURCES="ffi_darwin.c aix.S aix_closure.S" |
| ;; |
| POWERPC_DARWIN) |
| SOURCES="ffi_darwin.c darwin.S darwin_closure.S" |
| ;; |
| POWERPC_FREEBSD) |
| SOURCES="ffi.c ffi_sysv.c sysv.S ppc_closure.S" |
| ;; |
| X86 | X86_DARWIN | X86_FREEBSD | X86_WIN32) |
| if test "$MSVC" = 1; then |
| SOURCES="ffi.c sysv_intel.S" |
| else |
| SOURCES="ffi.c sysv.S" |
| fi |
| ;; |
| X86_64) |
| if test x"$TARGET_X32" = xyes; then |
| SOURCES="ffi64.c unix64.S" |
| else |
| SOURCES="ffi64.c unix64.S ffiw64.c win64.S" |
| fi |
| ;; |
| X86_WIN64) |
| if test "$MSVC" = 1; then |
| SOURCES="ffiw64.c win64_intel.S" |
| else |
| SOURCES="ffiw64.c win64.S" |
| fi |
| ;; |
| esac |
| |
| # If we failed to configure SOURCES, we can't do anything. |
| if test -z "${SOURCES}"; then |
| UNSUPPORTED=1 |
| fi |