github.com/alexanius/gollvm12@v0.0.0-20230419200121-b152358b84f3/gofrontend/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=22: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 -lucontext is required for makecontext.
   574  AC_SEARCH_LIBS([makecontext], [ucontext])
   575  
   576  dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
   577  AC_SEARCH_LIBS([sched_yield], [rt])
   578  AC_SEARCH_LIBS([nanosleep], [rt])
   579  AC_SEARCH_LIBS([clock_gettime], [rt])
   580  
   581  AC_C_BIGENDIAN
   582  
   583  GCC_CHECK_UNWIND_GETIPINFO
   584  
   585  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)
   586  
   587  AC_CHECK_HEADERS([netinet/icmp6.h], [], [],
   588  [#include <netinet/in.h>
   589  ])
   590  
   591  AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
   592  [#ifdef HAVE_SYS_SOCKET_H
   593  #include <sys/socket.h>
   594  #endif
   595  ])
   596  
   597  AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
   598  
   599  AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr memmem)
   600  AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
   601  AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
   602  
   603  AC_STRUCT_DIRENT_D_TYPE
   604  
   605  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)
   606  AC_TYPE_OFF_T
   607  
   608  CFLAGS_hold="$CFLAGS"
   609  CFLAGS="$OSCFLAGS $CFLAGS"
   610  AC_CHECK_TYPES([loff_t], [], [], [[
   611  #include <sys/types.h>
   612  #include <fcntl.h>
   613  ]])
   614  CFLAGS="$CFLAGS_hold"
   615  
   616  LIBS_hold="$LIBS"
   617  LIBS="$LIBS -lm"
   618  AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
   619  LIBS="$LIBS_hold"
   620  
   621  CFLAGS_hold="$CFLAGS"
   622  CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
   623  LIBS_hold="$LIBS"
   624  LIBS="$LIBS $PTHREAD_LIBS"
   625  AC_CHECK_FUNCS(sem_timedwait)
   626  CFLAGS="$CFLAGS_hold"
   627  LIBS="$LIBS_hold"
   628  
   629  LIBS_hold="$LIBS"
   630  LIBS="$LIBS $MATH_LIBS"
   631  AC_CHECK_FUNCS(matherr)
   632  LIBS="$LIBS_hold"
   633  
   634  dnl For x86 we want to use the -minline-all-stringops option to avoid
   635  dnl forcing a stack split when calling memcpy and friends.
   636  AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
   637  [libgo_cv_c_stringops],
   638  [CFLAGS_hold=$CFLAGS
   639  CFLAGS="$CFLAGS -minline-all-stringops"
   640  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
   641  [libgo_cv_c_stringops=yes],
   642  [libgo_cv_c_stringops=no])
   643  CFLAGS=$CFLAGS_hold])
   644  STRINGOPS_FLAG=
   645  if test "$libgo_cv_c_stringops" = yes; then
   646    STRINGOPS_FLAG=-minline-all-stringops
   647  fi
   648  AC_SUBST(STRINGOPS_FLAG)
   649  
   650  dnl For x86 we want to compile the math library with -mfancy-math-387
   651  dnl so that we can use the builtin instructions directly.
   652  AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
   653  [libgo_cv_c_fancymath],
   654  [CFLAGS_hold=$CFLAGS
   655  CFLAGS="$CFLAGS -mfancy-math-387"
   656  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
   657  [libgo_cv_c_fancymath=yes],
   658  [libgo_cv_c_fancymath=no])
   659  CFLAGS=$CFLAGS_hold])
   660  MATH_FLAG=
   661  if test "$libgo_cv_c_fancymath" = yes; then
   662    MATH_FLAG="-mfancy-math-387"
   663  fi
   664  MATH_FLAG="${MATH_FLAG} -ffp-contract=off -fno-math-errno -fno-trapping-math"
   665  AC_SUBST(MATH_FLAG)
   666  
   667  CFLAGS_hold=$CFLAGS
   668  CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
   669  AC_CHECK_TYPES([off64_t])
   670  CFLAGS=$CFLAGS_hold
   671  
   672  dnl Work out the size of the epoll_events struct on GNU/Linux.
   673  AC_CACHE_CHECK([epoll_event size],
   674  [libgo_cv_c_epoll_event_size],
   675  [AC_COMPUTE_INT(libgo_cv_c_epoll_event_size,
   676  [sizeof (struct epoll_event)],
   677  [#include <sys/epoll.h>],
   678  [libgo_cv_c_epoll_event_size=0])])
   679  SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
   680  AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
   681  
   682  dnl Work out the offset of the fd field in the epoll_events struct on
   683  dnl GNU/Linux.
   684  AC_CACHE_CHECK([epoll_event data.fd offset],
   685  [libgo_cv_c_epoll_event_fd_offset],
   686  [AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset,
   687  [offsetof (struct epoll_event, data.fd)],
   688  [#include <stddef.h>
   689  #include <sys/epoll.h>],
   690  [libgo_cv_c_epoll_event_fd_offset=0])])
   691  STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
   692  AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
   693  
   694  dnl Check if <sys/stat.h> uses timespec_t for st_?tim members.  Introduced
   695  dnl in Solaris 11.4 for XPG7 compatibility.
   696  AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
   697  		[have_stat_timespec=yes], [have_stat_timespec=no])
   698  AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
   699  
   700  dnl See if struct exception is defined in <math.h>.
   701  AC_CHECK_TYPE([struct exception],
   702  [libgo_has_struct_exception=yes],
   703  [libgo_has_struct_exception=no],
   704  [#include <math.h>])
   705  if test "$libgo_has_struct_exception" = "yes"; then
   706    AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
   707              [Define to 1 if <math.h> defines struct exception])
   708  fi
   709  
   710  dnl See whether setcontext changes the value of TLS variables.
   711  AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
   712  [libgo_cv_lib_setcontext_clobbers_tls],
   713  [CFLAGS_hold="$CFLAGS"
   714  CFLAGS="$PTHREAD_CFLAGS"
   715  LIBS_hold="$LIBS"
   716  LIBS="$LIBS $PTHREAD_LIBS"
   717  AC_CHECK_SIZEOF([void *])
   718  AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
   719  AC_RUN_IFELSE(
   720    [AC_LANG_SOURCE([
   721  #include <pthread.h>
   722  #include <stdlib.h>
   723  #include <ucontext.h>
   724  #include <unistd.h>
   725  
   726  __thread int tls;
   727  
   728  static char stack[[10 * 1024 * 1024]];
   729  static ucontext_t c;
   730  
   731  /* Called via makecontext/setcontext.  */
   732  
   733  static void
   734  cfn (void)
   735  {
   736    exit (tls);
   737  }
   738  
   739  /* Called via pthread_create.  */
   740  
   741  static void *
   742  tfn (void *dummy)
   743  {
   744    /* The thread should still see this value after calling
   745       setcontext.  */
   746    tls = 0;
   747  
   748    setcontext (&c);
   749  
   750    /* The call to setcontext should not return.  */
   751    abort ();
   752  }
   753  
   754  int
   755  main ()
   756  {
   757    pthread_t tid;
   758  
   759    /* The thread should not see this value.  */
   760    tls = 1;
   761  
   762    if (getcontext (&c) < 0)
   763      abort ();
   764  
   765    c.uc_stack.ss_sp = stack;
   766  #ifdef MAKECONTEXT_STACK_TOP
   767    c.uc_stack.ss_sp += sizeof stack;
   768  #endif
   769    c.uc_stack.ss_flags = 0;
   770    c.uc_stack.ss_size = sizeof stack;
   771    c.uc_link = NULL;
   772    makecontext (&c, cfn, 0);
   773  
   774    if (pthread_create (&tid, NULL, tfn, NULL) != 0)
   775      abort ();
   776  
   777    if (pthread_join (tid, NULL) != 0)
   778      abort ();
   779  
   780    /* The thread should have called exit.  */
   781    abort ();
   782  }
   783  ])],
   784  [libgo_cv_lib_setcontext_clobbers_tls=no],
   785  [libgo_cv_lib_setcontext_clobbers_tls=yes],
   786  [case "$target:$ptr_type_size" in
   787    i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64)
   788      libgo_cv_lib_setcontext_clobbers_tls=yes ;;
   789    *)
   790      libgo_cv_lib_setcontext_clobbers_tls=no ;;
   791   esac
   792  ])
   793  CFLAGS="$CFLAGS_hold"
   794  LIBS="$LIBS_hold"
   795  ])
   796  if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
   797    AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
   798  	    [Define if setcontext clobbers TLS variables])
   799  fi
   800  
   801  AC_CACHE_CHECK([whether .eh_frame section should be read-only],
   802  libgo_cv_ro_eh_frame, [
   803  libgo_cv_ro_eh_frame=no
   804  echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
   805  if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
   806    if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
   807      libgo_cv_ro_eh_frame=yes
   808    elif grep '.section.*eh_frame.*#alloc' conftest.c \
   809         | grep -v '#write' > /dev/null; then
   810      libgo_cv_ro_eh_frame=yes
   811    fi
   812  fi
   813  rm -f conftest.*
   814  ])
   815  if test "x$libgo_cv_ro_eh_frame" = xyes; then
   816    AC_DEFINE(EH_FRAME_FLAGS, "a",
   817  	    [Define to the flags needed for the .section .eh_frame directive.])
   818  else
   819    AC_DEFINE(EH_FRAME_FLAGS, "aw",
   820  	    [Define to the flags needed for the .section .eh_frame directive.])
   821  fi
   822  
   823  AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
   824  [libgo_cv_c_unused_arguments],
   825  [CFLAGS_hold=$CFLAGS
   826  CFLAGS="$CFLAGS -Qunused-arguments"
   827  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
   828  [libgo_cv_c_unused_arguments=yes],
   829  [libgo_cv_c_unused_arguments=no])
   830  CFLAGS=$CFLAGS_hold])
   831  
   832  AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
   833  libgo_cv_as_comdat_gnu, [
   834  echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
   835  CFLAGS_hold=$CFLAGS
   836  if test "$libgo_cv_c_unused_arguments" = yes; then
   837    CFLAGS="$CFLAGS -Qunused-arguments"
   838  fi
   839  if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
   840    libgo_cv_as_comdat_gnu=yes
   841  else
   842    libgo_cv_as_comdat_gnu=no
   843  fi
   844  CFLAGS=$CFLAGS_hold
   845  ])
   846  if test "x$libgo_cv_as_comdat_gnu" = xyes; then
   847    AC_DEFINE(HAVE_AS_COMDAT_GAS, 1,
   848  	    [Define if your assembler supports GNU comdat group syntax.])
   849  fi
   850  
   851  AC_CACHE_CHECK([assembler supports pc related relocs],
   852  libgo_cv_as_x86_pcrel, [
   853  libgo_cv_as_x86_pcrel=yes
   854  echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
   855  CFLAGS_hold=$CFLAGS
   856  if test "$libgo_cv_c_unused_arguments" = yes; then
   857    CFLAGS="$CFLAGS -Qunused-arguments"
   858  fi
   859  if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
   860      libgo_cv_as_x86_pcrel=no
   861  fi
   862  CFLAGS=$CFLAGS_hold
   863  ])
   864  if test "x$libgo_cv_as_x86_pcrel" = xyes; then
   865    AC_DEFINE(HAVE_AS_X86_PCREL, 1,
   866  	    [Define if your assembler supports PC relative relocs.])
   867  fi
   868  
   869  AC_CACHE_CHECK([assembler supports unwind section type],
   870  libgo_cv_as_x86_64_unwind_section_type, [
   871  libgo_cv_as_x86_64_unwind_section_type=yes
   872  echo '.section .eh_frame,"a",@unwind' > conftest.s
   873  CFLAGS_hold=$CFLAGS
   874  if test "$libgo_cv_c_unused_arguments" = yes; then
   875    CFLAGS="$CFLAGS -Qunused-arguments"
   876  fi
   877  if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
   878      libgo_cv_as_x86_64_unwind_section_type=no
   879  fi
   880  CFLAGS=$CFLAGS_hold
   881  ])
   882  if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then
   883    AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
   884  	    [Define if your assembler supports unwind section type.])
   885  fi
   886  
   887  AC_CACHE_CHECK([assembler supports AES instructions],
   888  libgo_cv_as_x86_aes, [
   889  libgo_cv_as_x86_aes=yes
   890  echo 'aesenc %xmm0, %xmm1' > conftest.s
   891  CFLAGS_hold=$CFLAGS
   892  if test "$libgo_cv_c_unused_arguments" = yes; then
   893    CFLAGS="$CFLAGS -Qunused-arguments"
   894  fi
   895  if $CC $CFLAGS -c conftest.s 2>&1 | grep -i error > /dev/null; then
   896      libgo_cv_as_x86_aes=no
   897  fi
   898  CFLAGS=$CFLAGS_hold
   899  ])
   900  if test "x$libgo_cv_as_x86_aes" = xyes; then
   901    AC_DEFINE(HAVE_AS_X86_AES, 1,
   902  	    [Define if your assembler supports AES instructions.])
   903  fi
   904  
   905  dnl Test whether the linker supports the -static option.
   906  AC_CACHE_CHECK([whether -static is supported],
   907  [libgo_cv_ld_static],
   908  [LDFLAGS_hold=$LDFLAGS
   909  LDFLAGS="$LDFLAGS -static"
   910  AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
   911  [libgo_cv_ld_static=yes],
   912  [libgo_cv_ld_static=no])
   913  LDFLAGS=$LDFLAGS_hold])
   914  AM_CONDITIONAL(HAVE_STATIC_LINK, test "$libgo_cv_ld_static" = yes)
   915  
   916  AC_CACHE_SAVE
   917  
   918  if test ${multilib} = yes; then
   919    multilib_arg="--enable-multilib"
   920  else
   921    multilib_arg=
   922  fi
   923  
   924  AC_CONFIG_FILES(Makefile testsuite/Makefile testsuite/libgo-test-support.exp)
   925  
   926  AC_CONFIG_COMMANDS([default],
   927  [if test -n "$CONFIG_FILES"; then
   928     # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
   929     # that multilib installs will end up installed in the correct place.
   930     # The testsuite needs it for multilib-aware ABI baseline files.
   931     # To work around this not being passed down from config-ml.in ->
   932     # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
   933     # append it here.  Only modify Makefiles that have just been created.
   934     #
   935     # Also, get rid of this simulated-VPATH thing that automake does.
   936     cat > vpsed << \_EOF
   937  s!`test -f '$<' || echo '$(srcdir)/'`!!
   938  _EOF
   939     for i in $SUBDIRS; do
   940      case $CONFIG_FILES in
   941       *${i}/Makefile*)
   942         #echo "Adding MULTISUBDIR to $i/Makefile"
   943         sed -f vpsed $i/Makefile > tmp
   944         grep '^MULTISUBDIR =' Makefile >> tmp
   945         mv tmp $i/Makefile
   946         ;;
   947      esac
   948     done
   949     rm vpsed
   950   fi
   951  ],
   952  [
   953  # Variables needed in config.status (file generation) which aren't already
   954  # passed by autoconf.
   955  SUBDIRS="$SUBDIRS"
   956  ])
   957  
   958  AC_OUTPUT