configure.ac 8.99 KB
Newer Older
1
2
3
dnl configure.ac
dnl Process this file with autoconf to produce a configure script.

4
AC_PREREQ([2.63])
Kyle Brenneman's avatar
Kyle Brenneman committed
5
AC_INIT([libglvnd], [1.0.0], [kbrenneman@nvidia.com])
6
7
8
9
10
11
12
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])

AC_CONFIG_AUX_DIR([bin])
AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_SYSTEM

Kyle Brenneman's avatar
Kyle Brenneman committed
13
14
15
dnl Add an --enable-debug option
AX_CHECK_ENABLE_DEBUG(no, DEBUG)

16
17
AC_USE_SYSTEM_EXTENSIONS

18
19
AM_INIT_AUTOMAKE([1.11 foreign silent-rules])
AM_SILENT_RULES([yes])
20
21
22

dnl Checks for programs.
AC_PROG_CC
23
AC_PROG_CC_C99
24
25
26
27
28
AM_PROG_AS
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_LIBTOOL
29
AC_PROG_MKDIR_P
30
AC_CHECK_PROGS([PYTHON2], [python2.7 python2 python])
31

32
33
34
35
if test "x$ac_cv_prog_cc_c99" = xno; then
        AC_MSG_ERROR([Building libglvnd requires a C99-enabled compiler])
fi

36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
AC_ARG_ENABLE([egl],
    [AS_HELP_STRING([--disable-egl],
        [Disable EGL support @<:@default=enabled@:>@])],
    [enable_egl="$enableval"],
    [enable_egl=yes]
)
AM_CONDITIONAL([ENABLE_EGL], [test "x$enable_egl" = "xyes"])

AC_ARG_ENABLE([glx],
    [AS_HELP_STRING([--disable-glx],
        [Disable GLX support @<:@default=enabled@:>@])],
    [enable_glx="$enableval"],
    [enable_glx=yes]
)
AM_CONDITIONAL([ENABLE_GLX], [test "x$enable_glx" = "xyes"])

AC_ARG_ENABLE([gles],
    [AS_HELP_STRING([--disable-gles],
54
        [Do not build the libGLES*.so libraries @<:@default=enabled@:>@])],
55
56
57
58
59
    [enable_gles="$enableval"],
    [enable_gles=yes]
)
AM_CONDITIONAL([ENABLE_GLES], [test "x$enable_gles" = "xyes"])

60
61
62
63
64
dnl
dnl Arch/platform-specific settings. Copied from mesa
dnl
AC_ARG_ENABLE([asm],
    [AS_HELP_STRING([--disable-asm],
Felix Yan's avatar
Felix Yan committed
65
        [disable assembly usage @<:@default=enabled on supported platforms@:>@])],
66
67
68
    [enable_asm="$enableval"],
    [enable_asm=yes]
)
69

70
71
72
73
74
75
76
77
78
asm_arch=""
AC_MSG_CHECKING([whether to enable assembly])
test "x$enable_asm" = xno && AC_MSG_RESULT([no])
# check for supported arches
if test "x$enable_asm" = xyes; then
    case "$host_cpu" in
    i?86)
        case "$host_os" in
        linux* | *freebsd* | dragonfly* | *netbsd*)
79
            asm_arch=x86
80
81
82
83
84
85
86
87
88
            ;;
        gnu*)
            asm_arch=x86
            ;;
        esac
        ;;
    x86_64)
        case "$host_os" in
        linux* | *freebsd* | dragonfly* | *netbsd*)
89
            asm_arch=x86_64
90
91
92
            ;;
        esac
        ;;
Rob Clark's avatar
Rob Clark committed
93
    armv7*l)
Damien Leone's avatar
Damien Leone committed
94
95
        asm_arch=armv7l
        ;;
Kyle Brenneman's avatar
Kyle Brenneman committed
96
97
98
    aarch64)
        asm_arch=aarch64
        ;;
99
100
101
    powerpc64le)
        asm_arch=ppc64le
        ;;
102
103
104
105
106
107
108
109
110
111
112
    esac

    case "$asm_arch" in
    x86)
        DEFINES="$DEFINES -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
        AC_MSG_RESULT([yes, x86])
        ;;
    x86_64)
        DEFINES="$DEFINES -DUSE_X86_64_ASM"
        AC_MSG_RESULT([yes, x86_64])
        ;;
Damien Leone's avatar
Damien Leone committed
113
114
115
116
    armv7l)
        DEFINES="$DEFINES -DUSE_ARMV7_ASM"
        AC_MSG_RESULT([yes, armv7l])
        ;;
Kyle Brenneman's avatar
Kyle Brenneman committed
117
118
119
120
    aarch64)
        DEFINES="$DEFINES -DUSE_AARCH64_ASM"
        AC_MSG_RESULT([yes, aarch64])
        ;;
121
122
123
124
    ppc64le)
        DEFINES="$DEFINES -DUSE_PPC64LE_ASM"
        AC_MSG_RESULT([yes, ppc64le])
        ;;
