Feature #202 ยป 0022-Update-host-cpu-abi.m4-to-serial-17.patch
| m4/host-cpu-c-abi.m4 | ||
|---|---|---|
| # host-cpu-c-abi.m4 serial 16 | ||
| dnl Copyright (C) 2002-2023 Free Software Foundation, Inc. | ||
| # host-cpu-c-abi.m4 serial 17 | ||
| dnl Copyright (C) 2002-2024 Free Software Foundation, Inc. | ||
| dnl This file is free software; the Free Software Foundation | ||
| dnl gives unlimited permission to copy and/or distribute it, | ||
| dnl with or without modifications, as long as this notice is preserved. | ||
| ... | ... | |
| dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI | ||
| dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit | ||
| dnl one, or to 'unknown' if unknown. | ||
| dnl one. | ||
| dnl This is a simplified variant of gl_HOST_CPU_C_ABI. | ||
| AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], | ||
| [ | ||
|   AC_REQUIRE([AC_CANONICAL_HOST]) | ||
|   AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit], | ||
|     [if test -n "$gl_cv_host_cpu_c_abi"; then | ||
|        dnl gl_HOST_CPU_C_ABI has already been run. Use its result. | ||
|        case "$gl_cv_host_cpu_c_abi" in | ||
|          i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) | ||
|            gl_cv_host_cpu_c_abi_32bit=yes ;; | ||
|          x86_64 | alpha | arm64 | aarch64c | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) | ||
|            gl_cv_host_cpu_c_abi_32bit=no ;; | ||
|          *) | ||
|            gl_cv_host_cpu_c_abi_32bit=unknown ;; | ||
|        esac | ||
|      else | ||
|        case "$host_cpu" in | ||
|          # CPUs that only support a 32-bit ABI. | ||
|          arc \ | ||
|          | bfin \ | ||
|          | cris* \ | ||
|          | csky \ | ||
|          | epiphany \ | ||
|          | ft32 \ | ||
|          | h8300 \ | ||
|          | m68k \ | ||
|          | microblaze | microblazeel \ | ||
|          | nds32 | nds32le | nds32be \ | ||
|          | nios2 | nios2eb | nios2el \ | ||
|          | or1k* \ | ||
|          | or32 \ | ||
|          | sh | sh[1234] | sh[1234]e[lb] \ | ||
|          | tic6x \ | ||
|          | xtensa* ) | ||
|            gl_cv_host_cpu_c_abi_32bit=yes | ||
|            ;; | ||
|     [case "$host_cpu" in | ||
|          # CPUs that only support a 64-bit ABI. | ||
| changequote(,)dnl | ||
|          alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | ||
|          | mmix ) | ||
| changequote([,])dnl | ||
|            gl_cv_host_cpu_c_abi_32bit=no | ||
|            ;; | ||
|        # CPUs that only support a 32-bit ABI. | ||
|        arc \ | ||
|        | bfin \ | ||
|        | cris* \ | ||
|        | csky \ | ||
|        | epiphany \ | ||
|        | ft32 \ | ||
|        | h8300 \ | ||
|        | m68k \ | ||
|        | microblaze | microblazeel \ | ||
|        | nds32 | nds32le | nds32be \ | ||
|        | nios2 | nios2eb | nios2el \ | ||
|        | or1k* \ | ||
|        | or32 \ | ||
|        | sh | sh[1234] | sh[1234]e[lb] \ | ||
|        | tic6x \ | ||
|        | xtensa* ) | ||
|          gl_cv_host_cpu_c_abi_32bit=yes | ||
|          ;; | ||
|        # CPUs that only support a 64-bit ABI. | ||
| changequote(,)dnl | ||
|          i[34567]86 ) | ||
|        alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | ||
|        | mmix ) | ||
| changequote([,])dnl | ||
|            gl_cv_host_cpu_c_abi_32bit=yes | ||
|            ;; | ||
|          x86_64 ) | ||
|            # On x86_64 systems, the C compiler may be generating code in one of | ||
|            # these ABIs: | ||
|            # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. | ||
|            # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 | ||
|            #   with native Windows (mingw, MSVC). | ||
|            # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. | ||
|            # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#if (defined __x86_64__ || defined __amd64__ \ | ||
|                        || defined _M_X64 || defined _M_AMD64) \ | ||
|                       && !(defined __ILP32__ || defined _ILP32) | ||
|                    int ok; | ||
|                   #else | ||
|                    error fail | ||
|                   #endif | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes]) | ||
|            ;; | ||
|          arm* | aarch64 | aarch64c ) | ||
|            # Assume arm with EABI. | ||
|            # On arm64 systems, the C compiler may be generating code in one of | ||
|            # these ABIs: | ||
|            # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. | ||
|            # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. | ||
|            # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) | ||
|                    int ok; | ||
|                   #else | ||
|                    error fail | ||
|                   #endif | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes]) | ||
|            ;; | ||
|          hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) | ||
|            # On hppa, the C compiler may be generating 32-bit code or 64-bit | ||
|            # code. In the latter case, it defines _LP64 and __LP64__. | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#ifdef __LP64__ | ||
|                    int ok; | ||
|                   #else | ||
|                    error fail | ||
|                   #endif | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes]) | ||
|            ;; | ||
|          ia64* ) | ||
|            # On ia64 on HP-UX, the C compiler may be generating 64-bit code or | ||
|            # 32-bit code. In the latter case, it defines _ILP32. | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#ifdef _ILP32 | ||
|                    int ok; | ||
|                   #else | ||
|                    error fail | ||
|                   #endif | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no]) | ||
|            ;; | ||
|          mips* ) | ||
|            # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this | ||
|            # at 32. | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) | ||
|                    int ok; | ||
|                   #else | ||
|                    error fail | ||
|                   #endif | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes]) | ||
|            ;; | ||
|          powerpc* ) | ||
|            # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. | ||
|            # No need to distinguish them here; the caller may distinguish | ||
|            # them based on the OS. | ||
|            # On powerpc64 systems, the C compiler may still be generating | ||
|            # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may | ||
|            # be generating 64-bit code. | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#if defined __powerpc64__ || defined __LP64__ | ||
|                    int ok; | ||
|                   #else | ||
|                    error fail | ||
|                   #endif | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes]) | ||
|            ;; | ||
|          rs6000 ) | ||
|            gl_cv_host_cpu_c_abi_32bit=yes | ||
|            ;; | ||
|          riscv32 | riscv64 ) | ||
|            # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. | ||
|            # Size of 'long' and 'void *': | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#if defined __LP64__ | ||
|                     int ok; | ||
|                   #else | ||
|                     error fail | ||
|                   #endif | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes]) | ||
|            ;; | ||
|          s390* ) | ||
|            # On s390x, the C compiler may be generating 64-bit (= s390x) code | ||
|            # or 31-bit (= s390) code. | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#if defined __LP64__ || defined __s390x__ | ||
|                     int ok; | ||
|                   #else | ||
|                     error fail | ||
|                   #endif | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes]) | ||
|            ;; | ||
|          gl_cv_host_cpu_c_abi_32bit=no | ||
|          ;; | ||
|          sparc | sparc64 ) | ||
|            # UltraSPARCs running Linux have `uname -m` = "sparc64", but the | ||
|            # C compiler still generates 32-bit code. | ||
|        *) | ||
|          if test -n "$gl_cv_host_cpu_c_abi"; then | ||
|            dnl gl_HOST_CPU_C_ABI has already been run. Use its result. | ||
|            case "$gl_cv_host_cpu_c_abi" in | ||
|              i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) | ||
|                gl_cv_host_cpu_c_abi_32bit=yes ;; | ||
|              x86_64 | alpha | arm64 | aarch64c | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) | ||
|                gl_cv_host_cpu_c_abi_32bit=no ;; | ||
|              *) | ||
|                gl_cv_host_cpu_c_abi_32bit=unknown ;; | ||
|            esac | ||
|          else | ||
|            gl_cv_host_cpu_c_abi_32bit=unknown | ||
|          fi | ||
|          if test $gl_cv_host_cpu_c_abi_32bit = unknown; then | ||
|            AC_COMPILE_IFELSE( | ||
|              [AC_LANG_SOURCE( | ||
|                 [[#if defined __sparcv9 || defined __arch64__ | ||
|                    int ok; | ||
|                   #else | ||
|                    error fail | ||
|                   #endif | ||
|                 [[int test_pointer_size[sizeof (void *) - 5]; | ||
|                 ]])], | ||
|              [gl_cv_host_cpu_c_abi_32bit=no], | ||
|              [gl_cv_host_cpu_c_abi_32bit=yes]) | ||
|            ;; | ||
|          *) | ||
|            gl_cv_host_cpu_c_abi_32bit=unknown | ||
|            ;; | ||
|        esac | ||
|      fi | ||
|          fi | ||
|          ;; | ||
|      esac | ||
|     ]) | ||
|   HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" | ||