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