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