111
|
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=12: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 # N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch).
|
|
211 ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mips mipsle mips64 mips64le mips64p32 mips64p32le ppc ppc64 ppc64le s390 s390x sparc sparc64"
|
|
212
|
|
213 # All known GOARCH_FAMILY values.
|
|
214 ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SPARC SPARC64"
|
|
215
|
|
216 GOARCH=unknown
|
|
217 GOARCH_FAMILY=unknown
|
|
218 GOARCH_BIGENDIAN=0
|
|
219 GOARCH_CACHELINESIZE=64
|
|
220 GOARCH_PHYSPAGESIZE=4096
|
|
221 GOARCH_PCQUANTUM=1
|
|
222 GOARCH_INT64ALIGN=8
|
|
223 GOARCH_HUGEPAGESIZE=0
|
|
224 GOARCH_MINFRAMESIZE=0
|
|
225 case ${host} in
|
|
226 alpha*-*-*)
|
|
227 GOARCH=alpha
|
|
228 GOARCH_FAMILY=ALPHA
|
|
229 GOARCH_PHYSPAGESIZE=8192
|
|
230 GOARCH_PCQUANTUM=4
|
|
231 ;;
|
|
232 aarch64-*-*)
|
|
233 GOARCH=arm64
|
|
234 GOARCH_FAMILY=ARM64
|
|
235 GOARCH_CACHELINESIZE=32
|
|
236 GOARCH_PHYSPAGESIZE=65536
|
|
237 GOARCH_PCQUANTUM=4
|
|
238 GOARCH_MINFRAMESIZE=8
|
|
239 ;;
|
|
240 arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
|
|
241 GOARCH=arm
|
|
242 GOARCH_FAMILY=ARM
|
|
243 GOARCH_CACHELINESIZE=32
|
|
244 GOARCH_PCQUANTUM=4
|
|
245 GOARCH_MINFRAMESIZE=4
|
|
246 ;;
|
|
247 changequote(,)dnl
|
|
248 i[34567]86-*-* | x86_64-*-*)
|
|
249 changequote([,])dnl
|
|
250 AC_COMPILE_IFELSE([
|
|
251 #ifdef __x86_64__
|
|
252 #error 64-bit
|
|
253 #endif],
|
|
254 [GOARCH=386
|
|
255 GOARCH_FAMILY=I386
|
|
256 GOARCH_INT64ALIGN=4
|
|
257 GOARCH_HUGEPAGESIZE="1 << 21"
|
|
258 ],
|
|
259 [GOARCH=amd64
|
|
260 GOARCH_FAMILY=AMD64
|
|
261 GOARCH_HUGEPAGESIZE="1 << 21"
|
|
262 ])
|
|
263 ;;
|
|
264 ia64-*-*)
|
|
265 GOARCH=ia64
|
|
266 GOARCH_FAMILY=IA64
|
|
267 GOARCH_CACHELINESIZE=16384
|
|
268 GOARCH_PHYSPAGESIZE=65536
|
|
269 ;;
|
|
270 m68k*-*-*)
|
|
271 GOARCH=m68k
|
|
272 GOARCH_FAMILY=M68K
|
|
273 GOARCH_BIGENDIAN=1
|
|
274 GOARCH_CACHELINESIZE=16
|
|
275 GOARCH_PCQUANTUM=4
|
|
276 GOARCH_INT64ALIGN=2
|
|
277 ;;
|
|
278 mips*-*-*)
|
|
279 AC_COMPILE_IFELSE([
|
|
280 #if _MIPS_SIM != _ABIO32
|
|
281 #error not o32
|
|
282 #endif],
|
|
283 [mips_abi="o32"],
|
|
284 [AC_COMPILE_IFELSE([
|
|
285 #if _MIPS_SIM != _ABIN32
|
|
286 #error not n32
|
|
287 #endif],
|
|
288 [mips_abi="n32"],
|
|
289 [AC_COMPILE_IFELSE([
|
|
290 #if _MIPS_SIM != _ABI64
|
|
291 #error not n64
|
|
292 #endif],
|
|
293 [mips_abi="n64"],
|
|
294 [AC_MSG_ERROR([unknown MIPS ABI])
|
|
295 [mips_abi="n32"]])])])
|
|
296 case "$mips_abi" in
|
|
297 "o32") GOARCH=mips ;;
|
|
298 "n32") GOARCH=mips64p32 ;;
|
|
299 "n64") GOARCH=mips64 ;;
|
|
300 esac
|
|
301 case "$mips_abi" in
|
|
302 "o32" | "n32")
|
|
303 GOARCH_FAMILY=MIPS
|
|
304 GOARCH_MINFRAMESIZE=4
|
|
305 ;;
|
|
306 "n64")
|
|
307 GOARCH_FAMILY=MIPS64
|
|
308 GOARCH_MINFRAMESIZE=8
|
|
309 ;;
|
|
310 esac
|
|
311 case "${host}" in
|
|
312 mips*el-*-*)
|
|
313 GOARCH="${GOARCH}le"
|
|
314 ;;
|
|
315 *)
|
|
316 GOARCH_BIGENDIAN=1
|
|
317 ;;
|
|
318 esac
|
|
319 GOARCH_CACHELINESIZE=32
|
|
320 GOARCH_PHYSPAGESIZE=16384
|
|
321 GOARCH_PCQUANTUM=4
|
|
322 ;;
|
|
323 rs6000*-*-* | powerpc*-*-*)
|
|
324 AC_COMPILE_IFELSE([
|
|
325 #ifdef _ARCH_PPC64
|
|
326 #error 64-bit
|
|
327 #endif],
|
|
328 [GOARCH=ppc
|
|
329 GOARCH_FAMILY=PPC
|
|
330 GOARCH_BIGENDIAN=1
|
|
331 ],
|
|
332 [
|
|
333 GOARCH_FAMILY=PPC64
|
|
334 AC_COMPILE_IFELSE([
|
|
335 #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
|
|
336 #error 64be
|
|
337 #endif],
|
|
338 [GOARCH=ppc64le
|
|
339 ],
|
|
340 [GOARCH=ppc64
|
|
341 GOARCH_BIGENDIAN=1
|
|
342 ])])
|
|
343 GOARCH_PHYSPAGESIZE=65536
|
|
344 GOARCH_PCQUANTUM=4
|
|
345 GOARCH_MINFRAMESIZE=32
|
|
346 ;;
|
|
347 s390*-*-*)
|
|
348 AC_COMPILE_IFELSE([
|
|
349 #if defined(__s390x__)
|
|
350 #error 64-bit
|
|
351 #endif],
|
|
352 [GOARCH=s390
|
|
353 GOARCH_FAMILY=S390
|
|
354 GOARCH_MINFRAMESIZE=4
|
|
355 ], [GOARCH=s390x
|
|
356 GOARCH_FAMILY=S390X
|
|
357 GOARCH_MINFRAMESIZE=8
|
|
358 ])
|
|
359 GOARCH_BIGENDIAN=1
|
|
360 GOARCH_CACHELINESIZE=256
|
|
361 GOARCH_PCQUANTUM=2
|
|
362 ;;
|
|
363 sparc*-*-*)
|
|
364 AC_COMPILE_IFELSE([
|
|
365 #if defined(__sparcv9) || defined(__arch64__)
|
|
366 #error 64-bit
|
|
367 #endif],
|
|
368 [GOARCH=sparc
|
|
369 GOARCH_FAMILY=SPARC
|
|
370 ],
|
|
371 [GOARCH=sparc64
|
|
372 GOARCH_FAMILY=SPARC64
|
|
373 ])
|
|
374 GOARCH_BIGENDIAN=1
|
|
375 GOARCH_PHYSPAGESIZE=8192
|
|
376 GOARCH_PCQUANTUM=4
|
|
377 ;;
|
|
378 esac
|
|
379 AC_SUBST(GOARCH)
|
|
380 AC_SUBST(GOARCH_FAMILY)
|
|
381 AC_SUBST(GOARCH_BIGENDIAN)
|
|
382 AC_SUBST(GOARCH_CACHELINESIZE)
|
|
383 AC_SUBST(GOARCH_PHYSPAGESIZE)
|
|
384 AC_SUBST(GOARCH_PCQUANTUM)
|
|
385 AC_SUBST(GOARCH_INT64ALIGN)
|
|
386 AC_SUBST(GOARCH_HUGEPAGESIZE)
|
|
387 AC_SUBST(GOARCH_MINFRAMESIZE)
|
|
388 AC_SUBST(ALLGOARCH)
|
|
389 AC_SUBST(ALLGOARCHFAMILY)
|
|
390
|
|
391 dnl Some files are only present when needed for specific architectures.
|
|
392 GO_LIBCALL_OS_FILE=
|
|
393 GO_LIBCALL_OS_ARCH_FILE=
|
|
394 GO_SYSCALL_OS_FILE=
|
|
395 GO_SYSCALL_OS_ARCH_FILE=
|
|
396 if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then
|
|
397 GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go"
|
|
398 fi
|
|
399 if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then
|
|
400 GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go"
|
|
401 fi
|
|
402 if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then
|
|
403 GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go"
|
|
404 fi
|
|
405 if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then
|
|
406 GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go"
|
|
407 fi
|
|
408 AC_SUBST(GO_LIBCALL_OS_FILE)
|
|
409 AC_SUBST(GO_LIBCALL_OS_ARCH_FILE)
|
|
410 AC_SUBST(GO_SYSCALL_OS_FILE)
|
|
411 AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
|
|
412
|
|
413 dnl Special flags used to generate sysinfo.go.
|
|
414 OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
|
|
415 case "$target" in
|
|
416 mips-sgi-irix6.5*)
|
|
417 # IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct
|
|
418 # msghdr in <sys/socket.h>.
|
|
419 OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500"
|
|
420 ;;
|
|
421 *-*-solaris2.1[[01]])
|
|
422 # Solaris 10+ needs this so struct msghdr gets the msg_control
|
|
423 # etc. fields in <sys/socket.h> (_XPG4_2). _XOPEN_SOURCE=600 as
|
|
424 # above doesn't work with C99.
|
|
425 OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__"
|
|
426 ;;
|
|
427 esac
|
|
428 AC_SUBST(OSCFLAGS)
|
|
429
|
|
430 dnl Check if assembler supports disabling hardware capability support.
|
|
431 GCC_CHECK_ASSEMBLER_HWCAP
|
|
432
|
|
433 dnl Use -fsplit-stack when compiling C code if available.
|
|
434 AC_CACHE_CHECK([whether -fsplit-stack is supported],
|
|
435 [libgo_cv_c_split_stack_supported],
|
|
436 [CFLAGS_hold=$CFLAGS
|
|
437 CFLAGS="$CFLAGS -fsplit-stack"
|
|
438 AC_COMPILE_IFELSE([[int i;]],
|
|
439 [libgo_cv_c_split_stack_supported=yes],
|
|
440 [libgo_cv_c_split_stack_supported=no])
|
|
441 CFLAGS=$CFLAGS_hold])
|
|
442
|
|
443 dnl Make sure the linker permits -fsplit-stack. Old versions of gold will
|
|
444 dnl reject split-stack code calling non-split-stack code on targets
|
|
445 dnl they don't support.
|
|
446 AC_CACHE_CHECK([whether linker supports split/non-split linked together],
|
|
447 [libgo_cv_c_linker_split_non_split],
|
|
448 [cat > conftest1.c << EOF
|
|
449 extern void f();
|
|
450 int main() { f(); return 0; }
|
|
451 EOF
|
|
452 cat > conftest2.c << EOF
|
|
453 void f() {}
|
|
454 EOF
|
|
455 $CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c >/dev/null 2>&1
|
|
456 $CC -c $CFLAGS $CPPFLAGS conftest2.c > /dev/null 2>&1
|
|
457 if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext > /dev/null 2>&1; then
|
|
458 libgo_cv_c_linker_split_non_split=yes
|
|
459 else
|
|
460 libgo_cv_c_linker_split_non_split=no
|
|
461 fi
|
|
462 rm -f conftest1.* conftest2.* conftest])
|
|
463
|
|
464 if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then
|
|
465 SPLIT_STACK=-fsplit-stack
|
|
466 AC_DEFINE(USING_SPLIT_STACK, 1,
|
|
467 [Define if the compiler supports -fsplit-stack])
|
|
468 else
|
|
469 SPLIT_STACK=
|
|
470 fi
|
|
471 AC_SUBST(SPLIT_STACK)
|
|
472 AM_CONDITIONAL(USING_SPLIT_STACK,
|
|
473 test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
|
|
474
|
|
475 dnl If the compiler supports split-stack but the linker does not, then
|
|
476 dnl we need to explicitly disable split-stack for Go.
|
|
477 if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
|
|
478 GO_SPLIT_STACK=-fno-split-stack
|
|
479 else
|
|
480 GO_SPLIT_STACK=
|
|
481 fi
|
|
482 AC_SUBST(GO_SPLIT_STACK)
|
|
483
|
|
484 dnl Check whether the linker does stack munging when calling from
|
|
485 dnl split-stack into non-split-stack code. We check this by looking
|
|
486 dnl at the --help output. FIXME: This is only half right: it's
|
|
487 dnl possible for the linker to support this for some targets but not
|
|
488 dnl others.
|
|
489 dnl This is slightly different from the above check, which is whether
|
|
490 dnl the linker permits the call at all.
|
|
491 AC_CACHE_CHECK([whether linker supports split stack],
|
|
492 [libgo_cv_c_linker_supports_split_stack],
|
|
493 [libgo_cv_c_linker_supports_split_stack=no
|
|
494 if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
|
|
495 libgo_cv_c_linker_supports_split_stack=yes
|
|
496 fi])
|
|
497 if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
|
|
498 AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
|
|
499 [Define if the linker support split stack adjustments])
|
|
500 fi
|
|
501
|
|
502 AC_CACHE_CHECK([whether compiler is llgo],
|
|
503 [libgo_cv_c_goc_is_llgo],
|
|
504 [libgo_cv_c_goc_is_llgo=no
|
|
505 if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then
|
|
506 libgo_cv_c_goc_is_llgo=yes
|
|
507 fi])
|
|
508 AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes)
|
|
509
|
|
510 dnl Test for the -lm library.
|
|
511 MATH_LIBS=
|
|
512 AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
|
|
513 AC_SUBST(MATH_LIBS)
|
|
514
|
|
515 dnl Test for -lsocket and -lnsl. Copied from libjava/configure.ac.
|
|
516 AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
|
|
517 [libgo_cv_lib_sockets=
|
|
518 libgo_check_both=no
|
|
519 AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
|
|
520 if test "$libgo_check_socket" = "yes"; then
|
|
521 unset ac_cv_func_connect
|
|
522 AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
|
|
523 libgo_check_both=yes)
|
|
524 fi
|
|
525 if test "$libgo_check_both" = "yes"; then
|
|
526 libgo_old_libs=$LIBS
|
|
527 LIBS="$LIBS -lsocket -lnsl"
|
|
528 unset ac_cv_func_accept
|
|
529 AC_CHECK_FUNC(accept,
|
|
530 [libgo_check_nsl=no
|
|
531 libgo_cv_lib_sockets="-lsocket -lnsl"])
|
|
532 unset ac_cv_func_accept
|
|
533 LIBS=$libgo_old_libs
|
|
534 fi
|
|
535 unset ac_cv_func_gethostbyname
|
|
536 libgo_old_libs="$LIBS"
|
|
537 AC_CHECK_FUNC(gethostbyname, ,
|
|
538 [AC_CHECK_LIB(nsl, main,
|
|
539 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
|
|
540 unset ac_cv_func_gethostbyname
|
|
541 AC_CHECK_FUNC(sendfile, ,
|
|
542 [AC_CHECK_LIB(sendfile, main,
|
|
543 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])])
|
|
544 LIBS=$libgo_old_libs
|
|
545 ])
|
|
546 NET_LIBS="$libgo_cv_lib_sockets"
|
|
547 AC_SUBST(NET_LIBS)
|
|
548
|
|
549 dnl Test whether the compiler supports the -pthread option.
|
|
550 AC_CACHE_CHECK([whether -pthread is supported],
|
|
551 [libgo_cv_lib_pthread],
|
|
552 [CFLAGS_hold=$CFLAGS
|
|
553 CFLAGS="$CFLAGS -pthread"
|
|
554 AC_COMPILE_IFELSE([[int i;]],
|
|
555 [libgo_cv_lib_pthread=yes],
|
|
556 [libgo_cv_lib_pthread=no])
|
|
557 CFLAGS=$CFLAGS_hold])
|
|
558 PTHREAD_CFLAGS=
|
|
559 if test "$libgo_cv_lib_pthread" = yes; then
|
|
560 PTHREAD_CFLAGS=-pthread
|
|
561 fi
|
|
562 AC_SUBST(PTHREAD_CFLAGS)
|
|
563
|
|
564 dnl Test for the -lpthread library.
|
|
565 PTHREAD_LIBS=
|
|
566 AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
|
|
567 AC_SUBST(PTHREAD_LIBS)
|
|
568
|
|
569 dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
|
|
570 AC_SEARCH_LIBS([sched_yield], [rt])
|
|
571 AC_SEARCH_LIBS([nanosleep], [rt])
|
|
572 AC_SEARCH_LIBS([clock_gettime], [rt])
|
|
573
|
|
574 AC_C_BIGENDIAN
|
|
575
|
|
576 GCC_CHECK_UNWIND_GETIPINFO
|
|
577
|
|
578 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)
|
|
579
|
|
580 AC_CHECK_HEADERS([netinet/icmp6.h], [], [],
|
|
581 [#include <netinet/in.h>
|
|
582 ])
|
|
583
|
|
584 AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
|
|
585 [#ifdef HAVE_SYS_SOCKET_H
|
|
586 #include <sys/socket.h>
|
|
587 #endif
|
|
588 ])
|
|
589
|
|
590 AC_CACHE_CHECK([whether <ustat.h> can be used],
|
|
591 [libgo_cv_c_ustat_h],
|
|
592 [CFLAGS_hold=$CFLAGS
|
|
593 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS"
|
|
594 AC_COMPILE_IFELSE(
|
|
595 [AC_LANG_SOURCE([
|
|
596 #include <sys/types.h>
|
|
597 #ifdef HAVE_LINUX_FILTER_H
|
|
598 #include <linux/filter.h>
|
|
599 #endif
|
|
600 #include <ustat.h>
|
|
601 ])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no])
|
|
602 CFLAGS=$CFLAGS_hold])
|
|
603 if test $libgo_cv_c_ustat_h = yes; then
|
|
604 AC_DEFINE(HAVE_USTAT_H, 1,
|
|
605 [Define to 1 if you have the <ustat.h> header file and it works.])
|
|
606 fi
|
|
607
|
|
608 AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
|
|
609
|
|
610 AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr)
|
|
611 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
|
|
612 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
|
|
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 AC_CHECK_TYPES([loff_t])
|
|
617
|
|
618 LIBS_hold="$LIBS"
|
|
619 LIBS="$LIBS -lm"
|
|
620 AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
|
|
621 LIBS="$LIBS_hold"
|
|
622
|
|
623 CFLAGS_hold="$CFLAGS"
|
|
624 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
|
625 LIBS_hold="$LIBS"
|
|
626 LIBS="$LIBS $PTHREAD_LIBS"
|
|
627 AC_CHECK_FUNCS(sem_timedwait)
|
|
628 CFLAGS="$CFLAGS_hold"
|
|
629 LIBS="$LIBS_hold"
|
|
630
|
|
631 LIBS_hold="$LIBS"
|
|
632 LIBS="$LIBS $MATH_LIBS"
|
|
633 AC_CHECK_FUNCS(matherr)
|
|
634 LIBS="$LIBS_hold"
|
|
635
|
|
636 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4],
|
|
637 [libgo_cv_func___sync_bool_compare_and_swap_4],
|
|
638 [AC_LINK_IFELSE([
|
|
639 typedef unsigned int uint32 __attribute__ ((mode (SI)));
|
|
640 uint32 i;
|
|
641 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
|
|
642 ],
|
|
643 [libgo_cv_func___sync_bool_compare_and_swap_4=yes],
|
|
644 [libgo_cv_func___sync_bool_compare_and_swap_4=no])])
|
|
645 if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then
|
|
646 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1,
|
|
647 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32])
|
|
648 fi
|
|
649
|
|
650 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8],
|
|
651 [libgo_cv_func___sync_bool_compare_and_swap_8],
|
|
652 [AC_LINK_IFELSE([
|
|
653 typedef unsigned int uint64 __attribute__ ((mode (DI)));
|
|
654 uint64 i;
|
|
655 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
|
|
656 ],
|
|
657 [libgo_cv_func___sync_bool_compare_and_swap_8=yes],
|
|
658 [libgo_cv_func___sync_bool_compare_and_swap_8=no])])
|
|
659 if test "$libgo_cv_func___sync_bool_compare_and_swap_8" = "yes"; then
|
|
660 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8, 1,
|
|
661 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint64])
|
|
662 fi
|
|
663
|
|
664 AC_CACHE_CHECK([for __sync_fetch_and_add_4],
|
|
665 [libgo_cv_func___sync_fetch_and_add_4],
|
|
666 [AC_LINK_IFELSE([
|
|
667 typedef unsigned int uint32 __attribute__ ((mode (SI)));
|
|
668 uint32 i;
|
|
669 int main() { return __sync_fetch_and_add (&i, 1); }
|
|
670 ],
|
|
671 [libgo_cv_func___sync_fetch_and_add_4=yes],
|
|
672 [libgo_cv_func___sync_fetch_and_add_4=no])])
|
|
673 if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then
|
|
674 AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1,
|
|
675 [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32])
|
|
676 fi
|
|
677
|
|
678 AC_CACHE_CHECK([for __sync_add_and_fetch_8],
|
|
679 [libgo_cv_func___sync_add_and_fetch_8],
|
|
680 [AC_LINK_IFELSE([
|
|
681 typedef unsigned int uint64 __attribute__ ((mode (DI)));
|
|
682 uint64 i;
|
|
683 int main() { return __sync_add_and_fetch (&i, 1); }
|
|
684 ],
|
|
685 [libgo_cv_func___sync_add_and_fetch_8=yes],
|
|
686 [libgo_cv_func___sync_add_and_fetch_8=no])])
|
|
687 if test "$libgo_cv_func___sync_add_and_fetch_8" = "yes"; then
|
|
688 AC_DEFINE(HAVE_SYNC_ADD_AND_FETCH_8, 1,
|
|
689 [Define to 1 if the compiler provides the __sync_add_and_fetch function for uint64])
|
|
690 fi
|
|
691
|
|
692 dnl For x86 we want to use the -minline-all-stringops option to avoid
|
|
693 dnl forcing a stack split when calling memcpy and friends.
|
|
694 AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
|
|
695 [libgo_cv_c_stringops],
|
|
696 [CFLAGS_hold=$CFLAGS
|
|
697 CFLAGS="$CFLAGS -minline-all-stringops"
|
|
698 AC_COMPILE_IFELSE([int i;],
|
|
699 [libgo_cv_c_stringops=yes],
|
|
700 [libgo_cv_c_stringops=no])
|
|
701 CFLAGS=$CFLAGS_hold])
|
|
702 STRINGOPS_FLAG=
|
|
703 if test "$libgo_cv_c_stringops" = yes; then
|
|
704 STRINGOPS_FLAG=-minline-all-stringops
|
|
705 fi
|
|
706 AC_SUBST(STRINGOPS_FLAG)
|
|
707
|
|
708 dnl For x86 we want to compile the math library with -mfancy-math-387
|
|
709 dnl -funsafe-math-optimizations so that we can use the builtin
|
|
710 dnl instructions directly.
|
|
711 AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
|
|
712 [libgo_cv_c_fancymath],
|
|
713 [CFLAGS_hold=$CFLAGS
|
|
714 CFLAGS="$CFLAGS -mfancy-math-387"
|
|
715 AC_COMPILE_IFELSE([int i;],
|
|
716 [libgo_cv_c_fancymath=yes],
|
|
717 [libgo_cv_c_fancymath=no])
|
|
718 CFLAGS=$CFLAGS_hold])
|
|
719 MATH_FLAG=
|
|
720 if test "$libgo_cv_c_fancymath" = yes; then
|
|
721 MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations"
|
|
722 else
|
|
723 MATH_FLAG="-ffp-contract=off"
|
|
724 fi
|
|
725 AC_SUBST(MATH_FLAG)
|
|
726
|
|
727 CFLAGS_hold=$CFLAGS
|
|
728 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
|
|
729 AC_CHECK_TYPES([off64_t])
|
|
730 CFLAGS=$CFLAGS_hold
|
|
731
|
|
732 dnl Work out the size of the epoll_events struct on GNU/Linux.
|
|
733 AC_CACHE_CHECK([epoll_event size],
|
|
734 [libgo_cv_c_epoll_event_size],
|
|
735 [AC_COMPUTE_INT(libgo_cv_c_epoll_event_size,
|
|
736 [sizeof (struct epoll_event)],
|
|
737 [#include <sys/epoll.h>],
|
|
738 [libgo_cv_c_epoll_event_size=0])])
|
|
739 SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
|
|
740 AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
|
|
741
|
|
742 dnl Work out the offset of the fd field in the epoll_events struct on
|
|
743 dnl GNU/Linux.
|
|
744 AC_CACHE_CHECK([epoll_event data.fd offset],
|
|
745 [libgo_cv_c_epoll_event_fd_offset],
|
|
746 [AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset,
|
|
747 [offsetof (struct epoll_event, data.fd)],
|
|
748 [#include <stddef.h>
|
|
749 #include <sys/epoll.h>],
|
|
750 [libgo_cv_c_epoll_event_fd_offset=0])])
|
|
751 STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
|
|
752 AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
|
|
753
|
|
754 dnl Check if <sys/stat.h> uses timespec_t for st_?tim members. Introduced
|
|
755 dnl in Solaris 12 for XPG7 compatibility.
|
|
756 AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
|
|
757 [have_stat_timespec=yes], [have_stat_timespec=no])
|
|
758 AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
|
|
759
|
|
760 dnl See if struct exception is defined in <math.h>.
|
|
761 AC_CHECK_TYPE([struct exception],
|
|
762 [libgo_has_struct_exception=yes],
|
|
763 [libgo_has_struct_exception=no],
|
|
764 [#include <math.h>])
|
|
765 if test "$libgo_has_struct_exception" = "yes"; then
|
|
766 AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
|
|
767 [Define to 1 if <math.h> defines struct exception])
|
|
768 fi
|
|
769
|
|
770 dnl See whether setcontext changes the value of TLS variables.
|
|
771 AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
|
|
772 [libgo_cv_lib_setcontext_clobbers_tls],
|
|
773 [CFLAGS_hold="$CFLAGS"
|
|
774 CFLAGS="$PTHREAD_CFLAGS"
|
|
775 LIBS_hold="$LIBS"
|
|
776 LIBS="$LIBS $PTHREAD_LIBS"
|
|
777 AC_CHECK_SIZEOF([void *])
|
|
778 AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
|
|
779 AC_RUN_IFELSE(
|
|
780 [AC_LANG_SOURCE([
|
|
781 #include <pthread.h>
|
|
782 #include <stdlib.h>
|
|
783 #include <ucontext.h>
|
|
784 #include <unistd.h>
|
|
785
|
|
786 __thread int tls;
|
|
787
|
|
788 static char stack[[10 * 1024 * 1024]];
|
|
789 static ucontext_t c;
|
|
790
|
|
791 /* Called via makecontext/setcontext. */
|
|
792
|
|
793 static void
|
|
794 cfn (void)
|
|
795 {
|
|
796 exit (tls);
|
|
797 }
|
|
798
|
|
799 /* Called via pthread_create. */
|
|
800
|
|
801 static void *
|
|
802 tfn (void *dummy)
|
|
803 {
|
|
804 /* The thread should still see this value after calling
|
|
805 setcontext. */
|
|
806 tls = 0;
|
|
807
|
|
808 setcontext (&c);
|
|
809
|
|
810 /* The call to setcontext should not return. */
|
|
811 abort ();
|
|
812 }
|
|
813
|
|
814 int
|
|
815 main ()
|
|
816 {
|
|
817 pthread_t tid;
|
|
818
|
|
819 /* The thread should not see this value. */
|
|
820 tls = 1;
|
|
821
|
|
822 if (getcontext (&c) < 0)
|
|
823 abort ();
|
|
824
|
|
825 c.uc_stack.ss_sp = stack;
|
|
826 #ifdef MAKECONTEXT_STACK_TOP
|
|
827 c.uc_stack.ss_sp += sizeof stack;
|
|
828 #endif
|
|
829 c.uc_stack.ss_flags = 0;
|
|
830 c.uc_stack.ss_size = sizeof stack;
|
|
831 c.uc_link = NULL;
|
|
832 makecontext (&c, cfn, 0);
|
|
833
|
|
834 if (pthread_create (&tid, NULL, tfn, NULL) != 0)
|
|
835 abort ();
|
|
836
|
|
837 if (pthread_join (tid, NULL) != 0)
|
|
838 abort ();
|
|
839
|
|
840 /* The thread should have called exit. */
|
|
841 abort ();
|
|
842 }
|
|
843 ])],
|
|
844 [libgo_cv_lib_setcontext_clobbers_tls=no],
|
|
845 [libgo_cv_lib_setcontext_clobbers_tls=yes],
|
|
846 [case "$target:$ptr_type_size" in
|
|
847 i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64)
|
|
848 libgo_cv_lib_setcontext_clobbers_tls=yes ;;
|
|
849 *)
|
|
850 libgo_cv_lib_setcontext_clobbers_tls=no ;;
|
|
851 esac
|
|
852 ])
|
|
853 CFLAGS="$CFLAGS_hold"
|
|
854 LIBS="$LIBS_hold"
|
|
855 ])
|
|
856 if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
|
|
857 AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
|
|
858 [Define if setcontext clobbers TLS variables])
|
|
859 fi
|
|
860
|
|
861 AC_CACHE_CHECK([whether .eh_frame section should be read-only],
|
|
862 libgo_cv_ro_eh_frame, [
|
|
863 libgo_cv_ro_eh_frame=no
|
|
864 echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
|
|
865 if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
|
|
866 if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
|
|
867 libgo_cv_ro_eh_frame=yes
|
|
868 elif grep '.section.*eh_frame.*#alloc' conftest.c \
|
|
869 | grep -v '#write' > /dev/null; then
|
|
870 libgo_cv_ro_eh_frame=yes
|
|
871 fi
|
|
872 fi
|
|
873 rm -f conftest.*
|
|
874 ])
|
|
875 if test "x$libgo_cv_ro_eh_frame" = xyes; then
|
|
876 AC_DEFINE(EH_FRAME_FLAGS, "a",
|
|
877 [Define to the flags needed for the .section .eh_frame directive.])
|
|
878 else
|
|
879 AC_DEFINE(EH_FRAME_FLAGS, "aw",
|
|
880 [Define to the flags needed for the .section .eh_frame directive.])
|
|
881 fi
|
|
882
|
|
883 AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
|
|
884 [libgo_cv_c_unused_arguments],
|
|
885 [CFLAGS_hold=$CFLAGS
|
|
886 CFLAGS="$CFLAGS -Qunused-arguments"
|
|
887 AC_COMPILE_IFELSE([[int i;]],
|
|
888 [libgo_cv_c_unused_arguments=yes],
|
|
889 [libgo_cv_c_unused_arguments=no])
|
|
890 CFLAGS=$CFLAGS_hold])
|
|
891
|
|
892 AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
|
|
893 libgo_cv_as_comdat_gnu, [
|
|
894 echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
|
|
895 CFLAGS_hold=$CFLAGS
|
|
896 if test "$libgo_cv_c_unused_arguments" = yes; then
|
|
897 CFLAGS="$CFLAGS -Qunused-arguments"
|
|
898 fi
|
|
899 if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
|
|
900 libgo_cv_as_comdat_gnu=yes
|
|
901 else
|
|
902 libgo_cv_as_comdat_gnu=no
|
|
903 fi
|
|
904 CFLAGS=$CFLAGS_hold
|
|
905 ])
|
|
906 if test "x$libgo_cv_as_comdat_gnu" = xyes; then
|
|
907 AC_DEFINE(HAVE_AS_COMDAT_GAS, 1,
|
|
908 [Define if your assembler supports GNU comdat group syntax.])
|
|
909 fi
|
|
910
|
|
911 AC_CACHE_CHECK([assembler supports pc related relocs],
|
|
912 libgo_cv_as_x86_pcrel, [
|
|
913 libgo_cv_as_x86_pcrel=yes
|
|
914 echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
|
|
915 CFLAGS_hold=$CFLAGS
|
|
916 if test "$libgo_cv_c_unused_arguments" = yes; then
|
|
917 CFLAGS="$CFLAGS -Qunused-arguments"
|
|
918 fi
|
|
919 if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
|
|
920 libgo_cv_as_x86_pcrel=no
|
|
921 fi
|
|
922 CFLAGS=$CFLAGS_hold
|
|
923 ])
|
|
924 if test "x$libgo_cv_as_x86_pcrel" = xyes; then
|
|
925 AC_DEFINE(HAVE_AS_X86_PCREL, 1,
|
|
926 [Define if your assembler supports PC relative relocs.])
|
|
927 fi
|
|
928
|
|
929 AC_CACHE_CHECK([assembler supports unwind section type],
|
|
930 libgo_cv_as_x86_64_unwind_section_type, [
|
|
931 libgo_cv_as_x86_64_unwind_section_type=yes
|
|
932 echo '.section .eh_frame,"a",@unwind' > conftest.s
|
|
933 CFLAGS_hold=$CFLAGS
|
|
934 if test "$libgo_cv_c_unused_arguments" = yes; then
|
|
935 CFLAGS="$CFLAGS -Qunused-arguments"
|
|
936 fi
|
|
937 if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
|
|
938 libgo_cv_as_x86_64_unwind_section_type=no
|
|
939 fi
|
|
940 CFLAGS=$CFLAGS_hold
|
|
941 ])
|
|
942 if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then
|
|
943 AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
|
|
944 [Define if your assembler supports unwind section type.])
|
|
945 fi
|
|
946
|
|
947 AC_CACHE_CHECK([assembler supports AES instructions],
|
|
948 libgo_cv_as_x86_aes, [
|
|
949 libgo_cv_as_x86_aes=yes
|
|
950 echo 'aesenc %xmm0, %xmm1' > conftest.s
|
|
951 CFLAGS_hold=$CFLAGS
|
|
952 if test "$libgo_cv_c_unused_arguments" = yes; then
|
|
953 CFLAGS="$CFLAGS -Qunused-arguments"
|
|
954 fi
|
|
955 if $CC $CFLAGS -c conftest.s 2>&1 | grep -i error > /dev/null; then
|
|
956 libgo_cv_as_x86_aes=no
|
|
957 fi
|
|
958 CFLAGS=$CFLAGS_hold
|
|
959 ])
|
|
960 if test "x$libgo_cv_as_x86_aes" = xyes; then
|
|
961 AC_DEFINE(HAVE_AS_X86_AES, 1,
|
|
962 [Define if your assembler supports AES instructions.])
|
|
963 fi
|
|
964
|
|
965 AC_CACHE_SAVE
|
|
966
|
|
967 if test ${multilib} = yes; then
|
|
968 multilib_arg="--enable-multilib"
|
|
969 else
|
|
970 multilib_arg=
|
|
971 fi
|
|
972
|
|
973 AC_CONFIG_FILES(Makefile testsuite/Makefile)
|
|
974
|
|
975 AC_CONFIG_COMMANDS([default],
|
|
976 [if test -n "$CONFIG_FILES"; then
|
|
977 # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
|
|
978 # that multilib installs will end up installed in the correct place.
|
|
979 # The testsuite needs it for multilib-aware ABI baseline files.
|
|
980 # To work around this not being passed down from config-ml.in ->
|
|
981 # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
|
|
982 # append it here. Only modify Makefiles that have just been created.
|
|
983 #
|
|
984 # Also, get rid of this simulated-VPATH thing that automake does.
|
|
985 cat > vpsed << \_EOF
|
|
986 s!`test -f '$<' || echo '$(srcdir)/'`!!
|
|
987 _EOF
|
|
988 for i in $SUBDIRS; do
|
|
989 case $CONFIG_FILES in
|
|
990 *${i}/Makefile*)
|
|
991 #echo "Adding MULTISUBDIR to $i/Makefile"
|
|
992 sed -f vpsed $i/Makefile > tmp
|
|
993 grep '^MULTISUBDIR =' Makefile >> tmp
|
|
994 mv tmp $i/Makefile
|
|
995 ;;
|
|
996 esac
|
|
997 done
|
|
998 rm vpsed
|
|
999 fi
|
|
1000 ],
|
|
1001 [
|
|
1002 # Variables needed in config.status (file generation) which aren't already
|
|
1003 # passed by autoconf.
|
|
1004 SUBDIRS="$SUBDIRS"
|
|
1005 ])
|
|
1006
|
|
1007 AC_OUTPUT
|