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