~lttng/urcu/trunk

« back to all changes in this revision

Viewing changes to configure.ac

  • Committer: Mathieu Desnoyers
  • Author(s): Alexandre Montplaisir
  • Date: 2012-01-06 16:28:35 UTC
  • Revision ID: git-v1:a641253675b6005329234c0c7354b88dea7a4245
Refresh autoconf files

Use portable shell macros wherever possible.
All functionality should remain the same.

Signed-off-by: Alexandre Montplaisir <alexandre.montplaisir@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
AC_SUBST([URCU_LIBRARY_VERSION], [1:0:0])
10
10
 
11
11
AC_CONFIG_AUX_DIR([config])
 
12
AC_CONFIG_MACRO_DIR([config])
12
13
AC_CANONICAL_TARGET
13
14
AC_CANONICAL_HOST
14
15
AM_INIT_AUTOMAKE([foreign dist-bzip2 no-dist-gzip])
15
16
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
16
17
 
17
18
AC_CONFIG_SRCDIR([urcu.h])
18
 
AM_PROG_MKDIR_P
19
19
 
20
20
AC_CONFIG_HEADERS([config.h urcu/config.h])
21
21
 
22
 
# Keep at the end to do not pollute installed header.
23
22
AH_TEMPLATE([CONFIG_RCU_SMP], [Enable SMP support. With SMP support enabled, uniprocessors are also supported. With SMP support disabled, UP systems work fine, but the behavior of SMP systems is undefined.])
24
23
AH_TEMPLATE([CONFIG_RCU_HAVE_FENCE], [Defined when on a system that has memory fence instructions.])
25
24
AH_TEMPLATE([CONFIG_RCU_HAVE_FUTEX], [Defined when on a system with futex support.])
26
 
AH_TEMPLATE([CONFIG_RCU_COMPAT_ARCH], [Compatibility mode for i386 which lacks
27
 
cmpxchg instruction.])
28
 
AH_TEMPLATE([CONFIG_RCU_ARM_HAVE_DMB], [Use the dmb instruction is available for use on ARM.])
 
25
AH_TEMPLATE([CONFIG_RCU_COMPAT_ARCH], [Compatibility mode for i386 which lacks cmpxchg instruction.])
 
26
AH_TEMPLATE([CONFIG_RCU_ARM_HAVE_DMB], [Use the dmb instruction if available for use on ARM.])
29
27
 
30
28
# Checks for programs.
31
29
AC_PROG_CC
43
41
AC_CHECK_FUNCS([bzero gettimeofday munmap sched_getcpu strtoul sysconf])
44
42
 
45
43
# Find arch type
46
 
case $host_cpu in
47
 
        i386) ARCHTYPE="x86"; SUBARCHTYPE="x86compat" ;;
48
 
        i486) ARCHTYPE="x86";;
49
 
        i586) ARCHTYPE="x86";;
50
 
        i686) ARCHTYPE="x86";;
51
 
        amd64) ARCHTYPE="x86";;
52
 
        x86_64) ARCHTYPE="x86";;
53
 
        powerpc) ARCHTYPE="ppc" ;;
54
 
        ppc64) ARCHTYPE="ppc" ;;
55
 
        powerpc64) ARCHTYPE="ppc" ;;
56
 
        ppc) ARCHTYPE="ppc" ;;
57
 
        s390) ARCHTYPE="s390" ;;
58
 
        s390x) ARCHTYPE="s390" ;;
59
 
        sparc64) ARCHTYPE="sparc64" ;;
60
 
        alpha*) ARCHTYPE="alpha" ;;
61
 
        ia64) ARCHTYPE="gcc" ;;
62
 
        arm*) ARCHTYPE="arm" ;;
63
 
        *) ARCHTYPE="unknown";;
64
 
esac
65
 
 
66
 
if test "x$ARCHTYPE" = "xarm" ; then
67
 
AC_MSG_CHECKING([checking for dmb instruction])
68
 
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
69
 
]], [[
70
 
asm volatile("dmb":::"memory");
71
 
]])],[
72
 
        AC_MSG_RESULT([yes])
73
 
        AC_DEFINE([CONFIG_RCU_ARM_HAVE_DMB], [1])
74
 
 
75
 
],[
76
 
        AC_MSG_RESULT([no])
77
 
 
78
 
])
79
 
fi
 
