blob: 1c192752ab207b728e2fdbf738fe7a6c89d8aa59 [file] [log] [blame]
Ian Lance Taylor7a938932010-12-03 04:34:57 +00001# 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
9AC_PREREQ(2.64)
10AC_INIT(package-unused, version-unused,, libgo)
11AC_CONFIG_SRCDIR(Makefile.am)
12AC_CONFIG_HEADER(config.h)
13
Ian Lance Taylor1a2f01e2018-01-09 01:23:08 +000014libtool_VERSION=13:0:0
Ian Lance Taylor7a938932010-12-03 04:34:57 +000015AC_SUBST(libtool_VERSION)
16
17AM_ENABLE_MULTILIB(, ..)
18
19AC_CANONICAL_SYSTEM
20target_alias=${target_alias-$host_alias}
21
Ian Lance Tayloree6440f2012-09-20 16:32:27 +000022AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dist -Wall -Wno-portability])
Ian Lance Taylor7a938932010-12-03 04:34:57 +000023AH_TEMPLATE(PACKAGE, [Name of package])
24AH_TEMPLATE(VERSION, [Version number of package])
25
26m4_rename([_AC_ARG_VAR_PRECIOUS],[glibgo_PRECIOUS])
27m4_define([_AC_ARG_VAR_PRECIOUS],[])
28AC_PROG_CC
29AC_PROG_GO
30m4_rename_force([glibgo_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
31
32AC_SUBST(CFLAGS)
33
Ian Lance Taylorf1639072017-05-10 17:26:09 +000034case ${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 ;;
40esac
41
Ian Lance Taylor7a938932010-12-03 04:34:57 +000042AM_MAINTAINER_MODE
43
44AC_PROG_LD
45AC_PROG_RANLIB
46AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy)
47
48AC_LIBTOOL_DLOPEN
49AM_PROG_LIBTOOL
50AC_SUBST(enable_shared)
51AC_SUBST(enable_static)
52
Ian Lance Taylord983a802011-07-11 20:27:50 +000053CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
54AC_SUBST(CC_FOR_BUILD)
55
Ian Lance Taylorde27caa2011-10-23 19:04:37 +000056AC_PROG_AWK
57
Ian Lance Taylor7a938932010-12-03 04:34:57 +000058WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
59AC_SUBST(WARN_FLAGS)
60
Ian Lance Taylor0d4668c2013-01-26 00:13:34 +000061AC_ARG_ENABLE(werror, [AS_HELP_STRING([--enable-werror],
62 [turns on -Werror @<:@default=yes@:>@])])
63if test "x$enable_werror" != "xno"; then
64 WERROR="-Werror"
65fi
Ian Lance Taylor7a938932010-12-03 04:34:57 +000066AC_SUBST(WERROR)
67
68glibgo_toolexecdir=no
69glibgo_toolexeclibdir=no
Ian Lance Taylor7a938932010-12-03 04:34:57 +000070
71AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
72AC_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])
81AC_MSG_RESULT($version_specific_libs)
82
83# Version-specific runtime libs processing.
84if test $version_specific_libs = yes; then
85 glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
86 glibgo_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
87fi
88
89# Calculate glibgo_toolexecdir, glibgo_toolexeclibdir
90# Install a library built with a cross compiler in tooldir, not libdir.
Ian Lance Taylor317ea7c2012-02-14 19:40:09 +000091if test -n "$with_cross_host" &&
92 test x"$with_cross_host" != x"no"; then
93 nover_glibgo_toolexecdir='${exec_prefix}/${host_alias}'
94 nover_glibgo_toolexeclibdir='${toolexecdir}/lib'
95else
96 nover_glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
97 nover_glibgo_toolexeclibdir='${libdir}'
98fi
Ian Lance Taylor6c76a952014-05-01 00:35:58 +000099multi_os_directory=`$GOC -print-multi-os-directory`
Ian Lance Taylor317ea7c2012-02-14 19:40:09 +0000100case $multi_os_directory in
101 .) ;; # Avoid trailing /.
102 *) nover_glibgo_toolexeclibdir=${nover_glibgo_toolexeclibdir}/${multi_os_directory} ;;
103esac
104
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000105if test x"$glibgo_toolexecdir" = x"no"; then
Ian Lance Taylor317ea7c2012-02-14 19:40:09 +0000106 glibgo_toolexecdir="${nover_glibgo_toolexecdir}"
107 glibgo_toolexeclibdir="${nover_glibgo_toolexeclibdir}"
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000108fi
109
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000110AC_SUBST(glibgo_toolexecdir)
111AC_SUBST(glibgo_toolexeclibdir)
Ian Lance Taylor317ea7c2012-02-14 19:40:09 +0000112AC_SUBST(nover_glibgo_toolexeclibdir)
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000113
114# See if the user wants to configure without libffi. Some
115# architectures don't support it. FIXME: We should set a default
116# based on the host.
117AC_ARG_WITH(libffi,
118 AS_HELP_STRING([--without-libffi],
119 [don't use libffi]),
120 [:],
121 [with_libffi=${with_libffi_default-yes}])
122
123LIBFFI=
124LIBFFIINCS=
125if test "$with_libffi" != no; then
126 AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
127 LIBFFI=../libffi/libffi_convenience.la
128 LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
129fi
130AC_SUBST(LIBFFI)
131AC_SUBST(LIBFFIINCS)
Ian Lance Taylor5302cd02016-11-18 00:15:38 +0000132AM_CONDITIONAL(USE_LIBFFI, test "$with_liffi" != "no")
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000133
Ian Lance Taylor9a85ed02014-05-29 20:22:27 +0000134# See if the user wants to configure without libatomic. This is useful if we are
135# on an architecture for which libgo does not need an atomic support library and
136# libatomic does not support our C compiler.
137AC_ARG_WITH(libatomic,
138 AS_HELP_STRING([--without-libatomic],
139 [don't use libatomic]),
140 [:],
141 [with_libatomic=${with_libatomic_default-yes}])
142
143LIBATOMIC=
144if test "$with_libatomic" != no; then
145 LIBATOMIC=../libatomic/libatomic_convenience.la
146fi
147AC_SUBST(LIBATOMIC)
148
Ian Lance Taylor18c70072011-12-03 00:16:12 +0000149# Used to tell GNU make to include a file without telling automake to
150# include it.
151go_include="-include"
152AC_SUBST(go_include)
153
Ian Lance Taylora8464242016-09-11 13:23:27 +0000154# All known GOOS values. This is the union of all operating systems
155# supported by the gofrontend and all operating systems supported by
156# the gc toolchain.
Ian Lance Taylorf1639072017-05-10 17:26:09 +0000157ALLGOOS="aix android darwin dragonfly freebsd irix linux netbsd openbsd plan9 rtems solaris windows"
Ian Lance Taylora8464242016-09-11 13:23:27 +0000158
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000159is_darwin=no
160is_freebsd=no
Ian Lance Taylor654d2ec2011-03-31 23:55:21 +0000161is_irix=no
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000162is_linux=no
Ian Lance Taylor1efa38d2012-01-17 14:18:39 +0000163is_netbsd=no
Ian Lance Taylor4ccad562012-10-23 04:31:11 +0000164is_openbsd=no
Ian Lance Taylorf038dae2013-11-06 19:49:01 +0000165is_dragonfly=no
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000166is_rtems=no
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000167is_solaris=no
Ian Lance Taylorf1639072017-05-10 17:26:09 +0000168is_aix=no
Ian Lance Taylorc3b5b972011-01-12 02:03:46 +0000169GOOS=unknown
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000170case ${host} in
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000171 *-*-darwin*) is_darwin=yes; GOOS=darwin ;;
172 *-*-freebsd*) is_freebsd=yes; GOOS=freebsd ;;
Ian Lance Taylor654d2ec2011-03-31 23:55:21 +0000173 *-*-irix6*) is_irix=yes; GOOS=irix ;;
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000174 *-*-linux*) is_linux=yes; GOOS=linux ;;
Ian Lance Taylordf4aa892012-01-13 05:11:45 +0000175 *-*-netbsd*) is_netbsd=yes; GOOS=netbsd ;;
Ian Lance Taylor4ccad562012-10-23 04:31:11 +0000176 *-*-openbsd*) is_openbsd=yes; GOOS=openbsd ;;
Ian Lance Taylorf038dae2013-11-06 19:49:01 +0000177 *-*-dragonfly*) is_dragonfly=yes; GOOS=dragonfly ;;
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000178 *-*-rtems*) is_rtems=yes; GOOS=rtems ;;
179 *-*-solaris2*) is_solaris=yes; GOOS=solaris ;;
Ian Lance Taylorf1639072017-05-10 17:26:09 +0000180 *-*-aix*) is_aix=yes; GOOS=aix ;;
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000181esac
182AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
183AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
Ian Lance Taylor654d2ec2011-03-31 23:55:21 +0000184AM_CONDITIONAL(LIBGO_IS_IRIX, test $is_irix = yes)
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000185AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes)
Ian Lance Taylordf4aa892012-01-13 05:11:45 +0000186AM_CONDITIONAL(LIBGO_IS_NETBSD, test $is_netbsd = yes)
Ian Lance Taylor4ccad562012-10-23 04:31:11 +0000187AM_CONDITIONAL(LIBGO_IS_OPENBSD, test $is_openbsd = yes)
Ian Lance Taylor824393b2013-11-19 02:11:38 +0000188AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test $is_dragonfly = yes)
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000189AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000190AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
Ian Lance Taylorf1639072017-05-10 17:26:09 +0000191AM_CONDITIONAL(LIBGO_IS_AIX, test $is_aix = yes)
Ian Lance Taylor22b955c2016-07-22 18:15:38 +0000192AM_CONDITIONAL(LIBGO_IS_BSD, test $is_darwin = yes -o $is_dragonfly = yes -o $is_freebsd = yes -o $is_netbsd = yes -o $is_openbsd = yes)
Ian Lance Taylorc3b5b972011-01-12 02:03:46 +0000193AC_SUBST(GOOS)
Ian Lance Taylora8464242016-09-11 13:23:27 +0000194AC_SUBST(ALLGOOS)
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000195
Ian Lance Taylor7134cf22013-02-05 22:22:17 +0000196dnl Test whether we need to use DejaGNU or whether we can use the
197dnl simpler gotest approach. We can only use gotest for a native
198dnl build.
199USE_DEJAGNU=no
200case ${host} in
201 *-*-rtems*) USE_DEJAGNU=yes ;;
Ian Lance Taylor553752e2013-02-07 18:01:54 +0000202 ${build}) ;;
Ian Lance Taylor7134cf22013-02-05 22:22:17 +0000203 *) USE_DEJAGNU=yes ;;
204esac
205AC_SUBST(USE_DEJAGNU)
206
Ian Lance Taylora8464242016-09-11 13:23:27 +0000207# All known GOARCH values. This is the union of all architectures
208# supported by the gofrontend and all architectures supported by the
209# gc toolchain.
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000210# To add a new architecture:
211# - add it to this list
212# - if appropriate, add an entry to ALLGOARCHFAMILY below
213# - add an entry to the case on ${host} below to set GOARCH
214# - update goarchList in libgo/go/go/build/syslist.go
215# - update goarch.sh to report the values for this architecture
216# - update go-set-goarch in gcc/testsuite/go.test/go-test.exp
217# - update ptrSizeMap and intSizeMap in libgo/go/cmd/cgo/main.go
218# - update arch lists in libgo/match.sh
219# - update arch lists in libgo/testsuite/gotest
220# - update +build lines in several places
221# - libgo/go/runtime/lfstack_NNbit.go
222# - libgo/go/runtime/hashNN.go
223# - libgo/go/runtime/unalignedN.go
224# - libgo/go/syscall/endian_XX.go
225# - possibly others
226# - possibly update files in libgo/go/internal/syscall/unix
Ian Lance Taylor87cbbc42018-06-11 19:16:34 +0000227ALLGOARCH="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"
Ian Lance Taylora8464242016-09-11 13:23:27 +0000228
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000229# All known GOARCH family values.
Ian Lance Taylor87cbbc42018-06-11 19:16:34 +0000230ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 NIOS2 PPC PPC64 RISCV RISCV64 S390 S390X SH SPARC SPARC64 WASM"
Ian Lance Taylora8464242016-09-11 13:23:27 +0000231
Ian Lance Taylorc3b5b972011-01-12 02:03:46 +0000232GOARCH=unknown
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000233case ${host} in
Ian Lance Taylore59b9172011-04-01 23:02:16 +0000234 alpha*-*-*)
Ian Lance Taylore59b9172011-04-01 23:02:16 +0000235 GOARCH=alpha
236 ;;
Ian Lance Taylor71d0d502014-01-06 19:24:23 +0000237 aarch64-*-*)
Ian Lance Taylor71d0d502014-01-06 19:24:23 +0000238 GOARCH=arm64
239 ;;
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000240 arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000241 GOARCH=arm
Ian Lance Taylor1a2f01e2018-01-09 01:23:08 +0000242 case ${host} in
243 arm*b*-*-*)
244 GOARCH=armbe
Ian Lance Taylor1a2f01e2018-01-09 01:23:08 +0000245 ;;
246 esac
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000247 ;;
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000248changequote(,)dnl
Ian Lance Taylorc3b5b972011-01-12 02:03:46 +0000249 i[34567]86-*-* | x86_64-*-*)
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000250changequote([,])dnl
Ian Lance Taylor4a299bf2011-02-10 23:43:42 +0000251 AC_COMPILE_IFELSE([
Ian Lance Taylorc3b5b972011-01-12 02:03:46 +0000252#ifdef __x86_64__
253#error 64-bit
254#endif],
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000255[GOARCH=386],
256[GOARCH=amd64])
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000257 ;;
Ian Lance Taylor4f8e6882016-08-07 22:32:46 +0000258 ia64-*-*)
Ian Lance Taylor4f8e6882016-08-07 22:32:46 +0000259 GOARCH=ia64
260 ;;
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000261 m68k*-*-*)
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000262 GOARCH=m68k
263 ;;
264 mips*-*-*)
Ian Lance Taylor4a299bf2011-02-10 23:43:42 +0000265 AC_COMPILE_IFELSE([
Ian Lance Taylor85a09212011-04-01 00:17:10 +0000266#if _MIPS_SIM != _ABIO32
267#error not o32
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000268#endif],
Ian Lance Taylor85a09212011-04-01 00:17:10 +0000269[mips_abi="o32"],
270 [AC_COMPILE_IFELSE([
271#if _MIPS_SIM != _ABIN32
272#error not n32
273#endif],
274[mips_abi="n32"],
275 [AC_COMPILE_IFELSE([
276#if _MIPS_SIM != _ABI64
277#error not n64
278#endif],
279[mips_abi="n64"],
Ian Lance Taylor85a09212011-04-01 00:17:10 +0000280 [AC_MSG_ERROR([unknown MIPS ABI])
Ian Lance Taylorb95cd482017-06-21 22:11:04 +0000281[mips_abi="n32"]])])])
Ian Lance Taylor85a09212011-04-01 00:17:10 +0000282 case "$mips_abi" in
Ian Lance Taylor1701a9d2017-06-21 21:55:34 +0000283 "o32") GOARCH=mips ;;
284 "n32") GOARCH=mips64p32 ;;
285 "n64") GOARCH=mips64 ;;
Ian Lance Taylor85a09212011-04-01 00:17:10 +0000286 esac
Ian Lance Taylora8464242016-09-11 13:23:27 +0000287 case "${host}" in
Ian Lance Taylor1701a9d2017-06-21 21:55:34 +0000288 mips*el-*-*)
289 GOARCH="${GOARCH}le"
Ian Lance Taylora8464242016-09-11 13:23:27 +0000290 ;;
Ian Lance Taylora8464242016-09-11 13:23:27 +0000291 esac
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000292 ;;
Ian Lance Taylor746d6ed2018-05-02 22:28:46 +0000293 nios2-*-*)
294 GOARCH=nios2
295 ;;
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000296 rs6000*-*-* | powerpc*-*-*)
Ian Lance Taylor4a299bf2011-02-10 23:43:42 +0000297 AC_COMPILE_IFELSE([
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000298#ifdef _ARCH_PPC64
299#error 64-bit
300#endif],
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000301[GOARCH=ppc],
Ian Lance Taylora8464242016-09-11 13:23:27 +0000302 [
Ian Lance Taylora8464242016-09-11 13:23:27 +0000303AC_COMPILE_IFELSE([
Ian Lance Taylor6f7ccaf2014-11-21 18:22:05 +0000304#if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
305#error 64be
306#endif],
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000307[GOARCH=ppc64le],
308[GOARCH=ppc64])])
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000309 ;;
Andreas Schwabb613cc22018-02-22 19:49:04 +0000310 riscv64-*-*)
311 GOARCH=riscv64
312 ;;
Ian Lance Taylor1fec5f52014-11-04 22:39:30 +0000313 s390*-*-*)
314 AC_COMPILE_IFELSE([
315#if defined(__s390x__)
316#error 64-bit
317#endif],
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000318[GOARCH=s390],
319[GOARCH=s390x])
Ian Lance Taylor1fec5f52014-11-04 22:39:30 +0000320 ;;
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000321 sh3eb*-*-* | sh4eb*-*-*)
Ian Lance Taylorfd0c1dd2018-01-10 19:19:02 +0000322 GOARCH=shbe
Ian Lance Taylorfd0c1dd2018-01-10 19:19:02 +0000323 ;;
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000324 sh3*-*-* | sh4*-*-*)
Ian Lance Taylorfd0c1dd2018-01-10 19:19:02 +0000325 GOARCH=sh
Ian Lance Taylorfd0c1dd2018-01-10 19:19:02 +0000326 ;;
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000327 sparc*-*-*)
Ian Lance Taylor4a299bf2011-02-10 23:43:42 +0000328 AC_COMPILE_IFELSE([
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000329#if defined(__sparcv9) || defined(__arch64__)
330#error 64-bit
331#endif],
Ian Lance Taylorffad1c52018-01-14 04:59:01 +0000332[GOARCH=sparc],
333[GOARCH=sparc64])
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000334 ;;
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000335esac
Ian Lance Taylorc3b5b972011-01-12 02:03:46 +0000336AC_SUBST(GOARCH)
Ian Lance Taylora8464242016-09-11 13:23:27 +0000337AC_SUBST(ALLGOARCH)
338AC_SUBST(ALLGOARCHFAMILY)
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000339
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000340dnl Some files are only present when needed for specific architectures.
Ian Lance Taylorde27caa2011-10-23 19:04:37 +0000341GO_LIBCALL_OS_FILE=
342GO_LIBCALL_OS_ARCH_FILE=
343GO_SYSCALL_OS_FILE=
344GO_SYSCALL_OS_ARCH_FILE=
Ian Lance Taylor204b9fc2014-10-17 00:03:20 +0000345if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then
346 GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go"
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000347fi
Ian Lance Taylor204b9fc2014-10-17 00:03:20 +0000348if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then
349 GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go"
Ian Lance Taylorde27caa2011-10-23 19:04:37 +0000350fi
Ian Lance Taylor204b9fc2014-10-17 00:03:20 +0000351if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then
352 GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go"
Ian Lance Taylorde27caa2011-10-23 19:04:37 +0000353fi
Ian Lance Taylor204b9fc2014-10-17 00:03:20 +0000354if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then
355 GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go"
Ian Lance Taylorde27caa2011-10-23 19:04:37 +0000356fi
357AC_SUBST(GO_LIBCALL_OS_FILE)
358AC_SUBST(GO_LIBCALL_OS_ARCH_FILE)
359AC_SUBST(GO_SYSCALL_OS_FILE)
360AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
Ian Lance Taylorca11cc92011-01-24 23:42:22 +0000361
Ian Lance Taylord48be5d2011-12-20 18:14:30 +0000362dnl Special flags used to generate sysinfo.go.
363OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
Ian Lance Taylor90630d12011-04-01 05:11:23 +0000364case "$target" in
Ian Lance Taylor9f3b1e62011-04-25 19:36:12 +0000365 mips-sgi-irix6.5*)
366 # IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct
367 # msghdr in <sys/socket.h>.
Ian Lance Taylord48be5d2011-12-20 18:14:30 +0000368 OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500"
Ian Lance Taylor9f3b1e62011-04-25 19:36:12 +0000369 ;;
Ian Lance Taylor90630d12011-04-01 05:11:23 +0000370 *-*-solaris2.1[[01]])
371 # Solaris 10+ needs this so struct msghdr gets the msg_control
Ian Lance Taylorbbe847a2011-12-22 20:39:29 +0000372 # etc. fields in <sys/socket.h> (_XPG4_2). _XOPEN_SOURCE=600 as
Ian Lance Taylor90630d12011-04-01 05:11:23 +0000373 # above doesn't work with C99.
Ian Lance Taylorbbe847a2011-12-22 20:39:29 +0000374 OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__"
Ian Lance Taylor90630d12011-04-01 05:11:23 +0000375 ;;
376esac
377AC_SUBST(OSCFLAGS)
378
Ian Lance Taylor08934ae2017-01-06 16:04:01 +0000379dnl Check if assembler supports disabling hardware capability support.
380GCC_CHECK_ASSEMBLER_HWCAP
Ian Lance Taylorc3c54e02016-12-13 18:03:45 +0000381
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000382dnl Use -fsplit-stack when compiling C code if available.
383AC_CACHE_CHECK([whether -fsplit-stack is supported],
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000384[libgo_cv_c_split_stack_supported],
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000385[CFLAGS_hold=$CFLAGS
386CFLAGS="$CFLAGS -fsplit-stack"
387AC_COMPILE_IFELSE([[int i;]],
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000388[libgo_cv_c_split_stack_supported=yes],
389[libgo_cv_c_split_stack_supported=no])
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000390CFLAGS=$CFLAGS_hold])
Ian Lance Taylorc33c18c2015-09-15 17:05:14 +0000391
392dnl Make sure the linker permits -fsplit-stack. Old versions of gold will
393dnl reject split-stack code calling non-split-stack code on targets
394dnl they don't support.
395AC_CACHE_CHECK([whether linker supports split/non-split linked together],
396[libgo_cv_c_linker_split_non_split],
397[cat > conftest1.c << EOF
398extern void f();
399int main() { f(); return 0; }
400EOF
401cat > conftest2.c << EOF
402void f() {}
403EOF
Ian Lance Taylor207f8442016-10-11 13:13:17 +0000404$CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c >/dev/null 2>&1
405$CC -c $CFLAGS $CPPFLAGS conftest2.c > /dev/null 2>&1
406if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext > /dev/null 2>&1; then
Ian Lance Taylorc33c18c2015-09-15 17:05:14 +0000407 libgo_cv_c_linker_split_non_split=yes
408else
409 libgo_cv_c_linker_split_non_split=no
410fi
411rm -f conftest1.* conftest2.* conftest])
412
413if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000414 SPLIT_STACK=-fsplit-stack
415 AC_DEFINE(USING_SPLIT_STACK, 1,
416 [Define if the compiler supports -fsplit-stack])
417else
418 SPLIT_STACK=
419fi
420AC_SUBST(SPLIT_STACK)
421AM_CONDITIONAL(USING_SPLIT_STACK,
Ian Lance Taylorc33c18c2015-09-15 17:05:14 +0000422 test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000423
Ian Lance Taylora2bf11d2015-09-15 21:15:37 +0000424dnl If the compiler supports split-stack but the linker does not, then
425dnl we need to explicitly disable split-stack for Go.
426if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
427 GO_SPLIT_STACK=-fno-split-stack
428else
429 GO_SPLIT_STACK=
430fi
431AC_SUBST(GO_SPLIT_STACK)
432
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000433dnl Check whether the linker does stack munging when calling from
434dnl split-stack into non-split-stack code. We check this by looking
435dnl at the --help output. FIXME: This is only half right: it's
436dnl possible for the linker to support this for some targets but not
437dnl others.
Ian Lance Taylorc33c18c2015-09-15 17:05:14 +0000438dnl This is slightly different from the above check, which is whether
439dnl the linker permits the call at all.
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000440AC_CACHE_CHECK([whether linker supports split stack],
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000441[libgo_cv_c_linker_supports_split_stack],
Ian Lance Taylorf56c5dd2014-01-22 19:10:47 +0000442[libgo_cv_c_linker_supports_split_stack=no
443if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000444 libgo_cv_c_linker_supports_split_stack=yes
Ian Lance Taylorf56c5dd2014-01-22 19:10:47 +0000445fi])
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000446if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000447 AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
448 [Define if the linker support split stack adjustments])
449fi
450
Ian Lance Taylor4c46b5f2014-11-14 18:02:50 +0000451AC_CACHE_CHECK([whether compiler is llgo],
452[libgo_cv_c_goc_is_llgo],
453[libgo_cv_c_goc_is_llgo=no
454if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then
455 libgo_cv_c_goc_is_llgo=yes
456fi])
457AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes)
458
Ian Lance Taylor505b4392010-12-08 02:08:59 +0000459dnl Test for the -lm library.
460MATH_LIBS=
461AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
462AC_SUBST(MATH_LIBS)
463
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000464dnl Test for -lsocket and -lnsl. Copied from libjava/configure.ac.
465AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
466 [libgo_cv_lib_sockets=
467 libgo_check_both=no
468 AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
469 if test "$libgo_check_socket" = "yes"; then
470 unset ac_cv_func_connect
471 AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
472 libgo_check_both=yes)
473 fi
474 if test "$libgo_check_both" = "yes"; then
475 libgo_old_libs=$LIBS
476 LIBS="$LIBS -lsocket -lnsl"
477 unset ac_cv_func_accept
478 AC_CHECK_FUNC(accept,
479 [libgo_check_nsl=no
480 libgo_cv_lib_sockets="-lsocket -lnsl"])
481 unset ac_cv_func_accept
482 LIBS=$libgo_old_libs
483 fi
484 unset ac_cv_func_gethostbyname
485 libgo_old_libs="$LIBS"
486 AC_CHECK_FUNC(gethostbyname, ,
487 [AC_CHECK_LIB(nsl, main,
488 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
489 unset ac_cv_func_gethostbyname
Ian Lance Taylor88cf4de2015-11-10 21:38:30 +0000490 AC_CHECK_FUNC(sendfile, ,
491 [AC_CHECK_LIB(sendfile, main,
492 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])])
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000493 LIBS=$libgo_old_libs
494])
495NET_LIBS="$libgo_cv_lib_sockets"
496AC_SUBST(NET_LIBS)
497
Ian Lance Taylor6c94a9f2010-12-03 21:27:06 +0000498dnl Test whether the compiler supports the -pthread option.
499AC_CACHE_CHECK([whether -pthread is supported],
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000500[libgo_cv_lib_pthread],
Ian Lance Taylor6c94a9f2010-12-03 21:27:06 +0000501[CFLAGS_hold=$CFLAGS
Ian Lance Taylor35e7db42018-02-22 18:49:33 +0000502CFLAGS="$CFLAGS -pthread -L../libatomic/.libs"
Ian Lance Taylor6c94a9f2010-12-03 21:27:06 +0000503AC_COMPILE_IFELSE([[int i;]],
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000504[libgo_cv_lib_pthread=yes],
505[libgo_cv_lib_pthread=no])
Ian Lance Taylor6c94a9f2010-12-03 21:27:06 +0000506CFLAGS=$CFLAGS_hold])
507PTHREAD_CFLAGS=
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000508if test "$libgo_cv_lib_pthread" = yes; then
Ian Lance Taylor35e7db42018-02-22 18:49:33 +0000509 # RISC-V apparently adds -latomic when using -pthread.
510 PTHREAD_CFLAGS="-pthread -L../libatomic/.libs"
Ian Lance Taylor6c94a9f2010-12-03 21:27:06 +0000511fi
512AC_SUBST(PTHREAD_CFLAGS)
513
514dnl Test for the -lpthread library.
515PTHREAD_LIBS=
516AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
517AC_SUBST(PTHREAD_LIBS)
518
Ian Lance Taylorbbbe8b32015-11-21 01:27:44 +0000519dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
Ian Lance Taylored4ebab2011-01-14 19:18:38 +0000520AC_SEARCH_LIBS([sched_yield], [rt])
Ian Lance Taylorae135902013-02-11 19:03:04 +0000521AC_SEARCH_LIBS([nanosleep], [rt])
Ian Lance Taylorbbbe8b32015-11-21 01:27:44 +0000522AC_SEARCH_LIBS([clock_gettime], [rt])
Ian Lance Taylored4ebab2011-01-14 19:18:38 +0000523
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000524AC_C_BIGENDIAN
525
526GCC_CHECK_UNWIND_GETIPINFO
527
Ian Lance Taylor6222bdd2017-08-29 21:51:49 +0000528AC_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)
529
530AC_CHECK_HEADERS([netinet/icmp6.h], [], [],
531[#include <netinet/in.h>
532])
Ian Lance Tayloradb04012011-09-16 15:47:21 +0000533
Ian Lance Taylor1410c222012-04-21 18:49:58 +0000534AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
Ian Lance Tayloradb04012011-09-16 15:47:21 +0000535[#ifdef HAVE_SYS_SOCKET_H
536#include <sys/socket.h>
537#endif
538])
539
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000540AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
Ian Lance Taylor8955c802011-03-30 22:34:55 +0000541
Ian Lance Taylorf8d9fa92015-01-15 00:27:56 +0000542AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr)
Ian Lance Taylor8955c802011-03-30 22:34:55 +0000543AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
Ian Lance Taylor0b3189e2011-03-30 23:05:04 +0000544AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000545
Ian Lance Taylorf1639072017-05-10 17:26:09 +0000546AC_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)
Ian Lance Taylor5d46bf02012-02-18 01:22:02 +0000547AC_TYPE_OFF_T
Ian Lance Taylore02ed812012-01-26 20:24:01 +0000548AC_CHECK_TYPES([loff_t])
549
Ian Lance Taylor324612b2012-04-27 16:38:11 +0000550LIBS_hold="$LIBS"
551LIBS="$LIBS -lm"
552AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
553LIBS="$LIBS_hold"
554
Ian Lance Taylor08ee9452011-11-29 21:58:48 +0000555CFLAGS_hold="$CFLAGS"
556CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
557LIBS_hold="$LIBS"
558LIBS="$LIBS $PTHREAD_LIBS"
559AC_CHECK_FUNCS(sem_timedwait)
560CFLAGS="$CFLAGS_hold"
561LIBS="$LIBS_hold"
562
Ian Lance Taylord2b480b2012-02-08 22:35:30 +0000563LIBS_hold="$LIBS"
564LIBS="$LIBS $MATH_LIBS"
565AC_CHECK_FUNCS(matherr)
566LIBS="$LIBS_hold"
567
Ian Lance Taylora7c48c82011-02-01 21:23:07 +0000568AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4],
569[libgo_cv_func___sync_bool_compare_and_swap_4],
570[AC_LINK_IFELSE([
571typedef unsigned int uint32 __attribute__ ((mode (SI)));
572uint32 i;
573int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
574],
575[libgo_cv_func___sync_bool_compare_and_swap_4=yes],
576[libgo_cv_func___sync_bool_compare_and_swap_4=no])])
577if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then
578 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1,
579 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32])
580fi
581
Ian Lance Taylor12e3c392012-02-12 06:23:08 +0000582AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8],
583[libgo_cv_func___sync_bool_compare_and_swap_8],
584[AC_LINK_IFELSE([
585typedef unsigned int uint64 __attribute__ ((mode (DI)));
586uint64 i;
587int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
588],
589[libgo_cv_func___sync_bool_compare_and_swap_8=yes],
590[libgo_cv_func___sync_bool_compare_and_swap_8=no])])
591if test "$libgo_cv_func___sync_bool_compare_and_swap_8" = "yes"; then
592 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8, 1,
593 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint64])
594fi
595
Ian Lance Taylor084996f2011-02-04 00:49:47 +0000596AC_CACHE_CHECK([for __sync_fetch_and_add_4],
597[libgo_cv_func___sync_fetch_and_add_4],
598[AC_LINK_IFELSE([
599typedef unsigned int uint32 __attribute__ ((mode (SI)));
600uint32 i;
601int main() { return __sync_fetch_and_add (&i, 1); }
602],
603[libgo_cv_func___sync_fetch_and_add_4=yes],
604[libgo_cv_func___sync_fetch_and_add_4=no])])
605if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then
606 AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1,
607 [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32])
608fi
609
Ian Lance Taylor12e3c392012-02-12 06:23:08 +0000610AC_CACHE_CHECK([for __sync_add_and_fetch_8],
611[libgo_cv_func___sync_add_and_fetch_8],
612[AC_LINK_IFELSE([
613typedef unsigned int uint64 __attribute__ ((mode (DI)));
614uint64 i;
615int main() { return __sync_add_and_fetch (&i, 1); }
616],
617[libgo_cv_func___sync_add_and_fetch_8=yes],
618[libgo_cv_func___sync_add_and_fetch_8=no])])
619if test "$libgo_cv_func___sync_add_and_fetch_8" = "yes"; then
620 AC_DEFINE(HAVE_SYNC_ADD_AND_FETCH_8, 1,
621 [Define to 1 if the compiler provides the __sync_add_and_fetch function for uint64])
622fi
623
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000624dnl For x86 we want to use the -minline-all-stringops option to avoid
625dnl forcing a stack split when calling memcpy and friends.
626AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000627[libgo_cv_c_stringops],
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000628[CFLAGS_hold=$CFLAGS
629CFLAGS="$CFLAGS -minline-all-stringops"
630AC_COMPILE_IFELSE([int i;],
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000631[libgo_cv_c_stringops=yes],
632[libgo_cv_c_stringops=no])
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000633CFLAGS=$CFLAGS_hold])
634STRINGOPS_FLAG=
Ian Lance Taylorf2ee78b2011-01-12 06:34:08 +0000635if test "$libgo_cv_c_stringops" = yes; then
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000636 STRINGOPS_FLAG=-minline-all-stringops
637fi
638AC_SUBST(STRINGOPS_FLAG)
639
Ian Lance Taylor9d465fa2012-02-08 19:38:17 +0000640dnl For x86 we want to compile the math library with -mfancy-math-387
Ian Lance Taylor28f3c812018-02-01 21:05:20 +0000641dnl so that we can use the builtin instructions directly.
Ian Lance Taylor9d465fa2012-02-08 19:38:17 +0000642AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
643[libgo_cv_c_fancymath],
644[CFLAGS_hold=$CFLAGS
645CFLAGS="$CFLAGS -mfancy-math-387"
646AC_COMPILE_IFELSE([int i;],
647[libgo_cv_c_fancymath=yes],
648[libgo_cv_c_fancymath=no])
649CFLAGS=$CFLAGS_hold])
650MATH_FLAG=
651if test "$libgo_cv_c_fancymath" = yes; then
Ian Lance Taylor28f3c812018-02-01 21:05:20 +0000652 MATH_FLAG="-mfancy-math-387"
Ian Lance Taylor9d465fa2012-02-08 19:38:17 +0000653fi
Ian Lance Taylor28f3c812018-02-01 21:05:20 +0000654MATH_FLAG="${MATH_FLAG} -ffp-contract=off -fno-math-errno -fno-trapping-math"
Ian Lance Taylor9d465fa2012-02-08 19:38:17 +0000655AC_SUBST(MATH_FLAG)
656
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000657CFLAGS_hold=$CFLAGS
658CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
Ian Lance Taylore02ed812012-01-26 20:24:01 +0000659AC_CHECK_TYPES([off64_t])
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000660CFLAGS=$CFLAGS_hold
661
Ian Lance Taylor207c35f2011-11-01 04:12:01 +0000662dnl Work out the size of the epoll_events struct on GNU/Linux.
663AC_CACHE_CHECK([epoll_event size],
664[libgo_cv_c_epoll_event_size],
665[AC_COMPUTE_INT(libgo_cv_c_epoll_event_size,
666[sizeof (struct epoll_event)],
667[#include <sys/epoll.h>],
668[libgo_cv_c_epoll_event_size=0])])
669SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
670AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
671
672dnl Work out the offset of the fd field in the epoll_events struct on
673dnl GNU/Linux.
674AC_CACHE_CHECK([epoll_event data.fd offset],
675[libgo_cv_c_epoll_event_fd_offset],
676[AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset,
677[offsetof (struct epoll_event, data.fd)],
678[#include <stddef.h>
679#include <sys/epoll.h>],
680[libgo_cv_c_epoll_event_fd_offset=0])])
681STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
682AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
683
Ian Lance Taylor476013d2015-09-10 21:17:00 +0000684dnl Check if <sys/stat.h> uses timespec_t for st_?tim members. Introduced
Ian Lance Taylor082fc7e2017-11-14 14:26:04 +0000685dnl in Solaris 11.4 for XPG7 compatibility.
Ian Lance Taylor476013d2015-09-10 21:17:00 +0000686AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
687 [have_stat_timespec=yes], [have_stat_timespec=no])
688AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
689
Ian Lance Taylord2b480b2012-02-08 22:35:30 +0000690dnl See if struct exception is defined in <math.h>.
691AC_CHECK_TYPE([struct exception],
692[libgo_has_struct_exception=yes],
693[libgo_has_struct_exception=no],
694[#include <math.h>])
695if test "$libgo_has_struct_exception" = "yes"; then
696 AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
697 [Define to 1 if <math.h> defines struct exception])
698fi
699
Ian Lance Taylor7f578432012-02-08 05:30:12 +0000700dnl See whether setcontext changes the value of TLS variables.
701AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
702[libgo_cv_lib_setcontext_clobbers_tls],
Ian Lance Taylore6c58172012-02-10 14:07:44 +0000703[CFLAGS_hold="$CFLAGS"
704CFLAGS="$PTHREAD_CFLAGS"
705LIBS_hold="$LIBS"
Ian Lance Taylor7f578432012-02-08 05:30:12 +0000706LIBS="$LIBS $PTHREAD_LIBS"
Ian Lance Taylore6c58172012-02-10 14:07:44 +0000707AC_CHECK_SIZEOF([void *])
708AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
Ian Lance Taylor7f578432012-02-08 05:30:12 +0000709AC_RUN_IFELSE(
710 [AC_LANG_SOURCE([
711#include <pthread.h>
712#include <stdlib.h>
713#include <ucontext.h>
714#include <unistd.h>
715
716__thread int tls;
717
718static char stack[[10 * 1024 * 1024]];
719static ucontext_t c;
720
721/* Called via makecontext/setcontext. */
722
723static void
724cfn (void)
725{
726 exit (tls);
727}
728
729/* Called via pthread_create. */
730
731static void *
732tfn (void *dummy)
733{
734 /* The thread should still see this value after calling
735 setcontext. */
736 tls = 0;
737
738 setcontext (&c);
739
740 /* The call to setcontext should not return. */
741 abort ();
742}
743
744int
745main ()
746{
747 pthread_t tid;
748
749 /* The thread should not see this value. */
750 tls = 1;
751
752 if (getcontext (&c) < 0)
753 abort ();
754
755 c.uc_stack.ss_sp = stack;
Ian Lance Taylorca59d212012-02-15 22:29:35 +0000756#ifdef MAKECONTEXT_STACK_TOP
757 c.uc_stack.ss_sp += sizeof stack;
758#endif
Ian Lance Taylor7f578432012-02-08 05:30:12 +0000759 c.uc_stack.ss_flags = 0;
760 c.uc_stack.ss_size = sizeof stack;
761 c.uc_link = NULL;
762 makecontext (&c, cfn, 0);
763
764 if (pthread_create (&tid, NULL, tfn, NULL) != 0)
765 abort ();
766
767 if (pthread_join (tid, NULL) != 0)
768 abort ();
769
770 /* The thread should have called exit. */
771 abort ();
772}
773])],
774[libgo_cv_lib_setcontext_clobbers_tls=no],
775[libgo_cv_lib_setcontext_clobbers_tls=yes],
Ian Lance Taylore6c58172012-02-10 14:07:44 +0000776[case "$target:$ptr_type_size" in
777 i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64)
778 libgo_cv_lib_setcontext_clobbers_tls=yes ;;
779 *)
780 libgo_cv_lib_setcontext_clobbers_tls=no ;;
Ian Lance Taylor7f578432012-02-08 05:30:12 +0000781 esac
782])
Ian Lance Taylore6c58172012-02-10 14:07:44 +0000783CFLAGS="$CFLAGS_hold"
Ian Lance Taylor7f578432012-02-08 05:30:12 +0000784LIBS="$LIBS_hold"
785])
786if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
787 AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
788 [Define if setcontext clobbers TLS variables])
789fi
790
Ian Lance Taylorcc1a9ac2013-10-02 17:30:07 +0000791AC_CACHE_CHECK([whether .eh_frame section should be read-only],
792libgo_cv_ro_eh_frame, [
793libgo_cv_ro_eh_frame=no
794echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
795if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
796 if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
797 libgo_cv_ro_eh_frame=yes
798 elif grep '.section.*eh_frame.*#alloc' conftest.c \
799 | grep -v '#write' > /dev/null; then
800 libgo_cv_ro_eh_frame=yes
801 fi
802fi
803rm -f conftest.*
804])
805if test "x$libgo_cv_ro_eh_frame" = xyes; then
806 AC_DEFINE(EH_FRAME_FLAGS, "a",
807 [Define to the flags needed for the .section .eh_frame directive.])
808else
809 AC_DEFINE(EH_FRAME_FLAGS, "aw",
810 [Define to the flags needed for the .section .eh_frame directive.])
811fi
812
Ian Lance Taylora8192312014-09-29 23:37:27 +0000813AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
814[libgo_cv_c_unused_arguments],
815[CFLAGS_hold=$CFLAGS
816CFLAGS="$CFLAGS -Qunused-arguments"
817AC_COMPILE_IFELSE([[int i;]],
818[libgo_cv_c_unused_arguments=yes],
819[libgo_cv_c_unused_arguments=no])
820CFLAGS=$CFLAGS_hold])
821
Ian Lance Taylorcc1a9ac2013-10-02 17:30:07 +0000822AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
823libgo_cv_as_comdat_gnu, [
824echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
Ian Lance Taylora8192312014-09-29 23:37:27 +0000825CFLAGS_hold=$CFLAGS
826if test "$libgo_cv_c_unused_arguments" = yes; then
827 CFLAGS="$CFLAGS -Qunused-arguments"
828fi
Ian Lance Taylorcc1a9ac2013-10-02 17:30:07 +0000829if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
830 libgo_cv_as_comdat_gnu=yes
831else
832 libgo_cv_as_comdat_gnu=no
833fi
Ian Lance Taylora8192312014-09-29 23:37:27 +0000834CFLAGS=$CFLAGS_hold
Ian Lance Taylorcc1a9ac2013-10-02 17:30:07 +0000835])
836if test "x$libgo_cv_as_comdat_gnu" = xyes; then
837 AC_DEFINE(HAVE_AS_COMDAT_GAS, 1,
838 [Define if your assembler supports GNU comdat group syntax.])
839fi
840
841AC_CACHE_CHECK([assembler supports pc related relocs],
842libgo_cv_as_x86_pcrel, [
843libgo_cv_as_x86_pcrel=yes
844echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
Ian Lance Taylora8192312014-09-29 23:37:27 +0000845CFLAGS_hold=$CFLAGS
846if test "$libgo_cv_c_unused_arguments" = yes; then
847 CFLAGS="$CFLAGS -Qunused-arguments"
848fi
Ian Lance Taylorcc1a9ac2013-10-02 17:30:07 +0000849if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
850 libgo_cv_as_x86_pcrel=no
851fi
Ian Lance Taylora8192312014-09-29 23:37:27 +0000852CFLAGS=$CFLAGS_hold
Ian Lance Taylorcc1a9ac2013-10-02 17:30:07 +0000853])
854if test "x$libgo_cv_as_x86_pcrel" = xyes; then
855 AC_DEFINE(HAVE_AS_X86_PCREL, 1,
856 [Define if your assembler supports PC relative relocs.])
857fi
858
859AC_CACHE_CHECK([assembler supports unwind section type],
860libgo_cv_as_x86_64_unwind_section_type, [
861libgo_cv_as_x86_64_unwind_section_type=yes
862echo '.section .eh_frame,"a",@unwind' > conftest.s
Ian Lance Taylora8192312014-09-29 23:37:27 +0000863CFLAGS_hold=$CFLAGS
864if test "$libgo_cv_c_unused_arguments" = yes; then
865 CFLAGS="$CFLAGS -Qunused-arguments"
866fi
Ian Lance Taylorcc1a9ac2013-10-02 17:30:07 +0000867if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
868 libgo_cv_as_x86_64_unwind_section_type=no
869fi
Ian Lance Taylora8192312014-09-29 23:37:27 +0000870CFLAGS=$CFLAGS_hold
Ian Lance Taylorcc1a9ac2013-10-02 17:30:07 +0000871])
872if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then
873 AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
874 [Define if your assembler supports unwind section type.])
875fi
876
Ian Lance Taylorb379f8d2017-01-03 20:41:54 +0000877AC_CACHE_CHECK([assembler supports AES instructions],
878libgo_cv_as_x86_aes, [
879libgo_cv_as_x86_aes=yes
880echo 'aesenc %xmm0, %xmm1' > conftest.s
881CFLAGS_hold=$CFLAGS
882if test "$libgo_cv_c_unused_arguments" = yes; then
883 CFLAGS="$CFLAGS -Qunused-arguments"
884fi
885if $CC $CFLAGS -c conftest.s 2>&1 | grep -i error > /dev/null; then
886 libgo_cv_as_x86_aes=no
887fi
888CFLAGS=$CFLAGS_hold
889])
890if test "x$libgo_cv_as_x86_aes" = xyes; then
891 AC_DEFINE(HAVE_AS_X86_AES, 1,
892 [Define if your assembler supports AES instructions.])
893fi
894
Ian Lance Taylor7a938932010-12-03 04:34:57 +0000895AC_CACHE_SAVE
896
897if test ${multilib} = yes; then
898 multilib_arg="--enable-multilib"
899else
900 multilib_arg=
901fi
902
903AC_CONFIG_FILES(Makefile testsuite/Makefile)
904
905AC_CONFIG_COMMANDS([default],
906[if test -n "$CONFIG_FILES"; then
907 # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
908 # that multilib installs will end up installed in the correct place.
909 # The testsuite needs it for multilib-aware ABI baseline files.
910 # To work around this not being passed down from config-ml.in ->
911 # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
912 # append it here. Only modify Makefiles that have just been created.
913 #
914 # Also, get rid of this simulated-VPATH thing that automake does.
915 cat > vpsed << \_EOF
916s!`test -f '$<' || echo '$(srcdir)/'`!!
917_EOF
918 for i in $SUBDIRS; do
919 case $CONFIG_FILES in
920 *${i}/Makefile*)
921 #echo "Adding MULTISUBDIR to $i/Makefile"
922 sed -f vpsed $i/Makefile > tmp
923 grep '^MULTISUBDIR =' Makefile >> tmp
924 mv tmp $i/Makefile
925 ;;
926 esac
927 done
928 rm vpsed
929 fi
930],
931[
932# Variables needed in config.status (file generation) which aren't already
933# passed by autoconf.
934SUBDIRS="$SUBDIRS"
935])
936
937AC_OUTPUT