Annotation of embedaddon/libiconv/srcm4/host-cpu-c-abi.m4, revision 1.1

1.1     ! misho       1: # host-cpu-c-abi.m4 serial 11
        !             2: dnl Copyright (C) 2002-2019 Free Software Foundation, Inc.
        !             3: dnl This file is free software; the Free Software Foundation
        !             4: dnl gives unlimited permission to copy and/or distribute it,
        !             5: dnl with or without modifications, as long as this notice is preserved.
        !             6: 
        !             7: dnl From Bruno Haible and Sam Steingold.
        !             8: 
        !             9: dnl Sets the HOST_CPU variable to the canonical name of the CPU.
        !            10: dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its
        !            11: dnl C language ABI (application binary interface).
        !            12: dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in
        !            13: dnl config.h.
        !            14: dnl
        !            15: dnl This canonical name can be used to select a particular assembly language
        !            16: dnl source file that will interoperate with C code on the given host.
        !            17: dnl
        !            18: dnl For example:
        !            19: dnl * 'i386' and 'sparc' are different canonical names, because code for i386
        !            20: dnl   will not run on SPARC CPUs and vice versa. They have different
        !            21: dnl   instruction sets.
        !            22: dnl * 'sparc' and 'sparc64' are different canonical names, because code for
        !            23: dnl   'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code
        !            24: dnl   contains 32-bit instructions, whereas 'sparc64' code contains 64-bit
        !            25: dnl   instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit
        !            26: dnl   mode, but not both.
        !            27: dnl * 'mips' and 'mipsn32' are different canonical names, because they use
        !            28: dnl   different argument passing and return conventions for C functions, and
        !            29: dnl   although the instruction set of 'mips' is a large subset of the
        !            30: dnl   instruction set of 'mipsn32'.
        !            31: dnl * 'mipsn32' and 'mips64' are different canonical names, because they use
        !            32: dnl   different sizes for the C types like 'int' and 'void *', and although
        !            33: dnl   the instruction sets of 'mipsn32' and 'mips64' are the same.
        !            34: dnl * The same canonical name is used for different endiannesses. You can
        !            35: dnl   determine the endianness through preprocessor symbols:
        !            36: dnl   - 'arm': test __ARMEL__.
        !            37: dnl   - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL.
        !            38: dnl   - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN.
        !            39: dnl * The same name 'i386' is used for CPUs of type i386, i486, i586
        !            40: dnl   (Pentium), AMD K7, Pentium II, Pentium IV, etc., because
        !            41: dnl   - Instructions that do not exist on all of these CPUs (cmpxchg,
        !            42: dnl     MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your
        !            43: dnl     assembly language source files use such instructions, you will
        !            44: dnl     need to make the distinction.
        !            45: dnl   - Speed of execution of the common instruction set is reasonable across
        !            46: dnl     the entire family of CPUs. If you have assembly language source files
        !            47: dnl     that are optimized for particular CPU types (like GNU gmp has), you
        !            48: dnl     will need to make the distinction.
        !            49: dnl   See <https://en.wikipedia.org/wiki/X86_instruction_listings>.
        !            50: AC_DEFUN([gl_HOST_CPU_C_ABI],
        !            51: [
        !            52:   AC_REQUIRE([AC_CANONICAL_HOST])
        !            53:   AC_REQUIRE([gl_C_ASM])
        !            54:   AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi],
        !            55:     [case "$host_cpu" in
        !            56: 
        !            57: changequote(,)dnl
        !            58:        i[4567]86 )
        !            59: changequote([,])dnl
        !            60:          gl_cv_host_cpu_c_abi=i386
        !            61:          ;;
        !            62: 
        !            63:        x86_64 )
        !            64:          # On x86_64 systems, the C compiler may be generating code in one of
        !            65:          # these ABIs:
        !            66:          # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
        !            67:          # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
        !            68:          #   with native Windows (mingw, MSVC).
        !            69:          # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
        !            70:          # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
        !            71:          AC_COMPILE_IFELSE(
        !            72:            [AC_LANG_SOURCE(
        !            73:               [[#if (defined __x86_64__ || defined __amd64__ \
        !            74:                      || defined _M_X64 || defined _M_AMD64)
        !            75:                  int ok;
        !            76:                 #else
        !            77:                  error fail
        !            78:                 #endif
        !            79:               ]])],
        !            80:            [AC_COMPILE_IFELSE(
        !            81:               [AC_LANG_SOURCE(
        !            82:                  [[#if defined __ILP32__ || defined _ILP32
        !            83:                     int ok;
        !            84:                    #else
        !            85:                     error fail
        !            86:                    #endif
        !            87:                  ]])],
        !            88:               [gl_cv_host_cpu_c_abi=x86_64-x32],
        !            89:               [gl_cv_host_cpu_c_abi=x86_64])],
        !            90:            [gl_cv_host_cpu_c_abi=i386])
        !            91:          ;;
        !            92: 
        !            93: changequote(,)dnl
        !            94:        alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
        !            95: changequote([,])dnl
        !            96:          gl_cv_host_cpu_c_abi=alpha
        !            97:          ;;
        !            98: 
        !            99:        arm* | aarch64 )
        !           100:          # Assume arm with EABI.
        !           101:          # On arm64 systems, the C compiler may be generating code in one of
        !           102:          # these ABIs:
        !           103:          # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
        !           104:          # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
        !           105:          # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
        !           106:          AC_COMPILE_IFELSE(
        !           107:            [AC_LANG_SOURCE(
        !           108:               [[#ifdef __aarch64__
        !           109:                  int ok;
        !           110:                 #else
        !           111:                  error fail
        !           112:                 #endif
        !           113:               ]])],
        !           114:            [AC_COMPILE_IFELSE(
        !           115:               [AC_LANG_SOURCE(
        !           116:                 [[#if defined __ILP32__ || defined _ILP32
        !           117:                    int ok;
        !           118:                   #else
        !           119:                    error fail
        !           120:                   #endif
        !           121:                 ]])],
        !           122:               [gl_cv_host_cpu_c_abi=arm64-ilp32],
        !           123:               [gl_cv_host_cpu_c_abi=arm64])],
        !           124:            [# Don't distinguish little-endian and big-endian arm, since they
        !           125:             # don't require different machine code for simple operations and
        !           126:             # since the user can distinguish them through the preprocessor
        !           127:             # defines __ARMEL__ vs. __ARMEB__.
        !           128:             # But distinguish arm which passes floating-point arguments and
        !           129:             # return values in integer registers (r0, r1, ...) - this is
        !           130:             # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
        !           131:             # passes them in float registers (s0, s1, ...) and double registers
        !           132:             # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
        !           133:             # sets the preprocessor defines __ARM_PCS (for the first case) and
        !           134:             # __ARM_PCS_VFP (for the second case), but older GCC does not.
        !           135:             echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
        !           136:             # Look for a reference to the register d0 in the .s file.
        !           137:             AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
        !           138:             if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
        !           139:               gl_cv_host_cpu_c_abi=armhf
        !           140:             else
        !           141:               gl_cv_host_cpu_c_abi=arm
        !           142:             fi
        !           143:             rm -f conftest*
        !           144:            ])
        !           145:          ;;
        !           146: 
        !           147:        hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
        !           148:          # On hppa, the C compiler may be generating 32-bit code or 64-bit
        !           149:          # code. In the latter case, it defines _LP64 and __LP64__.
        !           150:          AC_COMPILE_IFELSE(
        !           151:            [AC_LANG_SOURCE(
        !           152:               [[#ifdef __LP64__
        !           153:                  int ok;
        !           154:                 #else
        !           155:                  error fail
        !           156:                 #endif
        !           157:               ]])],
        !           158:            [gl_cv_host_cpu_c_abi=hppa64],
        !           159:            [gl_cv_host_cpu_c_abi=hppa])
        !           160:          ;;
        !           161: 
        !           162:        ia64* )
        !           163:          # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
        !           164:          # 32-bit code. In the latter case, it defines _ILP32.
        !           165:          AC_COMPILE_IFELSE(
        !           166:            [AC_LANG_SOURCE(
        !           167:               [[#ifdef _ILP32
        !           168:                  int ok;
        !           169:                 #else
        !           170:                  error fail
        !           171:                 #endif
        !           172:               ]])],
        !           173:            [gl_cv_host_cpu_c_abi=ia64-ilp32],
        !           174:            [gl_cv_host_cpu_c_abi=ia64])
        !           175:          ;;
        !           176: 
        !           177:        mips* )
        !           178:          # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
        !           179:          # at 32.
        !           180:          AC_COMPILE_IFELSE(
        !           181:            [AC_LANG_SOURCE(
        !           182:               [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
        !           183:                  int ok;
        !           184:                 #else
        !           185:                  error fail
        !           186:                 #endif
        !           187:               ]])],
        !           188:            [gl_cv_host_cpu_c_abi=mips64],
        !           189:            [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
        !           190:             # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32.
        !           191:             # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
        !           192:             # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32.
        !           193:             AC_COMPILE_IFELSE(
        !           194:               [AC_LANG_SOURCE(
        !           195:                  [[#if (_MIPS_SIM == _ABIN32)
        !           196:                     int ok;
        !           197:                    #else
        !           198:                     error fail
        !           199:                    #endif
        !           200:                  ]])],
        !           201:               [gl_cv_host_cpu_c_abi=mipsn32],
        !           202:               [gl_cv_host_cpu_c_abi=mips])])
        !           203:          ;;
        !           204: 
        !           205:        powerpc* )
        !           206:          # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
        !           207:          # No need to distinguish them here; the caller may distinguish
        !           208:          # them based on the OS.
        !           209:          # On powerpc64 systems, the C compiler may still be generating
        !           210:          # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
        !           211:          # be generating 64-bit code.
        !           212:          AC_COMPILE_IFELSE(
        !           213:            [AC_LANG_SOURCE(
        !           214:               [[#if defined __powerpc64__ || defined _ARCH_PPC64
        !           215:                  int ok;
        !           216:                 #else
        !           217:                  error fail
        !           218:                 #endif
        !           219:               ]])],
        !           220:            [# On powerpc64, there are two ABIs on Linux: The AIX compatible
        !           221:             # one and the ELFv2 one. The latter defines _CALL_ELF=2.
        !           222:             AC_COMPILE_IFELSE(
        !           223:               [AC_LANG_SOURCE(
        !           224:                  [[#if defined _CALL_ELF && _CALL_ELF == 2
        !           225:                     int ok;
        !           226:                    #else
        !           227:                     error fail
        !           228:                    #endif
        !           229:                  ]])],
        !           230:               [gl_cv_host_cpu_c_abi=powerpc64-elfv2],
        !           231:               [gl_cv_host_cpu_c_abi=powerpc64])
        !           232:            ],
        !           233:            [gl_cv_host_cpu_c_abi=powerpc])
        !           234:          ;;
        !           235: 
        !           236:        rs6000 )
        !           237:          gl_cv_host_cpu_c_abi=powerpc
        !           238:          ;;
        !           239: 
        !           240:        riscv32 | riscv64 )
        !           241:          # There are 2 architectures (with variants): rv32* and rv64*.
        !           242:          AC_COMPILE_IFELSE(
        !           243:            [AC_LANG_SOURCE(
        !           244:               [[#if __riscv_xlen == 64
        !           245:                   int ok;
        !           246:                 #else
        !           247:                   error fail
        !           248:                 #endif
        !           249:               ]])],
        !           250:            [cpu=riscv64],
        !           251:            [cpu=riscv32])
        !           252:          # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
        !           253:          # Size of 'long' and 'void *':
        !           254:          AC_COMPILE_IFELSE(
        !           255:            [AC_LANG_SOURCE(
        !           256:               [[#if defined __LP64__
        !           257:                   int ok;
        !           258:                 #else
        !           259:                   error fail
        !           260:                 #endif
        !           261:               ]])],
        !           262:            [main_abi=lp64],
        !           263:            [main_abi=ilp32])
        !           264:          # Float ABIs:
        !           265:          # __riscv_float_abi_double:
        !           266:          #   'float' and 'double' are passed in floating-point registers.
        !           267:          # __riscv_float_abi_single:
        !           268:          #   'float' are passed in floating-point registers.
        !           269:          # __riscv_float_abi_soft:
        !           270:          #   No values are passed in floating-point registers.
        !           271:          AC_COMPILE_IFELSE(
        !           272:            [AC_LANG_SOURCE(
        !           273:               [[#if defined __riscv_float_abi_double
        !           274:                   int ok;
        !           275:                 #else
        !           276:                   error fail
        !           277:                 #endif
        !           278:               ]])],
        !           279:            [float_abi=d],
        !           280:            [AC_COMPILE_IFELSE(
        !           281:               [AC_LANG_SOURCE(
        !           282:                  [[#if defined __riscv_float_abi_single
        !           283:                      int ok;
        !           284:                    #else
        !           285:                      error fail
        !           286:                    #endif
        !           287:                  ]])],
        !           288:               [float_abi=f],
        !           289:               [float_abi=''])
        !           290:            ])
        !           291:          gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
        !           292:          ;;
        !           293: 
        !           294:        s390* )
        !           295:          # On s390x, the C compiler may be generating 64-bit (= s390x) code
        !           296:          # or 31-bit (= s390) code.
        !           297:          AC_COMPILE_IFELSE(
        !           298:            [AC_LANG_SOURCE(
        !           299:               [[#if defined __LP64__ || defined __s390x__
        !           300:                   int ok;
        !           301:                 #else
        !           302:                   error fail
        !           303:                 #endif
        !           304:               ]])],
        !           305:            [gl_cv_host_cpu_c_abi=s390x],
        !           306:            [gl_cv_host_cpu_c_abi=s390])
        !           307:          ;;
        !           308: 
        !           309:        sparc | sparc64 )
        !           310:          # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
        !           311:          # C compiler still generates 32-bit code.
        !           312:          AC_COMPILE_IFELSE(
        !           313:            [AC_LANG_SOURCE(
        !           314:               [[#if defined __sparcv9 || defined __arch64__
        !           315:                  int ok;
        !           316:                 #else
        !           317:                  error fail
        !           318:                 #endif
        !           319:               ]])],
        !           320:            [gl_cv_host_cpu_c_abi=sparc64],
        !           321:            [gl_cv_host_cpu_c_abi=sparc])
        !           322:          ;;
        !           323: 
        !           324:        *)
        !           325:          gl_cv_host_cpu_c_abi="$host_cpu"
        !           326:          ;;
        !           327:      esac
        !           328:     ])
        !           329: 
        !           330:   dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same.
        !           331:   HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
        !           332:   HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
        !           333:   AC_SUBST([HOST_CPU])
        !           334:   AC_SUBST([HOST_CPU_C_ABI])
        !           335: 
        !           336:   # This was
        !           337:   #   AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
        !           338:   #   AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
        !           339:   # earlier, but KAI C++ 3.2d doesn't like this.
        !           340:   sed -e 's/-/_/g' >> confdefs.h <<EOF
        !           341: #ifndef __${HOST_CPU}__
        !           342: #define __${HOST_CPU}__ 1
        !           343: #endif
        !           344: #ifndef __${HOST_CPU_C_ABI}__
        !           345: #define __${HOST_CPU_C_ABI}__ 1
        !           346: #endif
        !           347: EOF
        !           348:   AH_TOP([/* CPU and C ABI indicator */
        !           349: #ifndef __i386__
        !           350: #undef __i386__
        !           351: #endif
        !           352: #ifndef __x86_64_x32__
        !           353: #undef __x86_64_x32__
        !           354: #endif
        !           355: #ifndef __x86_64__
        !           356: #undef __x86_64__
        !           357: #endif
        !           358: #ifndef __alpha__
        !           359: #undef __alpha__
        !           360: #endif
        !           361: #ifndef __arm__
        !           362: #undef __arm__
        !           363: #endif
        !           364: #ifndef __armhf__
        !           365: #undef __armhf__
        !           366: #endif
        !           367: #ifndef __arm64_ilp32__
        !           368: #undef __arm64_ilp32__
        !           369: #endif
        !           370: #ifndef __arm64__
        !           371: #undef __arm64__
        !           372: #endif
        !           373: #ifndef __hppa__
        !           374: #undef __hppa__
        !           375: #endif
        !           376: #ifndef __hppa64__
        !           377: #undef __hppa64__
        !           378: #endif
        !           379: #ifndef __ia64_ilp32__
        !           380: #undef __ia64_ilp32__
        !           381: #endif
        !           382: #ifndef __ia64__
        !           383: #undef __ia64__
        !           384: #endif
        !           385: #ifndef __m68k__
        !           386: #undef __m68k__
        !           387: #endif
        !           388: #ifndef __mips__
        !           389: #undef __mips__
        !           390: #endif
        !           391: #ifndef __mipsn32__
        !           392: #undef __mipsn32__
        !           393: #endif
        !           394: #ifndef __mips64__
        !           395: #undef __mips64__
        !           396: #endif
        !           397: #ifndef __powerpc__
        !           398: #undef __powerpc__
        !           399: #endif
        !           400: #ifndef __powerpc64__
        !           401: #undef __powerpc64__
        !           402: #endif
        !           403: #ifndef __powerpc64_elfv2__
        !           404: #undef __powerpc64_elfv2__
        !           405: #endif
        !           406: #ifndef __riscv32__
        !           407: #undef __riscv32__
        !           408: #endif
        !           409: #ifndef __riscv64__
        !           410: #undef __riscv64__
        !           411: #endif
        !           412: #ifndef __riscv32_ilp32__
        !           413: #undef __riscv32_ilp32__
        !           414: #endif
        !           415: #ifndef __riscv32_ilp32f__
        !           416: #undef __riscv32_ilp32f__
        !           417: #endif
        !           418: #ifndef __riscv32_ilp32d__
        !           419: #undef __riscv32_ilp32d__
        !           420: #endif
        !           421: #ifndef __riscv64_ilp32__
        !           422: #undef __riscv64_ilp32__
        !           423: #endif
        !           424: #ifndef __riscv64_ilp32f__
        !           425: #undef __riscv64_ilp32f__
        !           426: #endif
        !           427: #ifndef __riscv64_ilp32d__
        !           428: #undef __riscv64_ilp32d__
        !           429: #endif
        !           430: #ifndef __riscv64_lp64__
        !           431: #undef __riscv64_lp64__
        !           432: #endif
        !           433: #ifndef __riscv64_lp64f__
        !           434: #undef __riscv64_lp64f__
        !           435: #endif
        !           436: #ifndef __riscv64_lp64d__
        !           437: #undef __riscv64_lp64d__
        !           438: #endif
        !           439: #ifndef __s390__
        !           440: #undef __s390__
        !           441: #endif
        !           442: #ifndef __s390x__
        !           443: #undef __s390x__
        !           444: #endif
        !           445: #ifndef __sh__
        !           446: #undef __sh__
        !           447: #endif
        !           448: #ifndef __sparc__
        !           449: #undef __sparc__
        !           450: #endif
        !           451: #ifndef __sparc64__
        !           452: #undef __sparc64__
        !           453: #endif
        !           454: ])
        !           455: 
        !           456: ])
        !           457: 
        !           458: 
        !           459: dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI
        !           460: dnl (application binary interface) is a 32-bit one, or to 'no' otherwise.
        !           461: dnl This is a simplified variant of gl_HOST_CPU_C_ABI.
        !           462: AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT],
        !           463: [
        !           464:   AC_REQUIRE([AC_CANONICAL_HOST])
        !           465:   AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit],
        !           466:     [if test -n "$gl_cv_host_cpu_c_abi"; then
        !           467:        case "$gl_cv_host_cpu_c_abi" in
        !           468:          i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
        !           469:            gl_cv_host_cpu_c_abi_32bit=yes ;;
        !           470:          *)
        !           471:            gl_cv_host_cpu_c_abi_32bit=no ;;
        !           472:        esac
        !           473:      else
        !           474:        case "$host_cpu" in
        !           475: 
        !           476: changequote(,)dnl
        !           477:          i[4567]86 )
        !           478: changequote([,])dnl
        !           479:            gl_cv_host_cpu_c_abi_32bit=yes
        !           480:            ;;
        !           481: 
        !           482:          x86_64 )
        !           483:            # On x86_64 systems, the C compiler may be generating code in one of
        !           484:            # these ABIs:
        !           485:            # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
        !           486:            # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
        !           487:            #   with native Windows (mingw, MSVC).
        !           488:            # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
        !           489:            # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
        !           490:            AC_COMPILE_IFELSE(
        !           491:              [AC_LANG_SOURCE(
        !           492:                 [[#if (defined __x86_64__ || defined __amd64__ \
        !           493:                        || defined _M_X64 || defined _M_AMD64) \
        !           494:                       && !(defined __ILP32__ || defined _ILP32)
        !           495:                    int ok;
        !           496:                   #else
        !           497:                    error fail
        !           498:                   #endif
        !           499:                 ]])],
        !           500:              [gl_cv_host_cpu_c_abi_32bit=no],
        !           501:              [gl_cv_host_cpu_c_abi_32bit=yes])
        !           502:            ;;
        !           503: 
        !           504:          arm* | aarch64 )
        !           505:            # Assume arm with EABI.
        !           506:            # On arm64 systems, the C compiler may be generating code in one of
        !           507:            # these ABIs:
        !           508:            # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
        !           509:            # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
        !           510:            # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
        !           511:            AC_COMPILE_IFELSE(
        !           512:              [AC_LANG_SOURCE(
        !           513:                 [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
        !           514:                    int ok;
        !           515:                   #else
        !           516:                    error fail
        !           517:                   #endif
        !           518:                 ]])],
        !           519:              [gl_cv_host_cpu_c_abi_32bit=no],
        !           520:              [gl_cv_host_cpu_c_abi_32bit=yes])
        !           521:            ;;
        !           522: 
        !           523:          hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
        !           524:            # On hppa, the C compiler may be generating 32-bit code or 64-bit
        !           525:            # code. In the latter case, it defines _LP64 and __LP64__.
        !           526:            AC_COMPILE_IFELSE(
        !           527:              [AC_LANG_SOURCE(
        !           528:                 [[#ifdef __LP64__
        !           529:                    int ok;
        !           530:                   #else
        !           531:                    error fail
        !           532:                   #endif
        !           533:                 ]])],
        !           534:              [gl_cv_host_cpu_c_abi_32bit=no],
        !           535:              [gl_cv_host_cpu_c_abi_32bit=yes])
        !           536:            ;;
        !           537: 
        !           538:          ia64* )
        !           539:            # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
        !           540:            # 32-bit code. In the latter case, it defines _ILP32.
        !           541:            AC_COMPILE_IFELSE(
        !           542:              [AC_LANG_SOURCE(
        !           543:                 [[#ifdef _ILP32
        !           544:                    int ok;
        !           545:                   #else
        !           546:                    error fail
        !           547:                   #endif
        !           548:                 ]])],
        !           549:              [gl_cv_host_cpu_c_abi_32bit=yes],
        !           550:              [gl_cv_host_cpu_c_abi_32bit=no])
        !           551:            ;;
        !           552: 
        !           553:          mips* )
        !           554:            # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
        !           555:            # at 32.
        !           556:            AC_COMPILE_IFELSE(
        !           557:              [AC_LANG_SOURCE(
        !           558:                 [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
        !           559:                    int ok;
        !           560:                   #else
        !           561:                    error fail
        !           562:                   #endif
        !           563:                 ]])],
        !           564:              [gl_cv_host_cpu_c_abi_32bit=no],
        !           565:              [gl_cv_host_cpu_c_abi_32bit=yes])
        !           566:            ;;
        !           567: 
        !           568:          powerpc* )
        !           569:            # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
        !           570:            # No need to distinguish them here; the caller may distinguish
        !           571:            # them based on the OS.
        !           572:            # On powerpc64 systems, the C compiler may still be generating
        !           573:            # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
        !           574:            # be generating 64-bit code.
        !           575:            AC_COMPILE_IFELSE(
        !           576:              [AC_LANG_SOURCE(
        !           577:                 [[#if defined __powerpc64__ || defined _ARCH_PPC64
        !           578:                    int ok;
        !           579:                   #else
        !           580:                    error fail
        !           581:                   #endif
        !           582:                 ]])],
        !           583:              [gl_cv_host_cpu_c_abi_32bit=no],
        !           584:              [gl_cv_host_cpu_c_abi_32bit=yes])
        !           585:            ;;
        !           586: 
        !           587:          rs6000 )
        !           588:            gl_cv_host_cpu_c_abi_32bit=yes
        !           589:            ;;
        !           590: 
        !           591:          riscv32 | riscv64 )
        !           592:            # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
        !           593:            # Size of 'long' and 'void *':
        !           594:            AC_COMPILE_IFELSE(
        !           595:              [AC_LANG_SOURCE(
        !           596:                 [[#if defined __LP64__
        !           597:                     int ok;
        !           598:                   #else
        !           599:                     error fail
        !           600:                   #endif
        !           601:                 ]])],
        !           602:              [gl_cv_host_cpu_c_abi_32bit=no],
        !           603:              [gl_cv_host_cpu_c_abi_32bit=yes])
        !           604:            ;;
        !           605: 
        !           606:          s390* )
        !           607:            # On s390x, the C compiler may be generating 64-bit (= s390x) code
        !           608:            # or 31-bit (= s390) code.
        !           609:            AC_COMPILE_IFELSE(
        !           610:              [AC_LANG_SOURCE(
        !           611:                 [[#if defined __LP64__ || defined __s390x__
        !           612:                     int ok;
        !           613:                   #else
        !           614:                     error fail
        !           615:                   #endif
        !           616:                 ]])],
        !           617:              [gl_cv_host_cpu_c_abi_32bit=no],
        !           618:              [gl_cv_host_cpu_c_abi_32bit=yes])
        !           619:            ;;
        !           620: 
        !           621:          sparc | sparc64 )
        !           622:            # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
        !           623:            # C compiler still generates 32-bit code.
        !           624:            AC_COMPILE_IFELSE(
        !           625:              [AC_LANG_SOURCE(
        !           626:                 [[#if defined __sparcv9 || defined __arch64__
        !           627:                    int ok;
        !           628:                   #else
        !           629:                    error fail
        !           630:                   #endif
        !           631:                 ]])],
        !           632:              [gl_cv_host_cpu_c_abi_32bit=no],
        !           633:              [gl_cv_host_cpu_c_abi_32bit=yes])
        !           634:            ;;
        !           635: 
        !           636:          *)
        !           637:            gl_cv_host_cpu_c_abi_32bit=no
        !           638:            ;;
        !           639:        esac
        !           640:      fi
        !           641:     ])
        !           642: 
        !           643:   HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
        !           644: ])

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>