125
    *)
126
        AC_MSG_RESULT([no, platform '$host_cpu' not supported])
127
128
129
130
        ;;
    esac
fi

Brian Nguyen's avatar
Brian Nguyen committed
131
132
133
134
dnl
dnl mapi top-relative paths: defined here so mapi can be used elsewhere
dnl

135
dnl Checks for libraries.
136
AX_PTHREAD()
137
138
139

PKG_CHECK_MODULES([X11], [x11])
PKG_CHECK_MODULES([XEXT], [xext])
140
PKG_CHECK_MODULES([GLPROTO], [glproto])
141
142
143
144
145
146
147
148

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_TYPEOF

dnl Checks for library functions.
AC_FUNC_STRNLEN

dnl TLS detection
149
150
AC_ARG_ENABLE([tls],
    [AS_HELP_STRING([--disable-tls],
Felix Yan's avatar
Felix Yan committed
151
        [disable TLS usage @<:@default=enabled on supported platforms@:>@])],
152
153
154
155
    [enable_tls="$enableval"],
    [enable_tls=yes]
)

156
AC_MSG_CHECKING([for initial-exec TLS])
157
if test "x$enable_tls" = "xyes"; then
158
159
160
    AC_COMPILE_IFELSE([AC_LANG_SOURCE([
       __thread int foo __attribute__((tls_model("initial-exec")));
    ])],
161
    [HAVE_INIT_TLS=yes],[HAVE_INIT_TLS=no])
162
else
163
    HAVE_INIT_TLS=no
164
fi
165
166
167
168
169
170
171
172
AC_MSG_RESULT($HAVE_INIT_TLS)

# Figure out what implementation to use for the entrypoint stubs.
# This will set an automake condition, which is then used in
# src/GLdispatch/vnd-glapi/entry_files.mk.

AC_MSG_CHECKING([for entrypoint stub type])
case "x$asm_arch" in
173
174
xx86 | xx86_64)
    # For x86 and x86-64, both the TLS and TSD stubs work.
175
    if test "x$HAVE_INIT_TLS" = "xyes" ; then
176
        gldispatch_entry_type=${asm_arch}_tls
177
178
        gldispatch_use_tls=yes
    else
179
        gldispatch_entry_type=${asm_arch}_tsd
180
181
182
183
184
185
186
187
        gldispatch_use_tls=no
    fi
    ;;
xarmv7l)
    # For ARMv7, only the TSD stubs have been implemented yet.
    gldispatch_entry_type=armv7_tsd
    gldispatch_use_tls=no
    ;;
Kyle Brenneman's avatar
Kyle Brenneman committed
188
189
190
191
192
xaarch64)
    # For aarch64, only the TSD stubs have been implemented yet.
    gldispatch_entry_type=aarch64_tsd
    gldispatch_use_tls=no
    ;;
193
194
195
196
197
198
199
200
201
202
xppc64le)
    # For ppc64le, allow both the TLS and TSD stubs for now.
    if test "x$HAVE_INIT_TLS" = "xyes" ; then
        gldispatch_entry_type=ppc64le_tls
        gldispatch_use_tls=yes
    else
        gldispatch_entry_type=ppc64le_tsd
        gldispatch_use_tls=no
    fi
    ;;
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
*)
    # The C stubs will work with either TLS or TSD.
    gldispatch_entry_type=pure_c
    gldispatch_use_tls=$HAVE_INIT_TLS
    ;;
esac
AC_MSG_RESULT([$gldispatch_entry_type, TLS=$gldispatch_use_tls])

AS_IF([test "x$gldispatch_use_tls" = "xyes"],
      [AC_DEFINE([GLDISPATCH_USE_TLS], 1,
      [Define to 1 if libGLdispatch should use a TLS variable for the dispatch table.])])
AM_CONDITIONAL([GLDISPATCH_USE_TLS], [test "x$gldispatch_use_tls" = "xyes"])
AM_CONDITIONAL([GLDISPATCH_TYPE_X86_TLS], [test "x$gldispatch_entry_type" = "xx86_tls"])
AM_CONDITIONAL([GLDISPATCH_TYPE_X86_TSD], [test "x$gldispatch_entry_type" = "xx86_tsd"])
AM_CONDITIONAL([GLDISPATCH_TYPE_X86_64_TLS], [test "x$gldispatch_entry_type" = "xx86_64_tls"])
AM_CONDITIONAL([GLDISPATCH_TYPE_X86_64_TSD], [test "x$gldispatch_entry_type" = "xx86_64_tsd"])
219
220
AM_CONDITIONAL([GLDISPATCH_TYPE_PPC64LE_TLS], [test "x$gldispatch_entry_type" = "xppc64le_tls"])
AM_CONDITIONAL([GLDISPATCH_TYPE_PPC64LE_TSD], [test "x$gldispatch_entry_type" = "xppc64le_tsd"])
221
AM_CONDITIONAL([GLDISPATCH_TYPE_ARMV7_TSD], [test "x$gldispatch_entry_type" = "xarmv7_tsd"])
Kyle Brenneman's avatar
Kyle Brenneman committed
222
AM_CONDITIONAL([GLDISPATCH_TYPE_AARCH64_TSD], [test "x$gldispatch_entry_type" = "xaarch64_tsd"])
223
AM_CONDITIONAL([GLDISPATCH_TYPE_PURE_C], [test "x$gldispatch_entry_type" = "xpure_c"])
224
225


