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