1 # configure.ac -- Go library configure script.
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.
7 # Process this file with autoreconf to produce configure.
10 AC_INIT(package-unused, version-unused,, libgo)
11 AC_CONFIG_SRCDIR(Makefile.am)
12 AC_CONFIG_HEADER(config.h)
14 libtool_VERSION=10:0:0
15 AC_SUBST(libtool_VERSION)
17 AM_ENABLE_MULTILIB(, ..)
20 target_alias=${target_alias-$host_alias}
22 AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dist -Wall -Wno-portability])
23 AH_TEMPLATE(PACKAGE, [Name of package])
24 AH_TEMPLATE(VERSION, [Version number of package])
26 m4_rename([_AC_ARG_VAR_PRECIOUS],[glibgo_PRECIOUS])
27 m4_define([_AC_ARG_VAR_PRECIOUS],[])
30 m4_rename_force([glibgo_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
38 AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy)
42 AC_SUBST(enable_shared)
43 AC_SUBST(enable_static)
45 CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
46 AC_SUBST(CC_FOR_BUILD)
50 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
53 AC_ARG_ENABLE(werror, [AS_HELP_STRING([--enable-werror],
54 [turns on -Werror @<:@default=yes@:>@])])
55 if test "x$enable_werror" != "xno"; then
61 glibgo_toolexeclibdir=no
63 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
64 AC_ARG_ENABLE([version-specific-runtime-libs],
65 AC_HELP_STRING([--enable-version-specific-runtime-libs],
66 [Specify that runtime libraries should be installed in a compiler-specific directory]),
68 yes) version_specific_libs=yes ;;
69 no) version_specific_libs=no ;;
70 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
72 [version_specific_libs=no])
73 AC_MSG_RESULT($version_specific_libs)
75 # Version-specific runtime libs processing.
76 if test $version_specific_libs = yes; then
77 glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
78 glibgo_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
81 # Calculate glibgo_toolexecdir, glibgo_toolexeclibdir
82 # Install a library built with a cross compiler in tooldir, not libdir.
83 if test -n "$with_cross_host" &&
84 test x"$with_cross_host" != x"no"; then
85 nover_glibgo_toolexecdir='${exec_prefix}/${host_alias}'
86 nover_glibgo_toolexeclibdir='${toolexecdir}/lib'
88 nover_glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
89 nover_glibgo_toolexeclibdir='${libdir}'
91 multi_os_directory=`$GOC -print-multi-os-directory`
92 case $multi_os_directory in
93 .) ;; # Avoid trailing /.
94 *) nover_glibgo_toolexeclibdir=${nover_glibgo_toolexeclibdir}/${multi_os_directory} ;;
97 if test x"$glibgo_toolexecdir" = x"no"; then
98 glibgo_toolexecdir="${nover_glibgo_toolexecdir}"
99 glibgo_toolexeclibdir="${nover_glibgo_toolexeclibdir}"
102 AC_SUBST(glibgo_toolexecdir)
103 AC_SUBST(glibgo_toolexeclibdir)
104 AC_SUBST(nover_glibgo_toolexeclibdir)
106 # See if the user wants to configure without libffi. Some
107 # architectures don't support it. FIXME: We should set a default
110 AS_HELP_STRING([--without-libffi],
113 [with_libffi=${with_libffi_default-yes}])
117 if test "$with_libffi" != no; then
118 AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
119 LIBFFI=../libffi/libffi_convenience.la
120 LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
125 # See if the user wants to configure without libatomic. This is useful if we are
126 # on an architecture for which libgo does not need an atomic support library and
127 # libatomic does not support our C compiler.
128 AC_ARG_WITH(libatomic,
129 AS_HELP_STRING([--without-libatomic],
130 [don't use libatomic]),
132 [with_libatomic=${with_libatomic_default-yes}])
135 if test "$with_libatomic" != no; then
136 LIBATOMIC=../libatomic/libatomic_convenience.la
140 # Used to tell GNU make to include a file without telling automake to
142 go_include="-include"
156 *-*-darwin*) is_darwin=yes; GOOS=darwin ;;
157 *-*-freebsd*) is_freebsd=yes; GOOS=freebsd ;;
158 *-*-irix6*) is_irix=yes; GOOS=irix ;;
159 *-*-linux*) is_linux=yes; GOOS=linux ;;
160 *-*-netbsd*) is_netbsd=yes; GOOS=netbsd ;;
161 *-*-openbsd*) is_openbsd=yes; GOOS=openbsd ;;
162 *-*-dragonfly*) is_dragonfly=yes; GOOS=dragonfly ;;
163 *-*-rtems*) is_rtems=yes; GOOS=rtems ;;
164 *-*-solaris2*) is_solaris=yes; GOOS=solaris ;;
166 AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
167 AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
168 AM_CONDITIONAL(LIBGO_IS_IRIX, test $is_irix = yes)
169 AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes)
170 AM_CONDITIONAL(LIBGO_IS_NETBSD, test $is_netbsd = yes)
171 AM_CONDITIONAL(LIBGO_IS_OPENBSD, test $is_openbsd = yes)
172 AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test $is_dragonfly = yes)
173 AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
174 AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
175 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)
178 dnl Test whether we need to use DejaGNU or whether we can use the
179 dnl simpler gotest approach. We can only use gotest for a native
183 *-*-rtems*) USE_DEJAGNU=yes ;;
185 *) USE_DEJAGNU=yes ;;
187 AC_SUBST(USE_DEJAGNU)
189 dnl N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch).
214 arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
219 i[34567]86-*-* | x86_64-*-*)
225 [is_386=yes], [is_x86_64=yes])
226 if test "$is_386" = "yes"; then
238 #if _MIPS_SIM != _ABIO32
243 #if _MIPS_SIM != _ABIN32
248 #if _MIPS_SIM != _ABI64
253 #if _MIPS_SIM != _ABIO64
257 [AC_MSG_ERROR([unknown MIPS ABI])
258 [mips_abi="n32"]])])])])
260 "o32") GOARCH=mipso32 ;;
261 "n32") GOARCH=mipsn32 ;;
262 "n64") GOARCH=mipsn64 ;;
263 "o64") GOARCH=mipso64 ;;
266 rs6000*-*-* | powerpc*-*-*)
273 #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
276 [is_ppc64le=yes],[is_ppc64=yes])])
277 if test "$is_ppc" = "yes"; then
279 elif test "$is_ppc64" = "yes"; then
287 #if defined(__s390x__)
290 [is_s390=yes], [is_s390x=yes])
291 if test "$is_s390" = "yes"; then
299 #if defined(__sparcv9) || defined(__arch64__)
302 [is_sparc=yes], [is_sparc64=yes])
303 if test "$is_sparc" = "yes"; then
310 AM_CONDITIONAL(LIBGO_IS_386, test $is_386 = yes)
311 AM_CONDITIONAL(LIBGO_IS_ALPHA, test $is_alpha = yes)
312 AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes)
313 AM_CONDITIONAL(LIBGO_IS_ARM64, test $is_arm64 = yes)
314 AM_CONDITIONAL(LIBGO_IS_M68K, test $is_m68k = yes)
315 AM_CONDITIONAL(LIBGO_IS_MIPS, test $mips_abi != unknown)
316 AM_CONDITIONAL(LIBGO_IS_MIPSO32, test $mips_abi = o32)
317 AM_CONDITIONAL(LIBGO_IS_MIPSN32, test $mips_abi = n32)
318 AM_CONDITIONAL(LIBGO_IS_MIPSN64, test $mips_abi = n64)
319 AM_CONDITIONAL(LIBGO_IS_MIPSO64, test $mips_abi = o64)
320 AM_CONDITIONAL(LIBGO_IS_MIPS64, test $mips_abi = n64 -o $mips_abi = o64)
321 AM_CONDITIONAL(LIBGO_IS_PPC, test $is_ppc = yes)
322 AM_CONDITIONAL(LIBGO_IS_PPC64, test $is_ppc64 = yes)
323 AM_CONDITIONAL(LIBGO_IS_PPC64LE, test $is_ppc64le = yes)
324 AM_CONDITIONAL(LIBGO_IS_S390, test $is_s390 = yes)
325 AM_CONDITIONAL(LIBGO_IS_S390X, test $is_s390x = yes)
326 AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes)
327 AM_CONDITIONAL(LIBGO_IS_SPARC64, test $is_sparc64 = yes)
328 AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes)
331 dnl Some files are only present when needed for specific architectures.
333 GO_LIBCALL_OS_ARCH_FILE=
335 GO_SYSCALL_OS_ARCH_FILE=
336 if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then
337 GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go"
339 if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then
340 GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go"
342 if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then
343 GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go"
345 if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then
346 GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go"
348 AC_SUBST(GO_LIBCALL_OS_FILE)
349 AC_SUBST(GO_LIBCALL_OS_ARCH_FILE)
350 AC_SUBST(GO_SYSCALL_OS_FILE)
351 AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
353 dnl Special flags used to generate sysinfo.go.
354 OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
357 # IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct
358 # msghdr in <sys/socket.h>.
359 OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500"
361 *-*-solaris2.1[[01]])
362 # Solaris 10+ needs this so struct msghdr gets the msg_control
363 # etc. fields in <sys/socket.h> (_XPG4_2). _XOPEN_SOURCE=600 as
364 # above doesn't work with C99.
365 OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__"
370 dnl Use -fsplit-stack when compiling C code if available.
371 AC_CACHE_CHECK([whether -fsplit-stack is supported],
372 [libgo_cv_c_split_stack_supported],
374 CFLAGS="$CFLAGS -fsplit-stack"
375 AC_COMPILE_IFELSE([[int i;]],
376 [libgo_cv_c_split_stack_supported=yes],
377 [libgo_cv_c_split_stack_supported=no])
378 CFLAGS=$CFLAGS_hold])
380 dnl Make sure the linker permits -fsplit-stack. Old versions of gold will
381 dnl reject split-stack code calling non-split-stack code on targets
382 dnl they don't support.
383 AC_CACHE_CHECK([whether linker supports split/non-split linked together],
384 [libgo_cv_c_linker_split_non_split],
385 [cat > conftest1.c << EOF
387 int main() { f(); return 0; }
389 cat > conftest2.c << EOF
392 $CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c
393 $CC -c $CFLAGS $CPPFLAGS conftest2.c
394 if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext; then
395 libgo_cv_c_linker_split_non_split=yes
397 libgo_cv_c_linker_split_non_split=no
399 rm -f conftest1.* conftest2.* conftest])
401 if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then
402 SPLIT_STACK=-fsplit-stack
403 AC_DEFINE(USING_SPLIT_STACK, 1,
404 [Define if the compiler supports -fsplit-stack])
408 AC_SUBST(SPLIT_STACK)
409 AM_CONDITIONAL(USING_SPLIT_STACK,
410 test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
412 dnl If the compiler supports split-stack but the linker does not, then
413 dnl we need to explicitly disable split-stack for Go.
414 if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
415 GO_SPLIT_STACK=-fno-split-stack
419 AC_SUBST(GO_SPLIT_STACK)
421 dnl Check whether the linker does stack munging when calling from
422 dnl split-stack into non-split-stack code. We check this by looking
423 dnl at the --help output. FIXME: This is only half right: it's
424 dnl possible for the linker to support this for some targets but not
426 dnl This is slightly different from the above check, which is whether
427 dnl the linker permits the call at all.
428 AC_CACHE_CHECK([whether linker supports split stack],
429 [libgo_cv_c_linker_supports_split_stack],
430 [libgo_cv_c_linker_supports_split_stack=no
431 if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
432 libgo_cv_c_linker_supports_split_stack=yes
434 if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
435 AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
436 [Define if the linker support split stack adjustments])
439 AC_CACHE_CHECK([whether compiler is llgo],
440 [libgo_cv_c_goc_is_llgo],
441 [libgo_cv_c_goc_is_llgo=no
442 if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then
443 libgo_cv_c_goc_is_llgo=yes
445 AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes)
447 dnl Test for the -lm library.
449 AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
452 dnl Test for -lsocket and -lnsl. Copied from libjava/configure.ac.
453 AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
454 [libgo_cv_lib_sockets=
456 AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
457 if test "$libgo_check_socket" = "yes"; then
458 unset ac_cv_func_connect
459 AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
460 libgo_check_both=yes)
462 if test "$libgo_check_both" = "yes"; then
464 LIBS="$LIBS -lsocket -lnsl"
465 unset ac_cv_func_accept
466 AC_CHECK_FUNC(accept,
468 libgo_cv_lib_sockets="-lsocket -lnsl"])
469 unset ac_cv_func_accept
472 unset ac_cv_func_gethostbyname
473 libgo_old_libs="$LIBS"
474 AC_CHECK_FUNC(gethostbyname, ,
475 [AC_CHECK_LIB(nsl, main,
476 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
477 unset ac_cv_func_gethostbyname
478 AC_CHECK_FUNC(sendfile, ,
479 [AC_CHECK_LIB(sendfile, main,
480 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])])
483 NET_LIBS="$libgo_cv_lib_sockets"
486 dnl Test whether the compiler supports the -pthread option.
487 AC_CACHE_CHECK([whether -pthread is supported],
488 [libgo_cv_lib_pthread],
490 CFLAGS="$CFLAGS -pthread"
491 AC_COMPILE_IFELSE([[int i;]],
492 [libgo_cv_lib_pthread=yes],
493 [libgo_cv_lib_pthread=no])
494 CFLAGS=$CFLAGS_hold])
496 if test "$libgo_cv_lib_pthread" = yes; then
497 PTHREAD_CFLAGS=-pthread
499 AC_SUBST(PTHREAD_CFLAGS)
501 dnl Test for the -lpthread library.
503 AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
504 AC_SUBST(PTHREAD_LIBS)
506 dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
507 AC_SEARCH_LIBS([sched_yield], [rt])
508 AC_SEARCH_LIBS([nanosleep], [rt])
509 AC_SEARCH_LIBS([clock_gettime], [rt])
513 GCC_CHECK_UNWIND_GETIPINFO
515 AC_CHECK_HEADERS(sched.h sys/file.h sys/mman.h syscall.h sys/epoll.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/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h)
517 AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
518 [#ifdef HAVE_SYS_SOCKET_H
519 #include <sys/socket.h>
523 AC_CACHE_CHECK([whether <ustat.h> can be used],
524 [libgo_cv_c_ustat_h],
526 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS"
529 #include <sys/types.h>
530 #ifdef HAVE_LINUX_FILTER_H
531 #include <linux/filter.h>
534 ])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no])
535 CFLAGS=$CFLAGS_hold])
536 if test $libgo_cv_c_ustat_h = yes; then
537 AC_DEFINE(HAVE_USTAT_H, 1,
538 [Define to 1 if you have the <ustat.h> header file and it works.])
541 AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
543 AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr)
544 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
545 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
547 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 tee unlinkat unshare utimensat)
549 AC_CHECK_TYPES([loff_t])
553 AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
556 CFLAGS_hold="$CFLAGS"
557 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
559 LIBS="$LIBS $PTHREAD_LIBS"
560 AC_CHECK_FUNCS(sem_timedwait)
561 CFLAGS="$CFLAGS_hold"
565 LIBS="$LIBS $MATH_LIBS"
566 AC_CHECK_FUNCS(matherr)
569 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4],
570 [libgo_cv_func___sync_bool_compare_and_swap_4],
572 typedef unsigned int uint32 __attribute__ ((mode (SI)));
574 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
576 [libgo_cv_func___sync_bool_compare_and_swap_4=yes],
577 [libgo_cv_func___sync_bool_compare_and_swap_4=no])])
578 if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then
579 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1,
580 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32])
583 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8],
584 [libgo_cv_func___sync_bool_compare_and_swap_8],
586 typedef unsigned int uint64 __attribute__ ((mode (DI)));
588 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
590 [libgo_cv_func___sync_bool_compare_and_swap_8=yes],
591 [libgo_cv_func___sync_bool_compare_and_swap_8=no])])
592 if test "$libgo_cv_func___sync_bool_compare_and_swap_8" = "yes"; then
593 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8, 1,
594 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint64])
597 AC_CACHE_CHECK([for __sync_fetch_and_add_4],
598 [libgo_cv_func___sync_fetch_and_add_4],
600 typedef unsigned int uint32 __attribute__ ((mode (SI)));
602 int main() { return __sync_fetch_and_add (&i, 1); }
604 [libgo_cv_func___sync_fetch_and_add_4=yes],
605 [libgo_cv_func___sync_fetch_and_add_4=no])])
606 if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then
607 AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1,
608 [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32])
611 AC_CACHE_CHECK([for __sync_add_and_fetch_8],
612 [libgo_cv_func___sync_add_and_fetch_8],
614 typedef unsigned int uint64 __attribute__ ((mode (DI)));
616 int main() { return __sync_add_and_fetch (&i, 1); }
618 [libgo_cv_func___sync_add_and_fetch_8=yes],
619 [libgo_cv_func___sync_add_and_fetch_8=no])])
620 if test "$libgo_cv_func___sync_add_and_fetch_8" = "yes"; then
621 AC_DEFINE(HAVE_SYNC_ADD_AND_FETCH_8, 1,
622 [Define to 1 if the compiler provides the __sync_add_and_fetch function for uint64])
625 dnl For x86 we want to use the -minline-all-stringops option to avoid
626 dnl forcing a stack split when calling memcpy and friends.
627 AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
628 [libgo_cv_c_stringops],
630 CFLAGS="$CFLAGS -minline-all-stringops"
631 AC_COMPILE_IFELSE([int i;],
632 [libgo_cv_c_stringops=yes],
633 [libgo_cv_c_stringops=no])
634 CFLAGS=$CFLAGS_hold])
636 if test "$libgo_cv_c_stringops" = yes; then
637 STRINGOPS_FLAG=-minline-all-stringops
639 AC_SUBST(STRINGOPS_FLAG)
641 dnl For x86 we want to compile the math library with -mfancy-math-387
642 dnl -funsafe-math-optimizations so that we can use the builtin
643 dnl instructions directly.
644 AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
645 [libgo_cv_c_fancymath],
647 CFLAGS="$CFLAGS -mfancy-math-387"
648 AC_COMPILE_IFELSE([int i;],
649 [libgo_cv_c_fancymath=yes],
650 [libgo_cv_c_fancymath=no])
651 CFLAGS=$CFLAGS_hold])
653 if test "$libgo_cv_c_fancymath" = yes; then
654 MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations"
656 MATH_FLAG="-ffp-contract=off"
661 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
662 AC_CHECK_TYPES([off64_t])
665 dnl Work out the size of the epoll_events struct on GNU/Linux.
666 AC_CACHE_CHECK([epoll_event size],
667 [libgo_cv_c_epoll_event_size],
668 [AC_COMPUTE_INT(libgo_cv_c_epoll_event_size,
669 [sizeof (struct epoll_event)],
670 [#include <sys/epoll.h>],
671 [libgo_cv_c_epoll_event_size=0])])
672 SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
673 AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
675 dnl Work out the offset of the fd field in the epoll_events struct on
677 AC_CACHE_CHECK([epoll_event data.fd offset],
678 [libgo_cv_c_epoll_event_fd_offset],
679 [AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset,
680 [offsetof (struct epoll_event, data.fd)],
682 #include <sys/epoll.h>],
683 [libgo_cv_c_epoll_event_fd_offset=0])])
684 STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
685 AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
687 dnl Check if <sys/stat.h> uses timespec_t for st_?tim members. Introduced
688 dnl in Solaris 12 for XPG7 compatibility.
689 AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
690 [have_stat_timespec=yes], [have_stat_timespec=no])
691 AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
693 dnl See if struct exception is defined in <math.h>.
694 AC_CHECK_TYPE([struct exception],
695 [libgo_has_struct_exception=yes],
696 [libgo_has_struct_exception=no],
698 if test "$libgo_has_struct_exception" = "yes"; then
699 AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
700 [Define to 1 if <math.h> defines struct exception])
703 dnl See whether setcontext changes the value of TLS variables.
704 AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
705 [libgo_cv_lib_setcontext_clobbers_tls],
706 [CFLAGS_hold="$CFLAGS"
707 CFLAGS="$PTHREAD_CFLAGS"
709 LIBS="$LIBS $PTHREAD_LIBS"
710 AC_CHECK_SIZEOF([void *])
711 AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
716 #include <ucontext.h>
721 static char stack[[10 * 1024 * 1024]];
724 /* Called via makecontext/setcontext. */
732 /* Called via pthread_create. */
737 /* The thread should still see this value after calling
743 /* The call to setcontext should not return. */
752 /* The thread should not see this value. */
755 if (getcontext (&c) < 0)
758 c.uc_stack.ss_sp = stack;
759 #ifdef MAKECONTEXT_STACK_TOP
760 c.uc_stack.ss_sp += sizeof stack;
762 c.uc_stack.ss_flags = 0;
763 c.uc_stack.ss_size = sizeof stack;
765 makecontext (&c, cfn, 0);
767 if (pthread_create (&tid, NULL, tfn, NULL) != 0)
770 if (pthread_join (tid, NULL) != 0)
773 /* The thread should have called exit. */
777 [libgo_cv_lib_setcontext_clobbers_tls=no],
778 [libgo_cv_lib_setcontext_clobbers_tls=yes],
779 [case "$target:$ptr_type_size" in
780 i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64)
781 libgo_cv_lib_setcontext_clobbers_tls=yes ;;
783 libgo_cv_lib_setcontext_clobbers_tls=no ;;
786 CFLAGS="$CFLAGS_hold"
789 if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
790 AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
791 [Define if setcontext clobbers TLS variables])
794 AC_CACHE_CHECK([whether .eh_frame section should be read-only],
795 libgo_cv_ro_eh_frame, [
796 libgo_cv_ro_eh_frame=no
797 echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
798 if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
799 if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
800 libgo_cv_ro_eh_frame=yes
801 elif grep '.section.*eh_frame.*#alloc' conftest.c \
802 | grep -v '#write' > /dev/null; then
803 libgo_cv_ro_eh_frame=yes
808 if test "x$libgo_cv_ro_eh_frame" = xyes; then
809 AC_DEFINE(EH_FRAME_FLAGS, "a",
810 [Define to the flags needed for the .section .eh_frame directive.])
812 AC_DEFINE(EH_FRAME_FLAGS, "aw",
813 [Define to the flags needed for the .section .eh_frame directive.])
816 AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
817 [libgo_cv_c_unused_arguments],
819 CFLAGS="$CFLAGS -Qunused-arguments"
820 AC_COMPILE_IFELSE([[int i;]],
821 [libgo_cv_c_unused_arguments=yes],
822 [libgo_cv_c_unused_arguments=no])
823 CFLAGS=$CFLAGS_hold])
825 AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
826 libgo_cv_as_comdat_gnu, [
827 echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
829 if test "$libgo_cv_c_unused_arguments" = yes; then
830 CFLAGS="$CFLAGS -Qunused-arguments"
832 if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
833 libgo_cv_as_comdat_gnu=yes
835 libgo_cv_as_comdat_gnu=no
839 if test "x$libgo_cv_as_comdat_gnu" = xyes; then
840 AC_DEFINE(HAVE_AS_COMDAT_GAS, 1,
841 [Define if your assembler supports GNU comdat group syntax.])
844 AC_CACHE_CHECK([assembler supports pc related relocs],
845 libgo_cv_as_x86_pcrel, [
846 libgo_cv_as_x86_pcrel=yes
847 echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
849 if test "$libgo_cv_c_unused_arguments" = yes; then
850 CFLAGS="$CFLAGS -Qunused-arguments"
852 if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
853 libgo_cv_as_x86_pcrel=no
857 if test "x$libgo_cv_as_x86_pcrel" = xyes; then
858 AC_DEFINE(HAVE_AS_X86_PCREL, 1,
859 [Define if your assembler supports PC relative relocs.])
862 AC_CACHE_CHECK([assembler supports unwind section type],
863 libgo_cv_as_x86_64_unwind_section_type, [
864 libgo_cv_as_x86_64_unwind_section_type=yes
865 echo '.section .eh_frame,"a",@unwind' > conftest.s
867 if test "$libgo_cv_c_unused_arguments" = yes; then
868 CFLAGS="$CFLAGS -Qunused-arguments"
870 if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
871 libgo_cv_as_x86_64_unwind_section_type=no
875 if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then
876 AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
877 [Define if your assembler supports unwind section type.])
882 if test ${multilib} = yes; then
883 multilib_arg="--enable-multilib"
888 AC_CONFIG_FILES(Makefile testsuite/Makefile)
890 AC_CONFIG_COMMANDS([default],
891 [if test -n "$CONFIG_FILES"; then
892 # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
893 # that multilib installs will end up installed in the correct place.
894 # The testsuite needs it for multilib-aware ABI baseline files.
895 # To work around this not being passed down from config-ml.in ->
896 # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
897 # append it here. Only modify Makefiles that have just been created.
899 # Also, get rid of this simulated-VPATH thing that automake does.
901 s!`test -f '$<' || echo '$(srcdir)/'`!!
903 for i in $SUBDIRS; do
904 case $CONFIG_FILES in
906 #echo "Adding MULTISUBDIR to $i/Makefile"
907 sed -f vpsed $i/Makefile > tmp
908 grep '^MULTISUBDIR =' Makefile >> tmp
917 # Variables needed in config.status (file generation) which aren't already
918 # passed by autoconf.