44
AS_CASE([$host_cpu],
 
45
        [i386], [ARCHTYPE="x86" && SUBARCHTYPE="x86compat"],
 
46
        [i486], [ARCHTYPE="x86"],
 
47
        [i586], [ARCHTYPE="x86"],
 
48
        [i686], [ARCHTYPE="x86"],
 
49
        [amd64], [ARCHTYPE="x86"],
 
50
        [x86_64], [ARCHTYPE="x86"],
 
51
        [powerpc], [ARCHTYPE="ppc"],
 
52
        [ppc64], [ARCHTYPE="ppc"],
 
53
        [powerpc64], [ARCHTYPE="ppc"],
 
54
        [ppc], [ARCHTYPE="ppc"],
 
55
        [s390], [ARCHTYPE="s390"],
 
56
        [s390x], [ARCHTYPE="s390"],
 
57
        [sparc64], [ARCHTYPE="sparc64"],
 
58
        [alpha*], [ARCHTYPE="alpha"],
 
59
        [ia64], [ARCHTYPE="gcc"],
 
60
        [arm*], [ARCHTYPE="arm"],
 
61
        [ARCHTYPE="unknown"]
 
62
)
 
63
 
 
64
AC_SUBST(ARCHTYPE)
 
65
AC_SUBST(SUBARCHTYPE)
80
66
 
81
67
UATOMICSRC=urcu/uatomic/$ARCHTYPE.h
82
68
ARCHSRC=urcu/arch/$ARCHTYPE.h
83
 
if test "$ARCHTYPE" == "armv7l"; then
84
 
        CFLAGS="-mcpu=cortex-a9 -mtune=cortex-a9 -O"
85
 
fi
86
 
 
87
 
AC_SUBST(ARCHTYPE)
88
 
AC_SUBST(SUBARCHTYPE)
89
 
 
90
 
[
91
 
#if test "x$ARCHTYPE" = "xx86" -a "x$host_cpu" != "xi386" -a "x$host_cpu" != "xi486" -a "x$host_cpu" != "xi586"; then
92
 
#For now, using lock; addl compatibility mode even for i686, because the
93
 
#Pentium III is seen as a i686, but lacks mfence instruction.
94
 
#Only using fence for x86_64.
95
 
if test "x$ARCHTYPE" = "xx86" -a "x$host_cpu" != "xi386" -a "x$host_cpu" != "xi486" -a "x$host_cpu" != "xi586" -a "x$host_cpu" != "xi686"; then
96
 
]
97
 
        AC_DEFINE([CONFIG_RCU_HAVE_FENCE], [1])
98
 
[
99
 
fi
100
 
]
101
 
 
102
 
AC_MSG_CHECKING([sys_futex()])
 
69
 
 
70
AS_IF([test "x$SUBARCHTYPE" = xx86compat],[
 
71
        AC_DEFINE([CONFIG_RCU_COMPAT_ARCH], [1])
 
72
])
 
73
 
 
74
AS_IF([test "$host_cpu" = "armv7l"],[
 
75
        CFLAGS="$CFLAGS -mcpu=cortex-a9 -mtune=cortex-a9 -O1"
 
76
])
 
77
 
 
78
# ARM-specific checks
 
79
AS_IF([test "x$ARCHTYPE" = "xarm"],[
 
80
        AC_MSG_CHECKING([for dmb instruction])
 
81
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm volatile("dmb":::"memory");]])],[
 
82
                AC_MSG_RESULT([yes])
 
83
                AC_DEFINE([CONFIG_RCU_ARM_HAVE_DMB], [1])
 
84
        ],[
 
85
                AC_MSG_RESULT([no])
 
86
        ])
 
87
])
 
88
 
 
89
# x86-specific checks
 
90
AS_IF([test "x$ARCHTYPE" = "xx86"],[
 
91
        AC_MSG_CHECKING([if architecture really supports the mfence instruction])
 
92
        #For now, using lock; addl compatibility mode even for i686, because the
 
93
        #Pentium III is seen as a i686, but lacks mfence instruction.
 
94
        #Only using fence for x86_64.
 
95
        AS_IF([test "x$host_cpu" != "xi386" -a "x$host_cpu" != "xi486" -a "x$host_cpu" != "xi586" -a "x$host_cpu" != "xi686"],[
 
96
                AC_MSG_RESULT([yes])
 
97
                AC_DEFINE([CONFIG_RCU_HAVE_FENCE], [1])
 
98
        ],[
 
99
                AC_MSG_RESULT([no])
 
100
        ])
 
101
])
 
102
 
 
103
# Check if sys_futex() is available
 
104
AC_MSG_CHECKING([for sys_futex()])
103
105
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
104
 
