OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libitm/] [acinclude.m4] - Blame information for rev 737

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 737 jeremybenn
dnl ----------------------------------------------------------------------
2
dnl This whole bit snagged from libgfortran.
3
 
4
dnl Check whether the target supports __sync_*_compare_and_swap.
5
AC_DEFUN([LIBITM_CHECK_SYNC_BUILTINS], [
6
  AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
7
                 libitm_cv_have_sync_builtins, [
8
  AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
9
              libitm_cv_have_sync_builtins=yes, libitm_cv_have_sync_builtins=no)])
10
  if test $libitm_cv_have_sync_builtins = yes; then
11
    AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
12
              [Define to 1 if the target supports __sync_*_compare_and_swap])
13
  fi])
14
 
15
dnl Check whether the target supports 64-bit __sync_*_compare_and_swap.
16
AC_DEFUN([LIBITM_CHECK_64BIT_SYNC_BUILTINS], [
17
  AC_CACHE_CHECK([whether the target supports 64-bit __sync_*_compare_and_swap],
18
                 libitm_cv_have_64bit_sync_builtins, [
19
  AC_TRY_LINK([#include <stdint.h>],
20
    [uint64_t foo, bar;
21
     bar = __sync_val_compare_and_swap(&foo, 0, 1);],
22
    libitm_cv_have_64bit_sync_builtins=yes,
23
    libitm_cv_have_64bit_sync_builtins=no)])
24
    if test $libitm_cv_have_64bit_sync_builtins = yes; then
25
      AC_DEFINE(HAVE_64BIT_SYNC_BUILTINS, 1,
26
                [Define to 1 if the target supports 64-bit __sync_*_compare_and_swap])
27
  fi])
28
 
29
dnl Check whether the target supports hidden visibility.
30
AC_DEFUN([LIBITM_CHECK_ATTRIBUTE_VISIBILITY], [
31
  AC_CACHE_CHECK([whether the target supports hidden visibility],
32
                 libitm_cv_have_attribute_visibility, [
33
  save_CFLAGS="$CFLAGS"
34
  CFLAGS="$CFLAGS -Werror"
35
  AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
36
                 [], libitm_cv_have_attribute_visibility=yes,
37
                 libitm_cv_have_attribute_visibility=no)
38
  CFLAGS="$save_CFLAGS"])
39
  if test $libitm_cv_have_attribute_visibility = yes; then
40
    AC_DEFINE(HAVE_ATTRIBUTE_VISIBILITY, 1,
41
      [Define to 1 if the target supports __attribute__((visibility(...))).])
42
  fi])
43
 
44
dnl Check whether the target supports dllexport
45
AC_DEFUN([LIBITM_CHECK_ATTRIBUTE_DLLEXPORT], [
46
  AC_CACHE_CHECK([whether the target supports dllexport],
47
                 libitm_cv_have_attribute_dllexport, [
48
  save_CFLAGS="$CFLAGS"
49
  CFLAGS="$CFLAGS -Werror"
50
  AC_TRY_COMPILE([void __attribute__((dllexport)) foo(void) { }],
51
                 [], libitm_cv_have_attribute_dllexport=yes,
52
                 libitm_cv_have_attribute_dllexport=no)
53
  CFLAGS="$save_CFLAGS"])
54
  if test $libitm_cv_have_attribute_dllexport = yes; then
55
    AC_DEFINE(HAVE_ATTRIBUTE_DLLEXPORT, 1,
56
      [Define to 1 if the target supports __attribute__((dllexport)).])
57
  fi])
58
 
59
dnl Check whether the target supports symbol aliases.
60
AC_DEFUN([LIBITM_CHECK_ATTRIBUTE_ALIAS], [
61
  AC_CACHE_CHECK([whether the target supports symbol aliases],
62
                 libitm_cv_have_attribute_alias, [
63
  AC_TRY_LINK([
64
void foo(void) { }
65
extern void bar(void) __attribute__((alias("foo")));],
66
    [bar();], libitm_cv_have_attribute_alias=yes, libitm_cv_have_attribute_alias=no)])
67
  if test $libitm_cv_have_attribute_alias = yes; then
68
    AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
69
      [Define to 1 if the target supports __attribute__((alias(...))).])
70
  fi])
