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>