#include <sys/syscall.h>
105
 
]], [[
106
 
#ifndef __NR_futex
107
 
#error "futexes not available"
108
 
#endif
109
 
]])],[
 
106
                #include <sys/syscall.h>
 
107
        ]],[[
 
108
                #ifndef __NR_futex
 
109
                #error "futexes not available"
 
110
                #endif
 
111
        ]])
 
112
],[
110
113
        AC_MSG_RESULT([yes])
111
114
        AC_DEFINE([CONFIG_RCU_HAVE_FUTEX], [1])
112
115
        compat_futex_test=0
113
 
 
114
116
],[
115
117
        AC_MSG_RESULT([no])
116
118
        compat_futex_test=1
117
 
 
118
119
])
119
120
 
120
 
AM_CONDITIONAL([COMPAT_FUTEX], [ test "x$compat_futex_test" = "x1" ])
121
 
 
122
 
AM_CONDITIONAL([COMPAT_ARCH], [test "x$SUBARCHTYPE" = xx86compat ])
123
 
 
124
 
[
125
 
if test "x$SUBARCHTYPE" = xx86compat; then
126
 
]
127
 
        AC_DEFINE([CONFIG_RCU_COMPAT_ARCH], [1])
128
 
[
129
 
fi
130
 
]
131
 
 
132
 
AC_ARG_ENABLE([smp-support], [  --disable-smp-support   Disable SMP support. Warning: only use this
133
 
                          on uniprocessor systems. [[default=enabled]]], [def_smp_support=$enableval], [def_smp_support="yes"])
134
 
 
135
 
[
136
 
if test "$def_smp_support" = "no"; then
137
 
        echo "SMP support disabled."
138
 
else
139
 
]
140
 
        AC_DEFINE([CONFIG_RCU_SMP], [1])
141
 
[
142
 
        echo "SMP support enabled."
143
 
fi
144
 
]
 
121
AM_CONDITIONAL([COMPAT_FUTEX], [test "x$compat_futex_test" = "x1"])
 
122
AM_CONDITIONAL([COMPAT_ARCH], [test "x$SUBARCHTYPE" = "xx86compat"])
 
123
 
 
124
# smp-support configure option
 
125
AC_ARG_ENABLE([smp-support], 
 
126
        AS_HELP_STRING([--disable-smp-support], [Disable SMP support. Warning: only use this on uniprocessor systems. [default=enabled]]),
 
127
        [def_smp_support=$enableval],
 
128
        [def_smp_support="yes"])
 
129
AS_IF([test "x$def_smp_support" = "xyes"], [AC_DEFINE([CONFIG_RCU_SMP], [1])])
 
130
 
145
131
 
146
132
# From the sched_setaffinity(2)'s man page:
147
133
# ~~~~
169
155
#  int sched_setaffinity (pid_t __pid, const cpu_set_t *__mask);
170
156
# ~~~~
171
157
 
172
 
dnl Since we define _GNU_SOURCE in the sources, must do so too in the
173
 
dnl autoconf tests, as defining _GNU_SOURCE or not exposes
174
 
dnl sched_setaffinity bits differently.
 
158
# Since we define _GNU_SOURCE in the sources, must do so too in the
 
159
# autoconf tests, as defining _GNU_SOURCE or not exposes
 
160
# sched_setaffinity bits differently.
175
161
saved_CFLAGS=$CFLAGS
176
162
CFLAGS="$CFLAGS -D_GNU_SOURCE"
177
163
 
178
164
# First check if the function is available at all.
179
 
