github.com/kidsbmilk/gofronted_all@v0.0.0-20220701224323-6479d5976c5d/libgo/configure.ac (about)

     1  # configure.ac -- Go library configure script.
     2  
     3  # Copyright 2009 The Go Authors. All rights reserved.
     4  # Use of this source code is governed by a BSD-style
     5  # license that can be found in the LICENSE file.
     6  
     7  # Process this file with autoreconf to produce configure.
     8  
     9  AC_INIT(package-unused, version-unused,, libgo)
    10  AC_CONFIG_SRCDIR(Makefile.am)
    11  AC_CONFIG_HEADER(config.h)
    12  
    13  libtool_VERSION=21:0:0
    14  AC_SUBST(libtool_VERSION)
    15  
    16  AM_ENABLE_MULTILIB(, ..)
    17  
    18  AC_CANONICAL_SYSTEM
    19  target_alias=${target_alias-$host_alias}
    20  
    21  AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dist subdir-objects -Wall -Wno-portability -Wno-override])
    22  AH_TEMPLATE(PACKAGE, [Name of package])
    23  AH_TEMPLATE(VERSION, [Version number of package])
    24  
    25  m4_rename([_AC_ARG_VAR_PRECIOUS],[glibgo_PRECIOUS])
    26  m4_define([_AC_ARG_VAR_PRECIOUS],[])
    27  AC_PROG_CC
    28  AC_PROG_GO
    29  AM_PROG_AS
    30  m4_rename_force([glibgo_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
    31  
    32  AC_SUBST(CFLAGS)
    33  
    34  case ${host} in
    35    *-*-aix*)
    36      # Check default architecture for FAT library creation
    37      if test -z "`$CC -x c -E /dev/null -g3 -o - | grep 64BIT`" ; then
    38          AIX_EXTRA_ARCH='64'
    39      else
    40          AIX_EXTRA_ARCH='32'
    41      fi
    42      AC_SUBST(AIX_EXTRA_ARCH)
    43      ;;
    44  esac
    45  
    46  AM_MAINTAINER_MODE
    47  
    48  AC_PROG_LD
    49  AC_PROG_RANLIB
    50  AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy)
    51  
    52  AC_LIBTOOL_DLOPEN
    53  AM_PROG_LIBTOOL
    54  AC_SUBST(enable_shared)
    55  AC_SUBST(enable_static)
    56  
    57  CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
    58  AC_SUBST(CC_FOR_BUILD)
    59  
    60  AC_PROG_AWK
    61  
    62  WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
    63  AC_SUBST(WARN_FLAGS)
    64  
    65  AC_ARG_ENABLE([werror],
    66    [AS_HELP_STRING([--disable-werror], [disable building with -Werror])])
    67  AS_IF([test "x$enable_werror" != "xno" && test "x$GCC" = "xyes"],
    68    [WERROR="-Werror"])
    69  AC_SUBST(WERROR)
    70  
    71  glibgo_toolexecdir=no
    72  glibgo_toolexeclibdir=no
    73  
    74  AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
    75  AC_ARG_ENABLE([version-specific-runtime-libs],
    76    AC_HELP_STRING([--enable-version-specific-runtime-libs],
    77                   [Specify that runtime libraries should be installed in a compiler-specific directory]),
    78    [case "$enableval" in
    79      yes) version_specific_libs=yes ;;
    80      no)  version_specific_libs=no ;;
    81      *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
    82     esac],
    83    [version_specific_libs=no])
    84  AC_MSG_RESULT($version_specific_libs)
    85  
    86  GCC_WITH_TOOLEXECLIBDIR
    87  
    88  # Version-specific runtime libs processing.
    89  if test $version_specific_libs = yes; then
    90    glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
    91    glibgo_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
    92  fi
    93  
    94  # Calculate glibgo_toolexecdir, glibgo_toolexeclibdir
    95  # Install a library built with a cross compiler in tooldir, not libdir.
    96  if test -n "$with_cross_host" &&
    97     test x"$with_cross_host" != x"no"; then
    98    nover_glibgo_toolexecdir='${exec_prefix}/${host_alias}'
    99    case ${with_toolexeclibdir} in
   100      no)
   101        nover_glibgo_toolexeclibdir='${toolexecdir}/lib'
   102        ;;
   103      *)
   104        nover_glibgo_toolexeclibdir=${with_toolexeclibdir}
   105        ;;
   106    esac
   107  else
   108    nover_glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
   109    nover_glibgo_toolexeclibdir='${libdir}'
   110  fi
   111  multi_os_directory=`$GOC -print-multi-os-directory`
   112  case $multi_os_directory in
   113    .) ;; # Avoid trailing /.
   114    *) nover_glibgo_toolexeclibdir=${nover_glibgo_toolexeclibdir}/${multi_os_directory} ;;
   115  esac
   116  
   117  if test x"$glibgo_toolexecdir" = x"no"; then
   118    glibgo_toolexecdir="${nover_glibgo_toolexecdir}"
   119    glibgo_toolexeclibdir="${nover_glibgo_toolexeclibdir}"
   120  fi
   121  
   122  AC_SUBST(glibgo_toolexecdir)
   123  AC_SUBST(glibgo_toolexeclibdir)
   124  AC_SUBST(nover_glibgo_toolexeclibdir)
   125  
   126  # See if the user wants to configure without libffi.  Some
   127  # architectures don't support it.  FIXME: We should set a default
   128  # based on the host.
   129  AC_ARG_WITH(libffi,
   130    AS_HELP_STRING([--without-libffi],
   131                   [don't use libffi]),
   132    [:],
   133    [with_libffi=${with_libffi_default-yes}])
   134  
   135  LIBFFI=
   136  LIBFFIINCS=
   137  if test "$with_libffi" != no; then
   138     AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
   139     LIBFFI=../libffi/libffi_convenience.la
   140     LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
   141  fi
   142  AC_SUBST(LIBFFI)
   143  AC_SUBST(LIBFFIINCS)
   144  AM_CONDITIONAL(USE_LIBFFI, test "$with_libffi" != "no")
   145  
   146  # See if the user wants to configure without libatomic. This is useful if we are
   147  # on an architecture for which libgo does not need an atomic support library and
   148  # libatomic does not support our C compiler.
   149  AC_ARG_WITH(libatomic,
   150    AS_HELP_STRING([--without-libatomic],
   151                   [don't use libatomic]),
   152    [:],
   153    [with_libatomic=${with_libatomic_default-yes}])
   154  
   155  LIBATOMIC=
   156  if test "$with_libatomic" != no; then
   157     LIBATOMIC=../libatomic/libatomic_convenience.la
   158  fi
   159  AC_SUBST(LIBATOMIC)
   160  
   161  # Used to tell GNU make to include a file without telling automake to
   162  # include it.
   163  go_include="-include"
   164  AC_SUBST(go_include)
   165  
   166  # All known GOOS values.  This is the union of all operating systems
   167  # supported by the gofrontend and all operating systems supported by
   168  # the gc toolchain.
   169  ALLGOOS="aix android darwin dragonfly freebsd hurd illumos ios irix js linux netbsd openbsd plan9 rtems solaris windows zos"
   170  
   171  is_darwin=no
   172  is_freebsd=no
   173  is_irix=no
   174  is_linux=no
   175  is_netbsd=no
   176  is_openbsd=no
   177  is_dragonfly=no
   178  is_rtems=no
   179  is_solaris=no
   180  is_aix=no
   181  is_hurd=no
   182  GOOS=unknown
   183  case ${host} in
   184    *-*-darwin*)   is_darwin=yes;  GOOS=darwin ;;
   185    *-*-freebsd*)  is_freebsd=yes; GOOS=freebsd ;;
   186    *-*-irix6*)    is_irix=yes;    GOOS=irix ;;
   187    *-*-linux*)    is_linux=yes;   GOOS=linux ;;
   188    *-*-netbsd*)	 is_netbsd=yes;  GOOS=netbsd ;;
   189    *-*-openbsd*)  is_openbsd=yes; GOOS=openbsd ;;
   190    *-*-dragonfly*) is_dragonfly=yes; GOOS=dragonfly ;;
   191    *-*-rtems*)    is_rtems=yes;   GOOS=rtems ;;
   192    *-*-solaris2*) is_solaris=yes; GOOS=solaris ;;
   193    *-*-aix*)      is_aix=yes;     GOOS=aix ;;
   194    *-*-gnu*)      is_hurd=yes;    GOOS=hurd ;;
   195  esac
   196  AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
   197  AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
   198  AM_CONDITIONAL(LIBGO_IS_IRIX, test $is_irix = yes)
   199  AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes)
   200  AM_CONDITIONAL(LIBGO_IS_NETBSD, test $is_netbsd = yes)
   201  AM_CONDITIONAL(LIBGO_IS_OPENBSD, test $is_openbsd = yes)
   202  AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test $is_dragonfly = yes)
   203  AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
   204  AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
   205  AM_CONDITIONAL(LIBGO_IS_AIX, test $is_aix = yes)
   206  AM_CONDITIONAL(LIBGO_IS_HURD, test $is_hurd = yes)
   207  AM_CONDITIONAL(LIBGO_IS_BSD, test $is_darwin = yes -o $is_dragonfly = yes -o $is_freebsd = yes -o $is_netbsd = yes -o $is_openbsd = yes)
   208  AC_SUBST(GOOS)
   209  AC_SUBST(ALLGOOS)
   210  
   211  dnl Test whether we need to use DejaGNU or whether we can use the
   212  dnl simpler gotest approach.  We can only use gotest for a native
   213  dnl build.
   214  USE_DEJAGNU=no
   215  case ${host} in
   216    *-*-rtems*) USE_DEJAGNU=yes ;;
   217    ${build}) ;;
   218    *) USE_DEJAGNU=yes ;;
   219  esac
   220  AC_SUBST(USE_DEJAGNU)
   221  
   222  # All known GOARCH values.  This is the union of all architectures
   223  # supported by the gofrontend and all architectures supported by the
   224  # gc toolchain.
   225  # To add a new architecture:
   226  # - add it to this list
   227  # - if appropriate, add an entry to ALLGOARCHFAMILY below
   228  # - add an entry to the case on ${host} below to set GOARCH
   229  # - update goarchList in libgo/go/go/build/syslist.go
   230  # - update goarch.sh to report the values for this architecture
   231  # - update go-set-goarch in gcc/testsuite/go.test/go-test.exp
   232  # - update ptrSizeMap and intSizeMap in libgo/go/cmd/cgo/main.go
   233  # - update arch lists in libgo/match.sh
   234  # - update arch lists in libgo/testsuite/gotest
   235  # - update +build lines in several places
   236  #   - libgo/go/runtime/lfstack_NNbit.go
   237  #   - libgo/go/runtime/hashNN.go
   238  #   - libgo/go/runtime/unalignedN.go
   239  #   - libgo/go/syscall/endian_XX.go
   240  #   - possibly others
   241  # - possibly update files in libgo/go/internal/syscall/unix
   242  ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mips mipsle mips64 mips64le mips64p32 mips64p32le nios2 ppc ppc64 ppc64le riscv riscv64 s390 s390x sh shbe sparc sparc64 wasm"
   243  
   244  # All known GOARCH family values.
   245  ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 NIOS2 PPC PPC64 RISCV RISCV64 S390 S390X SH SPARC SPARC64 WASM"
   246  
   247  GOARCH=unknown
   248  case ${host} in
   249    alpha*-*-*)
   250      GOARCH=alpha
   251      ;;
   252    aarch64-*-*)
   253      GOARCH=arm64
   254      ;;
   255    aarch64_be-*-*)
   256      GOARCH=arm64be
   257      ;;
   258    arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
   259      GOARCH=arm
   260      case ${host} in
   261        arm*b*-*-*)
   262  	GOARCH=armbe
   263  	;;
   264      esac
   265      ;;
   266  changequote(,)dnl
   267    i[34567]86-*-* | x86_64-*-*)
   268  changequote([,])dnl
   269      AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   270  #ifdef __x86_64__
   271  #error 64-bit
   272  #endif
   273  ])],
   274  	[GOARCH=386],
   275  	AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   276  #ifdef __ILP32__
   277  #error x32
   278  #endif
   279  ])],
   280  	[GOARCH=amd64],
   281  	[GOARCH=amd64p32]))
   282      ;;
   283    ia64-*-*)
   284      GOARCH=ia64
   285      ;;
   286    m68k*-*-*)
   287      GOARCH=m68k
   288      ;;
   289    mips*-*-*)
   290      AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   291  #if _MIPS_SIM != _ABIO32
   292  #error not o32
   293  #endif
   294  ])],
   295  [mips_abi="o32"],
   296  	[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   297  #if _MIPS_SIM != _ABIN32
   298  #error not n32
   299  #endif
   300  ])],
   301  [mips_abi="n32"],
   302  	[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   303  #if _MIPS_SIM != _ABI64
   304  #error not n64
   305  #endif
   306  ])],
   307  [mips_abi="n64"],
   308  	[AC_MSG_ERROR([unknown MIPS ABI])
   309  [mips_abi="n32"]])])])
   310      case "$mips_abi" in
   311      "o32") GOARCH=mips ;;
   312      "n32") GOARCH=mips64p32 ;;
   313      "n64") GOARCH=mips64 ;;
   314      esac
   315      case "${host}" in
   316      mips*el-*-*)
   317          GOARCH="${GOARCH}le"
   318          ;;
   319      esac
   320      ;;
   321    nios2-*-*)
   322      GOARCH=nios2
   323      ;;
   324    rs6000*-*-* | powerpc*-*-*)
   325      AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   326  #ifdef _ARCH_PPC64
   327  #error 64-bit
   328  #endif
   329  ])],
   330  [GOARCH=ppc],
   331      [
   332  AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   333  #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
   334  #error 64be
   335  #endif
   336  ])],
   337  [GOARCH=ppc64le],
   338  [GOARCH=ppc64])])
   339      ;;
   340    riscv*-*-*)
   341      AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   342  #if __riscv_xlen == 64
   343  #error 64-bit
   344  #endif
   345  ])],
   346  [GOARCH=riscv],
   347  [GOARCH=riscv64])
   348      ;;
   349    s390*-*-*)
   350      AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   351  #if defined(__s390x__)
   352  #error 64-bit
   353  #endif
   354  ])],
   355  [GOARCH=s390],
   356  [GOARCH=s390x])
   357      ;;
   358    sh3eb*-*-* | sh4eb*-*-*)
   359      GOARCH=shbe
   360      ;;
   361    sh3*-*-* | sh4*-*-*)
   362      GOARCH=sh
   363      ;;
   364    sparc*-*-*)
   365      AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   366  #if defined(__sparcv9) || defined(__arch64__)
   367  #error 64-bit
   368  #endif
   369  ])],
   370  [GOARCH=sparc],
   371  [GOARCH=sparc64])
   372      ;;
   373  esac
   374  AC_SUBST(GOARCH)
   375  AC_SUBST(ALLGOARCH)
   376  AC_SUBST(ALLGOARCHFAMILY)
   377  
   378  AM_CONDITIONAL(LIBGO_IS_X86, test "$GOARCH" = "386" -o "$GOARCH" = "amd64" -o "$GOARCH" = "amd64p32")
   379  
   380  FUNCTION_DESCRIPTORS=false
   381  case ${host} in
   382    rs6000*-*-* | powerpc*-*-*)
   383      AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   384  #if _CALL_ELF == 1
   385  #error descriptors
   386  #endif
   387  ])],
   388  	[FUNCTION_DESCRIPTORS=false],
   389  	[FUNCTION_DESCRIPTORS=true])
   390      ;;
   391  esac
   392  AC_SUBST(FUNCTION_DESCRIPTORS)
   393  
   394  dnl Some files are only present when needed for specific architectures.
   395  GO_LIBCALL_OS_FILE=
   396  GO_LIBCALL_OS_ARCH_FILE=
   397  GO_SYSCALL_OS_FILE=
   398  GO_SYSCALL_OS_ARCH_FILE=
   399  if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then
   400    GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go"
   401  fi
   402  if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then
   403    GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go"
   404  fi
   405  if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then
   406    GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go"
   407  fi
   408  if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then
   409    GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go"
   410  fi
   411  AC_SUBST(GO_LIBCALL_OS_FILE)
   412  AC_SUBST(GO_LIBCALL_OS_ARCH_FILE)
   413  AC_SUBST(GO_SYSCALL_OS_FILE)
   414  AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
   415  
   416  dnl Special flags used to generate sysinfo.go.
   417  OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
   418  case "$target" in
   419      mips-sgi-irix6.5*)
   420  	# IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct
   421  	# msghdr in <sys/socket.h>.
   422  	OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500"
   423  	;;
   424      *-*-solaris2.*)
   425  	# Solaris 10+ needs this so struct msghdr gets the msg_control
   426  	# etc. fields in <sys/socket.h> (_XPG4_2).  _XOPEN_SOURCE=600 as
   427  	# above doesn't work with C99.
   428  	OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__"
   429  	;;
   430  esac
   431  AC_SUBST(OSCFLAGS)
   432  
   433  dnl Check if assembler supports disabling hardware capability support.
   434  GCC_CHECK_ASSEMBLER_HWCAP
   435  
   436  dnl Use -fsplit-stack when compiling C code if available.
   437  AC_CACHE_CHECK([whether -fsplit-stack is supported],
   438  [libgo_cv_c_split_stack_supported],
   439  [CFLAGS_hold=$CFLAGS
   440  CFLAGS="$CFLAGS -fsplit-stack"
   441  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
   442  [libgo_cv_c_split_stack_supported=yes],
   443  [libgo_cv_c_split_stack_supported=no])
   444  CFLAGS=$CFLAGS_hold])
   445  
   446  dnl Make sure the linker permits -fsplit-stack.  Old versions of gold will
   447  dnl reject split-stack code calling non-split-stack code on targets
   448  dnl they don't support.
   449  AC_CACHE_CHECK([whether linker supports split/non-split linked together],
   450  [libgo_cv_c_linker_split_non_split],
   451  [cat > conftest1.c << EOF
   452  extern void f();
   453  int main() { f(); return 0; }
   454  EOF
   455  cat > conftest2.c << EOF
   456  void f() {}
   457  EOF
   458  $CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c >/dev/null 2>&1
   459  $CC -c $CFLAGS $CPPFLAGS conftest2.c > /dev/null 2>&1
   460  if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext > /dev/null 2>&1; then
   461    libgo_cv_c_linker_split_non_split=yes
   462  else
   463    libgo_cv_c_linker_split_non_split=no
   464  fi
   465  rm -f conftest1.* conftest2.* conftest])
   466  
   467  if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then
   468    SPLIT_STACK=-fsplit-stack
   469    AC_DEFINE(USING_SPLIT_STACK, 1,
   470  		[Define if the compiler supports -fsplit-stack])
   471  else
   472    SPLIT_STACK=
   473  fi
   474  AC_SUBST(SPLIT_STACK)
   475  AM_CONDITIONAL(USING_SPLIT_STACK,
   476  	test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
   477  
   478  dnl If the compiler supports split-stack but the linker does not, then
   479  dnl we need to explicitly disable split-stack for Go.
   480  if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
   481    GO_SPLIT_STACK=-fno-split-stack
   482  else
   483    GO_SPLIT_STACK=
   484  fi
   485  AC_SUBST(GO_SPLIT_STACK)
   486  
   487  dnl Check whether the linker does stack munging when calling from
   488  dnl split-stack into non-split-stack code.  We check this by looking
   489  dnl at the --help output.  FIXME: This is only half right: it's
   490  dnl possible for the linker to support this for some targets but not
   491  dnl others.
   492  dnl This is slightly different from the above check, which is whether
   493  dnl the linker permits the call at all.
   494  AC_CACHE_CHECK([whether linker supports split stack],
   495  [libgo_cv_c_linker_supports_split_stack],
   496  [libgo_cv_c_linker_supports_split_stack=no
   497  if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
   498    libgo_cv_c_linker_supports_split_stack=yes
   499  fi])
   500  if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
   501    AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
   502  	    [Define if the linker support split stack adjustments])
   503  fi
   504  
   505  AC_CACHE_CHECK([whether compiler is llgo],
   506  [libgo_cv_c_goc_is_llgo],
   507  [libgo_cv_c_goc_is_llgo=no
   508  if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then
   509    libgo_cv_c_goc_is_llgo=yes
   510  fi])
   511  AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes)
   512  
   513  dnl Test for the -lm library.
   514  MATH_LIBS=
   515  AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
   516  AC_SUBST(MATH_LIBS)
   517  
   518  dnl Test for -lsocket and -lnsl.  Copied from libjava/configure.ac.
   519  AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
   520    [libgo_cv_lib_sockets=
   521     libgo_check_both=no
   522     AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
   523     if test "$libgo_check_socket" = "yes"; then
   524       unset ac_cv_func_connect
   525       AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
   526       		  libgo_check_both=yes)
   527     fi
   528     if test "$libgo_check_both" = "yes"; then
   529       libgo_old_libs=$LIBS
   530       LIBS="$LIBS -lsocket -lnsl"
   531       unset ac_cv_func_accept
   532       AC_CHECK_FUNC(accept,
   533  		   [libgo_check_nsl=no
   534  		    libgo_cv_lib_sockets="-lsocket -lnsl"])
   535       unset ac_cv_func_accept
   536       LIBS=$libgo_old_libs
   537     fi
   538     unset ac_cv_func_gethostbyname
   539     libgo_old_libs="$LIBS"
   540     AC_CHECK_FUNC(gethostbyname, ,
   541  		 [AC_CHECK_LIB(nsl, main,
   542  		 	[libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
   543     unset ac_cv_func_gethostbyname
   544     AC_CHECK_FUNC(sendfile, ,
   545  		 [AC_CHECK_LIB(sendfile, main,
   546  		 	[libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])])
   547     LIBS=$libgo_old_libs
   548  ])
   549  NET_LIBS="$libgo_cv_lib_sockets"
   550  AC_SUBST(NET_LIBS)
   551  
   552  dnl Test whether the compiler supports the -pthread option.
   553  AC_CACHE_CHECK([whether -pthread is supported],
   554  [libgo_cv_lib_pthread],
   555  [CFLAGS_hold=$CFLAGS
   556  CFLAGS="$CFLAGS -pthread -L../libatomic/.libs"
   557  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
   558  [libgo_cv_lib_pthread=yes],
   559  [libgo_cv_lib_pthread=no])
   560  CFLAGS=$CFLAGS_hold])
   561  PTHREAD_CFLAGS=
   562  if test "$libgo_cv_lib_pthread" = yes; then
   563    # RISC-V apparently adds -latomic when using -pthread.
   564    PTHREAD_CFLAGS="-pthread -L../libatomic/.libs"
   565  fi
   566  AC_SUBST(PTHREAD_CFLAGS)
   567  
   568  dnl Test for the -lpthread library.
   569  PTHREAD_LIBS=
   570  AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
   571  AC_SUBST(PTHREAD_LIBS)
   572  
   573  dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
   574  AC_SEARCH_LIBS([sched_yield], [rt])
   575  AC_SEARCH_LIBS([nanosleep], [rt])
   576  AC_SEARCH_LIBS([clock_gettime], [rt])
   577  
   578  AC_C_BIGENDIAN
   579  
   580  GCC_CHECK_UNWIND_GETIPINFO
   581  
   582  AC_CHECK_HEADERS(fcntl.h port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h)
   583  
   584  AC_CHECK_HEADERS([netinet/icmp6.h], [], [],
   585  [#include <netinet/in.h>
   586  ])
   587  
   588  AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
   589  [#ifdef HAVE_SYS_SOCKET_H
   590  #include <sys/socket.h>
   591  #endif
   592  ])
   593  
   594  AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
   595  
   596  AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr memmem)
   597  AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
   598  AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
   599  
   600  AC_STRUCT_DIRENT_D_TYPE
   601  
   602  AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat open64 openat pipe2 removexattr renameat setxattr sync_file_range splice syscall tee unlinkat unshare utimensat)
   603  AC_TYPE_OFF_T
   604  
   605  CFLAGS_hold="$CFLAGS"
   606  CFLAGS="$OSCFLAGS $CFLAGS"
   607  AC_CHECK_TYPES([loff_t], [], [], [[
   608  #include <sys/types.h>
   609  #include <fcntl.h>
   610  ]])
   611  CFLAGS="$CFLAGS_hold"
   612  
   613  LIBS_hold="$LIBS"
   614  LIBS="$LIBS -lm"
   615  AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
   616  LIBS="$LIBS_hold"
   617  
   618  CFLAGS_hold="$CFLAGS"
   619  CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
   620  LIBS_hold="$LIBS"
   621  LIBS="$LIBS $PTHREAD_LIBS"
   622  AC_CHECK_FUNCS(sem_timedwait)
   623  CFLAGS="$CFLAGS_hold"
   624  LIBS="$LIBS_hold"
   625  
   626  LIBS_hold="$LIBS"
   627  LIBS="$LIBS $MATH_LIBS"
   628  AC_CHECK_FUNCS(matherr)
   629  LIBS="$LIBS_hold"
   630  
   631  dnl For x86 we want to use the -minline-all-stringops option to avoid
   632  dnl forcing a stack split when calling memcpy and friends.
   633  AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
   634  [libgo_cv_c_stringops],
   635  [CFLAGS_hold=$CFLAGS
   636  CFLAGS="$CFLAGS -minline-all-stringops"
   637  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
   638  [libgo_cv_c_stringops=yes],
   639  [libgo_cv_c_stringops=no])
   640  CFLAGS=$CFLAGS_hold])
   641  STRINGOPS_FLAG=
   642  if test "$libgo_cv_c_stringops" = yes; then
   643    STRINGOPS_FLAG=-minline-all-stringops
   644  fi
   645  AC_SUBST(STRINGOPS_FLAG)
   646  
   647  dnl For x86 we want to compile the math library with -mfancy-math-387
   648  dnl so that we can use the builtin instructions directly.
   649  AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
   650  [libgo_cv_c_fancymath],
   651  [CFLAGS_hold=$CFLAGS
   652  CFLAGS="$CFLAGS -mfancy-math-387"
   653  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
   654  [libgo_cv_c_fancymath=yes],
   655  [libgo_cv_c_fancymath=no])
   656  CFLAGS=$CFLAGS_hold])
   657  MATH_FLAG=
   658  if test "$libgo_cv_c_fancymath" = yes; then
   659    MATH_FLAG="-mfancy-math-387"
   660  fi
   661  MATH_FLAG="${MATH_FLAG} -ffp-contract=off -fno-math-errno -fno-trapping-math"
   662  AC_SUBST(MATH_FLAG)
   663  
   664  CFLAGS_hold=$CFLAGS
   665  CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
   666  AC_CHECK_TYPES([off64_t])
   667  CFLAGS=$CFLAGS_hold
   668  
   669  dnl Work out the size of the epoll_events struct on GNU/Linux.
   670  AC_CACHE_CHECK([epoll_event size],
   671  [libgo_cv_c_epoll_event_size],
   672  [AC_COMPUTE_INT(libgo_cv_c_epoll_event_size,
   673  [sizeof (struct epoll_event)],
   674  [#include <sys/epoll.h>],
   675  [libgo_cv_c_epoll_event_size=0])])
   676  SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
   677  AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
   678  
   679  dnl Work out the offset of the fd field in the epoll_events struct on
   680  dnl GNU/Linux.
   681  AC_CACHE_CHECK([epoll_event data.fd offset],
   682  [libgo_cv_c_epoll_event_fd_offset],
   683  [AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset,
   684  [offsetof (struct epoll_event, data.fd)],
   685  [#include <stddef.h>
   686  #include <sys/epoll.h>],
   687  [libgo_cv_c_epoll_event_fd_offset=0])])
   688  STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
   689  AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
   690  
   691  dnl Check if <sys/stat.h> uses timespec_t for st_?tim members.  Introduced
   692  dnl in Solaris 11.4 for XPG7 compatibility.
   693  AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
   694  		[have_stat_timespec=yes], [have_stat_timespec=no])
   695  AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
   696  
   697  dnl See if struct exception is defined in <math.h>.
   698  AC_CHECK_TYPE([struct exception],
   699  [libgo_has_struct_exception=yes],
   700  [libgo_has_struct_exception=no],
   701  [#include <math.h>])
   702  if test "$libgo_has_struct_exception" = "yes"; then
   703    AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
   704              [Define to 1 if <math.h> defines struct exception])
   705  fi
   706  
   707  dnl See whether setcontext changes the value of TLS variables.
   708  AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
   709  [libgo_cv_lib_setcontext_clobbers_tls],
   710  [CFLAGS_hold="$CFLAGS"
   711  CFLAGS="$PTHREAD_CFLAGS"
   712  LIBS_hold="$LIBS"
   713  LIBS="$LIBS $PTHREAD_LIBS"
   714  AC_CHECK_SIZEOF([void *])
   715  AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
   716  AC_RUN_IFELSE(
   717    [AC_LANG_SOURCE([
   718  #include <pthread.h>
   719  #include <stdlib.h>
   720  #include <ucontext.h>
   721  #include <unistd.h>
   722  
   723  __thread int tls;
   724  
   725  static char stack[[10 * 1024 * 1024]];
   726  static ucontext_t c;
   727  
   728  /* Called via makecontext/setcontext.  */
   729  
   730  static void
   731  cfn (void)
   732  {
   733    exit (tls);
   734  }
   735  
   736  /* Called via pthread_create.  */
   737  
   738  static void *
   739  tfn (void *dummy)
   740  {
   741    /* The thread should still see this value after calling
   742       setcontext.  */
   743    tls = 0;
   744  
   745    setcontext (&c);
   746  
   747    /* The call to setcontext should not return.  */
   748    abort ();
   749  }
   750  
   751  int
   752  main ()
   753  {
   754    pthread_t tid;
   755  
   756    /* The thread should not see this value.  */
   757    tls = 1;
   758  
   759    if (getcontext (&c) < 0)
   760      abort ();
   761  
   762    c.uc_stack.ss_sp = stack;
   763  #ifdef MAKECONTEXT_STACK_TOP
   764    c.uc_stack.ss_sp += sizeof stack;
   765  #endif
   766    c.uc_stack.ss_flags = 0;
   767    c.uc_stack.ss_size = sizeof stack;
   768    c.uc_link = NULL;
   769    makecontext (&c, cfn, 0);
   770  
   771    if (pthread_create (&tid, NULL, tfn, NULL) != 0)
   772      abort ();
   773  
   774    if (pthread_join (tid, NULL) != 0)
   775      abort ();
   776  
   777    /* The thread should have called exit.  */
   778    abort ();
   779  }
   780  ])],
   781  [libgo_cv_lib_setcontext_clobbers_tls=no],
   782  [libgo_cv_lib_setcontext_clobbers_tls=yes],
   783  [case "$target:$ptr_type_size" in
   784    i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64)
   785      libgo_cv_lib_setcontext_clobbers_tls=yes ;;
   786    *)
   787      libgo_cv_lib_setcontext_clobbers_tls=no ;;
   788   esac
   789  ])
   790  CFLAGS="$CFLAGS_hold"
   791  LIBS="$LIBS_hold"
   792  ])
   793  if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
   794    AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
   795  	    [Define if setcontext clobbers TLS variables])
   796  fi
   797  
   798  AC_CACHE_CHECK([whether .eh_frame section should be read-only],
   799  libgo_cv_ro_eh_frame, [
   800  libgo_cv_ro_eh_frame=no
   801  echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
   802  if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
   803    if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
   804      libgo_cv_ro_eh_frame=yes
   805    elif grep '.section.*eh_frame.*#alloc' conftest.c \
   806         | grep -v '#write' > /dev/null; then
   807      libgo_cv_ro_eh_frame=yes
   808    fi
   809  fi
   810  rm -f conftest.*
   811  ])
   812  if test "x$libgo_cv_ro_eh_frame" = xyes; then
   813    AC_DEFINE(EH_FRAME_FLAGS, "a",
   814  	    [Define to the flags needed for the .section .eh_frame directive.])
   815  else
   816    AC_DEFINE(EH_FRAME_FLAGS, "aw",
   817  	    [Define to the flags needed for the .section .eh_frame directive.])
   818  fi
   819  
   820  AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
   821  [libgo_cv_c_unused_arguments],
   822  [CFLAGS_hold=$CFLAGS
   823  CFLAGS="$CFLAGS -Qunused-arguments"
   824  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
   825  [libgo_cv_c_unused_arguments=yes],
   826  [libgo_cv_c_unused_arguments=no])
   827  CFLAGS=$CFLAGS_hold])
   828  
   829  AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
   830  libgo_cv_as_comdat_gnu, [
   831  echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
   832  CFLAGS_hold=$CFLAGS
   833  if test "$libgo_cv_c_unused_arguments" = yes; then
   834    CFLAGS="$CFLAGS -Qunused-arguments"
   835  fi
   836  if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
   837    libgo_cv_as_comdat_gnu=yes
   838  else
   839    libgo_cv_as_comdat_gnu=no
   840  fi
   841  CFLAGS=$CFLAGS_hold
   842  ])
   843  if test "x$libgo_cv_as_comdat_gnu" = xyes; then
   844    AC_DEFINE(HAVE_AS_COMDAT_GAS, 1,
   845  	    [Define if your assembler supports GNU comdat group syntax.])
   846  fi
   847  
   848  AC_CACHE_CHECK([assembler supports pc related relocs],
   849  libgo_cv_as_x86_pcrel, [
   850  libgo_cv_as_x86_pcrel=yes
   851  echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
   852  CFLAGS_hold=$CFLAGS
   853  if test "$libgo_cv_c_unused_arguments" = yes; then
   854    CFLAGS="$CFLAGS -Qunused-arguments"
   855  fi
   856  if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
   857      libgo_cv_as_x86_pcrel=no
   858  fi
   859  CFLAGS=$CFLAGS_hold
   860  ])
   861  if test "x$libgo_cv_as_x86_pcrel" = xyes; then
   862    AC_DEFINE(HAVE_AS_X86_PCREL, 1,
   863  	    [Define if your assembler supports PC relative relocs.])
   864  fi
   865  
   866  AC_CACHE_CHECK([assembler supports unwind section type],
   867  libgo_cv_as_x86_64_unwind_section_type, [
   868  libgo_cv_as_x86_64_unwind_section_type=yes
   869  echo '.section .eh_frame,"a",@unwind' > conftest.s
   870  CFLAGS_hold=$CFLAGS
   871  if test "$libgo_cv_c_unused_arguments" = yes; then
   872    CFLAGS="$CFLAGS -Qunused-arguments"
   873  fi
   874  if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
   875      libgo_cv_as_x86_64_unwind_section_type=no
   876  fi
   877  CFLAGS=$CFLAGS_hold
   878  ])
   879  if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then
   880    AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
   881  	    [Define if your assembler supports unwind section type.])
   882  fi
   883  
   884  AC_CACHE_CHECK([assembler supports AES instructions],
   885  libgo_cv_as_x86_aes, [
   886  libgo_cv_as_x86_aes=yes
   887  echo 'aesenc %xmm0, %xmm1' > conftest.s
   888  CFLAGS_hold=$CFLAGS
   889  if test "$libgo_cv_c_unused_arguments" = yes; then
   890    CFLAGS="$CFLAGS -Qunused-arguments"
   891  fi
   892  if $CC $CFLAGS -c conftest.s 2>&1 | grep -i error > /dev/null; then
   893      libgo_cv_as_x86_aes=no
   894  fi
   895  CFLAGS=$CFLAGS_hold
   896  ])
   897  if test "x$libgo_cv_as_x86_aes" = xyes; then
   898    AC_DEFINE(HAVE_AS_X86_AES, 1,
   899  	    [Define if your assembler supports AES instructions.])
   900  fi
   901  
   902  dnl Test whether the linker supports the -static option.
   903  AC_CACHE_CHECK([whether -static is supported],
   904  [libgo_cv_ld_static],
   905  [LDFLAGS_hold=$LDFLAGS
   906  LDFLAGS="$LDFLAGS -static"
   907  AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
   908  [libgo_cv_ld_static=yes],
   909  [libgo_cv_ld_static=no])
   910  LDFLAGS=$LDFLAGS_hold])
   911  AM_CONDITIONAL(HAVE_STATIC_LINK, test "$libgo_cv_ld_static" = yes)
   912  
   913  AC_CACHE_SAVE
   914  
   915  if test ${multilib} = yes; then
   916    multilib_arg="--enable-multilib"
   917  else
   918    multilib_arg=
   919  fi
   920  
   921  AC_CONFIG_FILES(Makefile testsuite/Makefile testsuite/libgo-test-support.exp)
   922  
   923  AC_CONFIG_COMMANDS([default],
   924  [if test -n "$CONFIG_FILES"; then
   925     # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
   926     # that multilib installs will end up installed in the correct place.
   927     # The testsuite needs it for multilib-aware ABI baseline files.
   928     # To work around this not being passed down from config-ml.in ->
   929     # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
   930     # append it here.  Only modify Makefiles that have just been created.
   931     #
   932     # Also, get rid of this simulated-VPATH thing that automake does.
   933     cat > vpsed << \_EOF
   934  s!`test -f '$<' || echo '$(srcdir)/'`!!
   935  _EOF
   936     for i in $SUBDIRS; do
   937      case $CONFIG_FILES in
   938       *${i}/Makefile*)
   939         #echo "Adding MULTISUBDIR to $i/Makefile"
   940         sed -f vpsed $i/Makefile > tmp
   941         grep '^MULTISUBDIR =' Makefile >> tmp
   942         mv tmp $i/Makefile
   943         ;;
   944      esac
   945     done
   946     rm vpsed
   947   fi
   948  ],
   949  [
   950  # Variables needed in config.status (file generation) which aren't already
   951  # passed by autoconf.
   952  SUBDIRS="$SUBDIRS"
   953  ])
   954  
   955  AC_OUTPUT