71
 
72
dnl Check how size_t is mangled.
73
AC_DEFUN([LIBITM_CHECK_SIZE_T_MANGLING], [
74
  AC_CACHE_CHECK([how size_t is mangled],
75
                 libitm_cv_size_t_mangling, [
76
    AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned long x;],
77
                   [libitm_cv_size_t_mangling=m], [
78
      AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned int x;],
79
                     [libitm_cv_size_t_mangling=j], [
80
        AC_TRY_COMPILE([],
81
                       [extern __SIZE_TYPE__ x; extern unsigned long long x;],
82
                       [libitm_cv_size_t_mangling=y], [
83
          AC_TRY_COMPILE([],
84
                         [extern __SIZE_TYPE__ x; extern unsigned short x;],
85
                         [libitm_cv_size_t_mangling=t],
86
                         [libitm_cv_size_t_mangling=x])
87
        ])
88
      ])
89
    ])
90
  ])
91
  if test $libitm_cv_size_t_mangling = x; then
92
    AC_MSG_ERROR([Unknown underlying type for size_t])
93
  fi
94
  AC_DEFINE_UNQUOTED(MANGLE_SIZE_T, [$libitm_cv_size_t_mangling],
95
    [Define to the letter to which size_t is mangled.])
96
])
97
 
98
dnl Check if as supports AVX instructions.
99
AC_DEFUN([LIBITM_CHECK_AS_AVX], [
100
case "${target_cpu}" in
101
i[[34567]]86 | x86_64)
102
  AC_CACHE_CHECK([if the assembler supports AVX], libitm_cv_as_avx, [
103
    AC_TRY_COMPILE([], [asm("vzeroupper");],
104
                   [libitm_cv_as_avx=yes], [libitm_cv_as_avx=no])
105
  ])
106
  if test x$libitm_cv_as_avx = xyes; then
107
    AC_DEFINE(HAVE_AS_AVX, 1, [Define to 1 if the assembler supports AVX.])
108
  fi
109
  ;;
110
esac])
111
 
112
sinclude(../libtool.m4)
113
dnl The lines below arrange for aclocal not to bring an installed
114
dnl libtool.m4 into aclocal.m4, while still arranging for automake to
115
dnl add a definition of LIBTOOL to Makefile.in.
116
ifelse(,,,[AC_SUBST(LIBTOOL)
117
AC_DEFUN([AM_PROG_LIBTOOL])
118
AC_DEFUN([AC_LIBTOOL_DLOPEN])
119
AC_DEFUN([AC_PROG_LD])
120
])
121
 
122
dnl ----------------------------------------------------------------------
123
dnl This whole bit snagged from libstdc++-v3.
124
 
125
dnl
126
dnl LIBITM_ENABLE
127
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
128
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
129
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
130
dnl
131
dnl See docs/html/17_intro/configury.html#enable for documentation.
132
dnl
133
m4_define([LIBITM_ENABLE],[dnl
134
m4_define([_g_switch],[--enable-$1])dnl
135
m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
136
 AC_ARG_ENABLE($1,_g_help,
137
  m4_bmatch([$5],
138
   [^permit ],
139
     [[
140
      case "$enableval" in
141
       m4_bpatsubst([$5],[permit ])) ;;
142
       *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
143
          dnl Idea for future:  generate a URL pointing to
144
          dnl "onlinedocs/configopts.html#whatever"
145
      esac
146
     ]],
147
   [^$],
148
     [[
149
      case "$enableval" in
150
       yes|no) ;;
151
       *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
152
      esac
153
     ]],
154
   [[$5]]),
155
  [enable_]m4_bpatsubst([$1],-,_)[=][$2])
