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