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