156
m4_undefine([_g_switch])dnl
157
m4_undefine([_g_help])dnl
158
])
159
 
160
 
161
dnl
162
dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
163
dnl the native linker is in use, all variables will be defined to something
164
dnl safe (like an empty string).
165
dnl
166
dnl Defines:
167
dnl  SECTION_LDFLAGS='-Wl,--gc-sections' if possible
168
dnl  OPT_LDFLAGS='-Wl,-O1' if possible
169
dnl  LD (as a side effect of testing)
170
dnl Sets:
171
dnl  with_gnu_ld
172
dnl  libitm_ld_is_gold (possibly)
173
dnl  libitm_gnu_ld_version (possibly)
174
dnl
175
dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
176
dnl set libitm_gnu_ld_version to 12345.  Zeros cause problems.
177
dnl
178
AC_DEFUN([LIBITM_CHECK_LINKER_FEATURES], [
179
  # If we're not using GNU ld, then there's no point in even trying these
180
  # tests.  Check for that first.  We should have already tested for gld
181
  # by now (in libtool), but require it now just to be safe...
182
  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
183
  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
184
  AC_REQUIRE([AC_PROG_LD])
185
  AC_REQUIRE([AC_PROG_AWK])
186
 
187
  # The name set by libtool depends on the version of libtool.  Shame on us
188
  # for depending on an impl detail, but c'est la vie.  Older versions used
189
  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
190
  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
191
  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
192
  # set (hence we're using an older libtool), then set it.
193
  if test x${with_gnu_ld+set} != xset; then
194
    if test x${ac_cv_prog_gnu_ld+set} != xset; then
195
      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
196
      with_gnu_ld=no
197
    else
198
      with_gnu_ld=$ac_cv_prog_gnu_ld
199
    fi
200
  fi
201
 
202
  # Start by getting the version number.  I think the libtool test already
203
  # does some of this, but throws away the result.
204
  libitm_ld_is_gold=no
205
  if $LD --version 2>/dev/null | grep 'GNU gold'> /dev/null 2>&1; then
206
    libitm_ld_is_gold=yes
207
  fi
208
  changequote(,)
209
  ldver=`$LD --version 2>/dev/null |
210
         sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
211
  changequote([,])
212
  libitm_gnu_ld_version=`echo $ldver | \
213
         $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
214
 
215
  # Set --gc-sections.
216
  if test "$with_gnu_ld" = "notbroken"; then
217
    # GNU ld it is!  Joy and bunny rabbits!
218
 
219
    # All these tests are for C++; save the language and the compiler flags.
220
    # Need to do this so that g++ won't try to link in libstdc++
221
    ac_test_CFLAGS="${CFLAGS+set}"
222
    ac_save_CFLAGS="$CFLAGS"
223
    CFLAGS='-x c++  -Wl,--gc-sections'
224
 
225
    # Check for -Wl,--gc-sections
226
    # XXX This test is broken at the moment, as symbols required for linking
227
    # are now in libsupc++ (not built yet).  In addition, this test has
228
    # cored on solaris in the past.  In addition, --gc-sections doesn't
229
    # really work at the moment (keeps on discarding used sections, first
230
    # .eh_frame and now some of the glibc sections for iconv).
231
    # Bzzzzt.  Thanks for playing, maybe next time.
232
    AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
233
    AC_TRY_RUN([
234
     int main(void)
235
     {
236
       try { throw 1; }
237
       catch (...) { };
238
       return 0;
239
     }
240
    ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
241
    if test "$ac_test_CFLAGS" = set; then
242
      CFLAGS="$ac_save_CFLAGS"
243
    else
244
      # this is the suspicious part
245
      CFLAGS=''
246
    fi
247
    if test "$ac_sectionLDflags" = "yes"; then
248
      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
249
    fi
250
    AC_MSG_RESULT($ac_sectionLDflags)
251
  fi
252
 
253
  # Set linker optimization flags.
254
  if test x"$with_gnu_ld" = x"yes"; then
255
    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
256
  fi
257
 
258
  AC_SUBST(SECTION_LDFLAGS)
259
  AC_SUBST(OPT_LDFLAGS)
260
])
261
 
262
 
263
dnl
264
dnl Check if the linker used supports linker maps to clear hardware
265
dnl capabilities.  This is only supported by Sun ld at the moment.
266
dnl
267
dnl Defines:
268
dnl  HWCAP_LDFLAGS='-Wl,-M,clearcap.map' if possible
269
dnl  LD (as a side effect of testing)
270
dnl
271
AC_DEFUN([LIBITM_CHECK_LINKER_HWCAP], [
272
  test -z "$HWCAP_LDFLAGS" && HWCAP_LDFLAGS=''
273
  AC_REQUIRE([AC_PROG_LD])
274
 
275
  ac_save_LDFLAGS="$LDFLAGS"
276
  LDFLAGS="$LFLAGS -Wl,-M,$srcdir/clearcap.map"
277
 
278
  AC_MSG_CHECKING([for ld that supports -Wl,-M,mapfile])
279
  AC_TRY_LINK([], [return 0;], [ac_hwcap_ldflags=yes],[ac_hwcap_ldflags=no])
280
  if test "$ac_hwcap_ldflags" = "yes"; then
281
    HWCAP_LDFLAGS="-Wl,-M,$srcdir/clearcap.map $HWCAP_LDFLAGS"
282
  fi
283
  AC_MSG_RESULT($ac_hwcap_ldflags)
284
 
285
  LDFLAGS="$ac_save_LDFLAGS"
286
 
287
  AC_SUBST(HWCAP_LDFLAGS)
288
 
289
  AM_CONDITIONAL(HAVE_HWCAP, test $ac_hwcap_ldflags != no)
290
])
291
 
292
 
293
dnl
294
dnl Add version tags to symbols in shared library (or not), additionally
295
dnl marking other symbols as private/local (or not).
296
dnl
297
dnl --enable-symvers=style adds a version script to the linker call when
298
dnl       creating the shared library.  The choice of version script is
299
dnl       controlled by 'style'.
300
dnl --disable-symvers does not.
301
dnl  +  Usage:  LIBITM_ENABLE_SYMVERS[(DEFAULT)]
302
dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
303
dnl       choose a default style based on linker characteristics.  Passing
304
dnl       'no' disables versioning.
305
dnl
306
AC_DEFUN([LIBITM_ENABLE_SYMVERS], [
307
 
308
LIBITM_ENABLE(symvers,yes,[=STYLE],
309
  [enables symbol versioning of the shared library],
310
  [permit yes|no|gnu*|sun])
311
 
312
# If we never went through the LIBITM_CHECK_LINKER_FEATURES macro, then we
313
# don't know enough about $LD to do tricks...
314
AC_REQUIRE([LIBITM_CHECK_LINKER_FEATURES])
315
 
316
# Turn a 'yes' into a suitable default.
317
if test x$enable_symvers = xyes ; then
318
  # FIXME  The following test is too strict, in theory.
319
  if test $enable_shared = no || test "x$LD" = x; then
320
    enable_symvers=no
321
  else
322
    if test $with_gnu_ld = yes ; then
323
      enable_symvers=gnu
324
    else
325
      case ${target_os} in
326
        # Sun symbol versioning exists since Solaris 2.5.
327
        solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
328
          enable_symvers=sun ;;
329
        *)
330
          enable_symvers=no ;;
331
      esac
332
    fi
333
  fi
334
fi
335
 
336
# Check if 'sun' was requested on non-Solaris 2 platforms.
337
if test x$enable_symvers = xsun ; then
338
  case ${target_os} in
339
    solaris2*)
340
      # All fine.
341
      ;;
342
    *)
343
      # Unlikely to work.
344
      AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
345
      AC_MSG_WARN([=== you are not targetting Solaris 2.])
346
      AC_MSG_WARN([=== Symbol versioning will be disabled.])
347
      enable_symvers=no
348
      ;;
349
  esac
350
fi
351
 
352
# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
353
if test $enable_symvers != no; then
354
  AC_MSG_CHECKING([for shared libgcc])
355
  ac_save_CFLAGS="$CFLAGS"
356
  CFLAGS=' -lgcc_s'
357
  AC_TRY_LINK(, [return 0;], libitm_shared_libgcc=yes, libitm_shared_libgcc=no)
358
  CFLAGS="$ac_save_CFLAGS"
359
  if test $libitm_shared_libgcc = no; then
360
    cat > conftest.c <<EOF
361
int main (void) { return 0; }
362
EOF
363
changequote(,)dnl
364
    libitm_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
365
                             -shared -shared-libgcc -o conftest.so \
366
                             conftest.c -v 2>&1 >/dev/null \
367
                             | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
368
changequote([,])dnl
369
    rm -f conftest.c conftest.so
370
    if test x${libitm_libgcc_s_suffix+set} = xset; then
371
      CFLAGS=" -lgcc_s$libitm_libgcc_s_suffix"
372
      AC_TRY_LINK(, [return 0;], libitm_shared_libgcc=yes)
373
      CFLAGS="$ac_save_CFLAGS"
374
    fi
375
  fi
376
  AC_MSG_RESULT($libitm_shared_libgcc)
377
fi
378
 
379
# For GNU ld, we need at least this version.  The format is described in
380
# LIBITM_CHECK_LINKER_FEATURES above.
381
libitm_min_gnu_ld_version=21400
382
# XXXXXXXXXXX libitm_gnu_ld_version=21390
383
 
384
# Check to see if unspecified "yes" value can win, given results above.
385
# Change "yes" into either "no" or a style name.
386
if test $enable_symvers != no && test $libitm_shared_libgcc = yes; then
387
  if test $with_gnu_ld = yes; then
388
    if test $libitm_gnu_ld_version -ge $libitm_min_gnu_ld_version ; then
389
      enable_symvers=gnu
390
    elif test $libitm_ld_is_gold = yes ; then
391
      enable_symvers=gnu
392
    else
393
      # The right tools, the right setup, but too old.  Fallbacks?
394
      AC_MSG_WARN(=== Linker version $libitm_gnu_ld_version is too old for)
395
      AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
396
      AC_MSG_WARN(=== You would need to upgrade your binutils to version)
397
      AC_MSG_WARN(=== $libitm_min_gnu_ld_version or later and rebuild GCC.)
398
      if test $libitm_gnu_ld_version -ge 21200 ; then
399
        # Globbing fix is present, proper block support is not.
400
        dnl AC_MSG_WARN([=== Dude, you are soooo close.  Maybe we can fake it.])
401
        dnl enable_symvers=???
402
        AC_MSG_WARN([=== Symbol versioning will be disabled.])
403
        enable_symvers=no
404
      else
405
        # 2.11 or older.
406
        AC_MSG_WARN([=== Symbol versioning will be disabled.])
407
        enable_symvers=no
408
      fi
409
    fi
410
  elif test $enable_symvers = sun; then
411
    : All interesting versions of Sun ld support sun style symbol versioning.
412
  else
413
    # just fail for now
414
    AC_MSG_WARN([=== You have requested some kind of symbol versioning, but])
415
    AC_MSG_WARN([=== either you are not using a supported linker, or you are])
416
    AC_MSG_WARN([=== not building a shared libgcc_s (which is required).])
417
    AC_MSG_WARN([=== Symbol versioning will be disabled.])
418
    enable_symvers=no
419
  fi
420
fi
421
 
422
AM_CONDITIONAL(LIBITM_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
423
AM_CONDITIONAL(LIBITM_BUILD_VERSIONED_SHLIB_GNU, test $enable_symvers = gnu)
424
AM_CONDITIONAL(LIBITM_BUILD_VERSIONED_SHLIB_SUN, test $enable_symvers = sun)
425
AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
426
])

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.