Change CFLAGS order for PPC and ARM configure tests
[profile/ivi/pixman.git] / configure.ac
1 dnl  Copyright 2005 Red Hat, Inc.
2 dnl 
3 dnl  Permission to use, copy, modify, distribute, and sell this software and its
4 dnl  documentation for any purpose is hereby granted without fee, provided that
5 dnl  the above copyright notice appear in all copies and that both that
6 dnl  copyright notice and this permission notice appear in supporting
7 dnl  documentation, and that the name of Red Hat not be used in
8 dnl  advertising or publicity pertaining to distribution of the software without
9 dnl  specific, written prior permission.  Red Hat makes no
10 dnl  representations about the suitability of this software for any purpose.  It
11 dnl  is provided "as is" without express or implied warranty.
12 dnl 
13 dnl  RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
14 dnl  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
15 dnl  EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
16 dnl  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
17 dnl  DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 dnl  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 dnl  PERFORMANCE OF THIS SOFTWARE.
20 dnl
21 dnl Process this file with autoconf to create configure.
22
23 AC_PREREQ([2.57])
24
25 #   Pixman versioning scheme
26 #
27 #   - The version in git has an odd MICRO version number
28 #
29 #   - Released versions both development and stable have an even MICRO 
30 #     version number
31 #
32 #   - Released development versions have an odd MINOR number
33 #
34 #   - Released stable versions have an even MINOR number
35 #
36 #   - Versions that break ABI must have a new MAJOR number
37 #
38 #   - If you break the ABI, then at least this must be done:
39 #
40 #        - increment MAJOR
41 #
42 #        - In the first development release where you break ABI, find
43 #          all instances of "pixman-n" and change them to pixman-(n+1)
44 #
45 #          This needs to be done at least in 
46 #                    configure.ac
47 #                    all Makefile.am's
48 #                    pixman-n.pc.in
49 #
50 #      This ensures that binary incompatible versions can be installed
51 #      in parallel.  See http://www106.pair.com/rhp/parallel.html for
52 #      more information
53 #
54
55 m4_define([pixman_major], 0)
56 m4_define([pixman_minor], 16)
57 m4_define([pixman_micro], 1)
58
59 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
60
61 AC_INIT(pixman, pixman_version, "sandmann@daimi.au.dk", pixman)
62 AM_INIT_AUTOMAKE([dist-bzip2])
63
64 AM_CONFIG_HEADER(config.h)
65
66 AC_CANONICAL_HOST
67
68 test_CFLAGS=${CFLAGS+set} # We may override autoconf default CFLAGS.
69
70 AC_PROG_CC
71 AC_PROG_LIBTOOL
72 AC_CHECK_FUNCS([getisax])
73 AC_C_BIGENDIAN
74 AC_C_INLINE
75
76 # Checks for Sun Studio compilers
77 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
78 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
79
80 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
81 # if we're using Sun Studio and neither the user nor a config.site
82 # has set CFLAGS.
83 if test $SUNCC = yes &&                 \
84    test "$test_CFLAGS" == "" &&         \
85    test "$CFLAGS" = "-g"
86 then
87   CFLAGS="-O -g"
88 fi
89
90
91 # We ignore pixman_major in the version here because the major version should
92 # always be encoded in the actual library name. Ie., the soname is:
93 #
94 #      pixman-$(pixman_major).0.minor.micro
95 #
96 m4_define([lt_current], [pixman_minor])
97 m4_define([lt_revision], [pixman_micro])
98 m4_define([lt_age], [pixman_minor])
99
100 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
101
102 PIXMAN_VERSION_MAJOR=pixman_major()
103 AC_SUBST(PIXMAN_VERSION_MAJOR)
104 PIXMAN_VERSION_MINOR=pixman_minor()
105 AC_SUBST(PIXMAN_VERSION_MINOR)
106 PIXMAN_VERSION_MICRO=pixman_micro()
107 AC_SUBST(PIXMAN_VERSION_MICRO)
108
109 AC_SUBST(LT_VERSION_INFO)
110
111 # Check for dependencies
112 #PKG_CHECK_MODULES(DEP, x11)
113
114 changequote(,)dnl
115 if test "x$GCC" = "xyes"; then
116
117   case " $CFLAGS " in
118   *[\ \ ]-Wall[\ \      ]*) ;;
119   *) CFLAGS="$CFLAGS -Wall" ;;
120   esac 
121
122   case " $CFLAGS " in
123   *[\ \ ]-fno-strict-aliasing[\ \       ]*) ;;
124   *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
125   esac
126
127 fi changequote([,])dnl
128
129 AC_PATH_PROG(PERL, perl, no)
130 if test "x$PERL" = xno; then
131     AC_MSG_ERROR([Perl is required to build pixman.])
132 fi
133 AC_SUBST(PERL)
134
135 dnl =========================================================================
136 dnl -fvisibility stuff
137
138 have_gcc4=no
139 AC_MSG_CHECKING(for -fvisibility)
140 AC_COMPILE_IFELSE([
141 #if defined(__GNUC__) && (__GNUC__ >= 4)
142 #else
143 error Need GCC 4.0 for visibility
144 #endif
145 int main () { return 0; } 
146 ], have_gcc4=yes)
147
148 if test "x$have_gcc4" = "xyes"; then
149    CFLAGS="$CFLAGS -fvisibility=hidden"
150 fi
151 AC_MSG_RESULT($have_gcc4)
152
153 have_sunstudio8=no
154 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
155 AC_COMPILE_IFELSE([
156 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
157 #else
158 error Need Sun Studio 8 for visibility
159 #endif
160 int main () { return 0; } 
161 ], have_sunstudio8=yes)
162
163 if test "x$have_sunstudio8" = "xyes"; then
164    CFLAGS="$CFLAGS -xldscope=hidden"
165 fi
166 AC_MSG_RESULT($have_sunstudio8)
167
168 dnl ===========================================================================
169 dnl Check for MMX
170
171 if test "x$MMX_CFLAGS" = "x" ; then
172    if test "x$SUNCC" = "xyes"; then
173       # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
174       # but if we're building 64-bit, mmx & sse support is on by default and
175       # -xarch=sse throws an error instead
176       if test "$AMD64_ABI" = "no" ; then
177          MMX_CFLAGS="-xarch=sse"
178       fi
179    else
180       MMX_CFLAGS="-mmmx -Winline"
181    fi
182 fi
183
184 have_mmx_intrinsics=no
185 AC_MSG_CHECKING(whether to use MMX intrinsics)
186 xserver_save_CFLAGS=$CFLAGS
187 CFLAGS="$MMX_CFLAGS $CFLAGS"
188 AC_COMPILE_IFELSE([
189 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
190 error "Need GCC >= 3.4 for MMX intrinsics"
191 #endif
192 #include <mmintrin.h>
193 int main () {
194     __m64 v = _mm_cvtsi32_si64 (1);
195     return _mm_cvtsi64_si32 (v);
196 }], have_mmx_intrinsics=yes)
197 CFLAGS=$xserver_save_CFLAGS
198
199 AC_ARG_ENABLE(mmx,
200    [AC_HELP_STRING([--disable-mmx],
201                    [disable MMX fast paths])],
202    [enable_mmx=$enableval], [enable_mmx=auto])
203
204 if test $enable_mmx = no ; then
205    have_mmx_intrinsics=disabled
206 fi
207
208 if test $have_mmx_intrinsics = yes ; then
209    AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
210 else
211    MMX_CFLAGS=
212 fi
213
214 AC_MSG_RESULT($have_mmx_intrinsics)
215 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
216    AC_MSG_ERROR([MMX intrinsics not detected])
217 fi
218
219 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
220
221 dnl ===========================================================================
222 dnl Check for SSE2
223
224 if test "x$SSE2_CFLAGS" = "x" ; then
225    if test "x$SUNCC" = "xyes"; then
226       # SSE2 is enabled by default in the Sun Studio 64-bit environment
227       if test "$AMD64_ABI" = "no" ; then
228          SSE2_CFLAGS="-xarch=sse2"
229       fi
230    else
231       SSE2_CFLAGS="-mmmx -msse2 -Winline"
232    fi
233 fi
234
235 have_sse2_intrinsics=no
236 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
237 xserver_save_CFLAGS=$CFLAGS
238 CFLAGS="$SSE2_CFLAGS $CFLAGS"
239
240 AC_COMPILE_IFELSE([
241 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
242 #   if !defined(__amd64__) && !defined(__x86_64__)
243 #      error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
244 #   endif
245 #endif
246 #include <mmintrin.h>
247 #include <xmmintrin.h>
248 #include <emmintrin.h>
249 int main () {
250     __m128i a, b, c;
251         c = _mm_xor_si128 (a, b);
252     return 0;
253 }], have_sse2_intrinsics=yes)
254 CFLAGS=$xserver_save_CFLAGS
255
256 AC_ARG_ENABLE(sse2,
257    [AC_HELP_STRING([--disable-sse2],
258                    [disable SSE2 fast paths])],
259    [enable_sse2=$enableval], [enable_sse2=auto])
260
261 if test $enable_sse2 = no ; then
262    have_sse2_intrinsics=disabled
263 fi
264
265 if test $have_sse2_intrinsics = yes ; then
266    AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
267 fi
268
269 AC_MSG_RESULT($have_sse2_intrinsics)
270 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
271    AC_MSG_ERROR([SSE2 intrinsics not detected])
272 fi
273
274 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
275
276 dnl ===========================================================================
277 dnl Other special flags needed when building code using MMX or SSE instructions
278 case $host_os in
279    solaris*)
280       # When building 32-bit binaries, apply a mapfile to ensure that the
281       # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
282       # since they check at runtime before using those instructions.
283       # Not all linkers grok the mapfile format so we check for that first.
284       if test "$AMD64_ABI" = "no" ; then
285          use_hwcap_mapfile=no
286          AC_MSG_CHECKING(whether to use a hardware capability map file)
287          hwcap_save_LDFLAGS="$LDFLAGS"
288          HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
289          LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
290          AC_LINK_IFELSE([int main() { return 0; }],
291                         use_hwcap_mapfile=yes,
292                         HWCAP_LDFLAGS="")
293          LDFLAGS="$hwcap_save_LDFLAGS"
294          AC_MSG_RESULT($use_hwcap_mapfile)
295       fi
296       if test "x$MMX_LDFLAGS" = "x" ; then
297          MMX_LDFLAGS="$HWCAP_LDFLAGS"
298       fi
299       if test "x$SSE2_LDFLAGS" = "x" ; then
300          SSE2_LDFLAGS="$HWCAP_LDFLAGS"
301       fi
302       ;;
303 esac
304
305 AC_SUBST(MMX_CFLAGS)
306 AC_SUBST(MMX_LDFLAGS)
307 AC_SUBST(SSE2_CFLAGS)
308 AC_SUBST(SSE2_LDFLAGS)
309
310 dnl ===========================================================================
311 dnl Check for VMX/Altivec
312 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
313     VMX_CFLAGS="-faltivec"
314 else
315     VMX_CFLAGS="-maltivec -mabi=altivec"
316 fi
317
318 have_vmx_intrinsics=no
319 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
320 xserver_save_CFLAGS=$CFLAGS
321 CFLAGS="$VMX_CFLAGS $CFLAGS"
322 AC_COMPILE_IFELSE([
323 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
324 error "Need GCC >= 3.4 for sane altivec support"
325 #endif
326 #include <altivec.h>
327 int main () {
328     vector unsigned int v = vec_splat_u32 (1);
329     v = vec_sub (v, v);
330     return 0;
331 }], have_vmx_intrinsics=yes)
332 CFLAGS=$xserver_save_CFLAGS
333
334 AC_ARG_ENABLE(vmx,
335    [AC_HELP_STRING([--disable-vmx],
336                    [disable VMX fast paths])],
337    [enable_vmx=$enableval], [enable_vmx=auto])
338
339 if test $enable_vmx = no ; then
340    have_vmx_intrinsics=disabled
341 fi
342
343 if test $have_vmx_intrinsics = yes ; then
344    AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
345 else
346    VMX_CFLAGS=
347 fi
348
349 AC_MSG_RESULT($have_vmx_intrinsics)
350 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
351    AC_MSG_ERROR([VMX intrinsics not detected])
352 fi
353
354 AC_SUBST(VMX_CFLAGS)
355
356 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
357
358 dnl ===========================================================================
359 dnl Check for ARM SIMD instructions
360 ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
361
362 have_arm_simd=no
363 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
364 xserver_save_CFLAGS=$CFLAGS
365 CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
366 AC_COMPILE_IFELSE([
367 int main () {
368     asm("uqadd8 r1, r1, r2");
369     return 0;
370 }], have_arm_simd=yes)
371 CFLAGS=$xserver_save_CFLAGS
372
373 AC_ARG_ENABLE(arm-simd,
374    [AC_HELP_STRING([--disable-arm-simd],
375                    [disable ARM SIMD fast paths])],
376    [enable_arm_simd=$enableval], [enable_arm_simd=auto])
377
378 if test $enable_arm_simd = no ; then
379    have_arm_simd=disabled
380 fi
381
382 if test $have_arm_simd = yes ; then
383    AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
384 else
385    ARM_SIMD_CFLAGS=
386 fi
387
388 AC_MSG_RESULT($have_arm_simd)
389 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
390    AC_MSG_ERROR([ARM SIMD intrinsics not detected])
391 fi
392
393 AC_SUBST(ARM_SIMD_CFLAGS)
394
395 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
396
397 dnl ==========================================================================
398 dnl Check for ARM NEON instructions
399 ARM_NEON_CFLAGS="-mfpu=neon -mcpu=cortex-a8"
400
401 have_arm_neon=no
402 AC_MSG_CHECKING(whether to use ARM NEON)
403 xserver_save_CFLAGS=$CFLAGS
404 CFLAGS="$ARM_NEON_CFLAGS $CFLAGS"
405 AC_COMPILE_IFELSE([
406 #include <arm_neon.h>
407 int main () {
408     uint8x8_t neon_test=vmov_n_u8(0);
409     return 0;
410 }], have_arm_neon=yes)
411 CFLAGS=$xserver_save_CFLAGS
412
413 AC_ARG_ENABLE(arm-neon,
414    [AC_HELP_STRING([--disable-arm-neon],
415                    [disable ARM NEON fast paths])],
416    [enable_arm_neon=$enableval], [enable_arm_neon=auto])
417
418 if test $enable_arm_neon = no ; then
419    have_arm_neon=disabled
420 fi
421
422 if test $have_arm_neon = yes ; then
423    AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
424 else
425    ARM_NEON_CFLAGS=
426 fi
427
428 AC_SUBST(ARM_NEON_CFLAGS)
429
430 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
431
432 AC_MSG_RESULT($have_arm_neon)
433 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
434    AC_MSG_ERROR([ARM NEON intrinsics not detected])
435 fi
436
437 dnl =========================================================================================
438 dnl Check for GNU-style inline assembly support
439
440 have_gcc_inline_asm=no
441 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
442 AC_COMPILE_IFELSE([
443 int main () {
444     /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
445         asm volatile ( "\tnop\n" : : : "cc", "memory" );
446     return 0;
447 }], have_gcc_inline_asm=yes)
448
449 AC_ARG_ENABLE(gcc-inline-asm,
450    [AC_HELP_STRING([--disable-gcc-inline-asm],
451                    [disable GNU-style inline assembler])],
452    [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
453
454 if test $enable_gcc_inline_asm = no ; then
455    have_gcc_inline_asm=disabled
456 fi
457
458 if test $have_gcc_inline_asm = yes ; then
459    AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
460 fi
461
462 AC_MSG_RESULT($have_gcc_inline_asm)
463 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
464    AC_MSG_ERROR([GNU-style inline assembler not detected])
465 fi
466
467 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
468
469 dnl ==============================================
470 dnl Timers
471
472 AC_ARG_ENABLE(timers,
473    [AC_HELP_STRING([--enable-timers],
474                    [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
475    [enable_timers=$enableval], [enable_timers=no])
476
477 if test $enable_timers = yes ; then 
478    AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
479 fi
480 AC_SUBST(PIXMAN_TIMERS)
481
482 dnl ===================================
483 dnl GTK+
484
485 AC_ARG_ENABLE(gtk,
486    [AC_HELP_STRING([--enable-gtk],
487                    [enable tests using GTK+ [default=auto]])],
488    [enable_gtk=$enableval], [enable_gtk=auto])
489
490 PKG_PROG_PKG_CONFIG
491 if test $enable_gtk = auto ; then
492    PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
493 fi
494 if test $enable_gtk = yes ; then
495    PKG_CHECK_MODULES(GTK, [gtk+-2.0])
496 fi
497
498 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
499
500 AC_SUBST(GTK_CFLAGS)
501 AC_SUBST(GTK_LIBS)
502 AC_SUBST(DEP_CFLAGS)
503 AC_SUBST(DEP_LIBS)
504
505 dnl =====================================
506 dnl posix_memalign 
507
508 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
509 if test x$have_posix_memalign = xyes; then
510    AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
511 fi
512
513 AC_OUTPUT([pixman-1.pc
514            pixman-1-uninstalled.pc
515            Makefile
516            pixman/Makefile
517            pixman/pixman-version.h
518            test/Makefile])