226
227
228
229
230
231
232
233
234
235
236
237
238
AC_MSG_CHECKING([for constructor attributes])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
void __attribute__ ((constructor)) foo(void)
{
}
void __attribute__ ((destructor)) bar(void)
{
}
])],
[USE_ATTRIBUTE_CONSTRUCTOR=yes],[USE_ATTRIBUTE_CONSTRUCTOR=no])
AC_MSG_RESULT($USE_ATTRIBUTE_CONSTRUCTOR)
AS_IF([test "x$USE_ATTRIBUTE_CONSTRUCTOR" = "xyes"],
      [AC_DEFINE([USE_ATTRIBUTE_CONSTRUCTOR], 1,
239
      [Define to 1 if the compiler supports constructor attributes.])])
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268

AC_MSG_CHECKING([for pthreads rwlocks])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include <pthread.h>
void foo(void)
{
    pthread_rwlock_t lock;
    pthread_rwlock_init(&lock, NULL);
}
])],
[HAVE_PTHREAD_RWLOCK_T=yes],[HAVE_PTHREAD_RWLOCK_T=no])
AC_MSG_RESULT($HAVE_PTHREAD_RWLOCK_T)
AS_IF([test "x$HAVE_PTHREAD_RWLOCK_T" = "xyes"],
      [AC_DEFINE([HAVE_PTHREAD_RWLOCK_T], 1,
      [Define to 1 if the compiler supports pthreads rwlocks.])])

AC_MSG_CHECKING([for sync intrinsics])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
int foo(int volatile *val, int oldVal, int newVal)
{
    return __sync_add_and_fetch(val, 1);
    return __sync_lock_test_and_set(val, newVal);
    return __sync_val_compare_and_swap(val, oldVal, newVal);
}
])],
[HAVE_SYNC_INTRINSICS=yes],[HAVE_SYNC_INTRINSICS=no])
AC_MSG_RESULT($HAVE_SYNC_INTRINSICS)
AS_IF([test "x$HAVE_SYNC_INTRINSICS" = "xyes"],
      [AC_DEFINE([HAVE_SYNC_INTRINSICS], 1,
269
      [Define to 1 if the compiler supports __sync intrinsic functions.])])
270

271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
AC_CHECK_FUNC(mincore, [AC_DEFINE([HAVE_MINCORE], [1],
    [Define to 1 if mincore is available.])])

AC_MSG_CHECKING([for RTLD_NOLOAD])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include <dlfcn.h>
void foo(void)
{
    (void) RTLD_NOLOAD;
}
])],
[HAVE_RTLD_NOLOAD=yes],[HAVE_RTLD_NOLOAD=no])
AC_MSG_RESULT($HAVE_RTLD_NOLOAD)
AS_IF([test "x$HAVE_RTLD_NOLOAD" = "xyes"],
      [AC_DEFINE([HAVE_RTLD_NOLOAD], 1,
      [Define to 1 if the compiler supports RTLD_NOLOAD.])])

Emil Velikov's avatar
Emil Velikov committed
288
# See if the linker supports the --no-undefined flag.
289
290
291
292
AX_CHECK_LINK_FLAG([-Xlinker --no-undefined],
      [AC_SUBST([LINKER_FLAG_NO_UNDEFINED], ["-Xlinker --no-undefined"])],
      [AC_SUBST([LINKER_FLAG_NO_UNDEFINED], [""])])

293
dnl default CFLAGS
294
CFLAGS="$CFLAGS -Wall -Werror -include config.h -fvisibility=hidden $DEFINES"
295
296

AC_CONFIG_FILES([Makefile
297
298
                 libglvnd.pc
                 include/Makefile
Brian Nguyen's avatar
Brian Nguyen committed
299
                 src/Makefile
300
301
                 src/GL/Makefile
                 src/OpenGL/Makefile
Kyle Brenneman's avatar
Kyle Brenneman committed
302
                 src/GLESv1/Makefile
Kyle Brenneman's avatar
Kyle Brenneman committed
303
                 src/GLESv2/Makefile
Brian Nguyen's avatar
Brian Nguyen committed
304
                 src/GLX/Makefile
305
                 src/EGL/Makefile
Brian Nguyen's avatar
Brian Nguyen committed
306
                 src/GLdispatch/Makefile
307
                 src/GLdispatch/vnd-glapi/Makefile
308
                 src/util/Makefile
309
                 tests/Makefile
310
                 tests/dummy/Makefile])
311
AC_OUTPUT