AC_CHECK_FUNCS(
180
 
  [sched_setaffinity],
181
 
  [ # Okay, we have it.  Check if also have cpu_set_t.  If we don't,
182
 
    # then we have the first version using unsigned long, and no
183
 
    # CPU_ZERO, etc. macros.  If we do have cpu_set_t, we may have the
184
 
    # version with 2 or 3 arguments.  In that case, CPU_ZERO, etc.,
185
 
    # should also be present, but we confirm nonetheless.
186
 
 
187
 
    AC_CHECK_TYPES(
188
 
      [cpu_set_t],
189
 
      [ # We do have it.  Confirm that we have CPU_ZERO, and it actually works.
190
 
        AC_MSG_CHECKING([whether CPU_ZERO works])
191
 
        AH_TEMPLATE([HAVE_CPU_ZERO],
192
 
                    [Define to 1 if we have CPU_ZERO and if it works])
193
 
        AC_COMPILE_IFELSE(
194
 
          [AC_LANG_PROGRAM(
195
 
            [#define _GNU_SOURCE
196
 
            #include <sched.h>],
197
 
            [cpu_set_t foo; CPU_ZERO (&foo);])
198
 
          ],
199
 
          [ # Works!
200
 
            AC_DEFINE(HAVE_CPU_ZERO, 1)
201
 
            AC_MSG_RESULT([yes])
202
 
          ],
203
 
          [AC_MSG_RESULT([no])]
204
 
        )
205
 
 
206
 
        # Check how many arguments does sched_setaffinity take.
207
 
        # Should be 3 or 2.
208
 
        AC_MSG_CHECKING([how many arguments sched_setaffinity takes])
209
 
        AC_COMPILE_IFELSE(
210
 
          [AC_LANG_PROGRAM(
211
 
            [#include <sched.h>],
212
 
            [cpu_set_t foo; sched_setaffinity (0, sizeof (foo), &foo);])
213
 
          ],
214
 
          [sched_set_affinity_args=3],
215
 
          [sched_set_affinity_args=2])
216
 
        AC_DEFINE_UNQUOTED(SCHED_SETAFFINITY_ARGS, $sched_set_affinity_args,
217
 
         [Define to sched_setaffinity's number of arguments.])
218
 
        AC_MSG_RESULT([$sched_set_affinity_args])
219
 
      ],
220
 
      [ # No cpu_set_t, always 3 args.
221
 
        AC_DEFINE(SCHED_SETAFFINITY_ARGS, 3) ],
222
 
      [#include <sched.h>]
223
 
    )
224
 
  ]
225
 
)
 
165
AC_CHECK_FUNCS([sched_setaffinity],[
 
166
        # Okay, we have it.  Check if also have cpu_set_t.  If we don't,
 
167
        # then we have the first version using unsigned long, and no
 
168
        # CPU_ZERO, etc. macros.  If we do have cpu_set_t, we may have the
 
169
        # version with 2 or 3 arguments.  In that case, CPU_ZERO, etc.,
 
170
        # should also be present, but we confirm nonetheless.
 
171
 
 
172
        AC_CHECK_TYPES([cpu_set_t],[
 
173
                # We do have it.  Confirm that we have CPU_ZERO, and it actually works.
 
174
                AC_MSG_CHECKING([whether CPU_ZERO works])
 
175
                AH_TEMPLATE([HAVE_CPU_ZERO], [Defined to 1 if we have CPU_ZERO and it works])
 
176
                AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 
177
                                #define _GNU_SOURCE
 
178
                                #include <sched.h>
 
179
                        ]],[[
 
180
                                cpu_set_t foo; CPU_ZERO (&foo);
 
181
                        ]])
 
182
                ],[
 
183
                        # Works!
 
184
                        AC_DEFINE(HAVE_CPU_ZERO, 1)
 
185
                        AC_MSG_RESULT([yes])
 
186
                ],[
 
187
                        AC_MSG_RESULT([no])
 
188
                ])
 
189
 
 
190
                # Check how many arguments does sched_setaffinity take.
 
191
                # Should be 3 or 2.
 
192
                AC_MSG_CHECKING([how many arguments sched_setaffinity takes])
 
193
                AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 
194
                                #include <sched.h>
 
195
                        ]],[[
 
196
                                cpu_set_t foo;
 
197
                                sched_setaffinity (0, sizeof (foo), &foo);
 
198
                        ]])
 
199
                ],
 
200
                [sched_set_affinity_args=3],
 
201
                [sched_set_affinity_args=2])
 
202
                AC_DEFINE_UNQUOTED(SCHED_SETAFFINITY_ARGS, $sched_set_affinity_args,
 
203
                        [Defined to sched_setaffinity's number of arguments.])
 
204
                AC_MSG_RESULT([$sched_set_affinity_args])
 
205
        ],[
 
206
                # No cpu_set_t, always 3 args.
 
207
                AC_DEFINE(SCHED_SETAFFINITY_ARGS, 3)
 
208
        ],
 
209
        [#include <sched.h>])
 
210
])
226
211
 
227
212
CFLAGS=$saved_CFLAGS
228
213
 
233
218
AC_CONFIG_FILES([
234
219
        Makefile
235
220
        tests/Makefile
236
 
        liburcu-cds.pc
237
221
        liburcu.pc
238
222
        liburcu-bp.pc
 
223
        liburcu-cds.pc
239
224
        liburcu-qsbr.pc
240
225
        liburcu-mb.pc
241
226
        liburcu-signal.pc
242
227
])
243
228
AC_OUTPUT
 
229
 
 
230
# Report on selected configure options
 
231
AS_IF([test "x$def_smp_support" = "xyes"],[
 
232
        AS_ECHO("SMP support enabled.")
 
233
],[
 
234
        AS_ECHO("SMP support disabled.")
 
235
])