Speed up bilinear interpolation.
[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], 17)
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([foreign dist-bzip2])
63
64 # Suppress verbose compile lines
65 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
66
67 AM_CONFIG_HEADER(config.h)
68
69 AC_CANONICAL_HOST
70
71 test_CFLAGS=${CFLAGS+set} # We may override autoconf default CFLAGS.
72
73 AC_PROG_CC
74 AC_PROG_LIBTOOL
75 AC_CHECK_FUNCS([getisax])
76 AC_C_BIGENDIAN
77 AC_C_INLINE
78
79 AC_CHECK_SIZEOF(long)
80
81 # Checks for Sun Studio compilers
82 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
83 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
84
85 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
86 # if we're using Sun Studio and neither the user nor a config.site
87 # has set CFLAGS.
88 if test $SUNCC = yes &&                 \
89    test "$test_CFLAGS" == "" &&         \
90    test "$CFLAGS" = "-g"
91 then
92   CFLAGS="-O -g"
93 fi
94
95 CFLAGS="$CFLAGS -DPIXMAN_DISABLE_DEPRECATED -DPIXMAN_INTERNAL_API"
96
97
98 # We ignore pixman_major in the version here because the major version should
99 # always be encoded in the actual library name. Ie., the soname is:
100 #
101 #      pixman-$(pixman_major).0.minor.micro
102 #
103 m4_define([lt_current], [pixman_minor])
104 m4_define([lt_revision], [pixman_micro])
105 m4_define([lt_age], [pixman_minor])
106
107 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
108
109 PIXMAN_VERSION_MAJOR=pixman_major()
110 AC_SUBST(PIXMAN_VERSION_MAJOR)
111 PIXMAN_VERSION_MINOR=pixman_minor()
112 AC_SUBST(PIXMAN_VERSION_MINOR)
113 PIXMAN_VERSION_MICRO=pixman_micro()
114 AC_SUBST(PIXMAN_VERSION_MICRO)
115
116 AC_SUBST(LT_VERSION_INFO)
117
118 # Check for dependencies
119 #PKG_CHECK_MODULES(DEP, x11)
120
121 changequote(,)dnl
122 if test "x$GCC" = "xyes"; then
123
124   case " $CFLAGS " in
125   *[\ \ ]-Wall[\ \      ]*) ;;
126   *) CFLAGS="$CFLAGS -Wall" ;;
127   esac 
128
129   case " $CFLAGS " in
130   *[\ \ ]-fno-strict-aliasing[\ \       ]*) ;;
131   *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
132   esac
133
134 fi changequote([,])dnl
135
136 AC_PATH_PROG(PERL, perl, no)
137 if test "x$PERL" = xno; then
138     AC_MSG_ERROR([Perl is required to build pixman.])
139 fi
140 AC_SUBST(PERL)
141
142 dnl =========================================================================
143 dnl -fvisibility stuff
144
145 have_gcc4=no
146 AC_MSG_CHECKING(for -fvisibility)
147 AC_COMPILE_IFELSE([
148 #if defined(__GNUC__) && (__GNUC__ >= 4)
149 #else
150 error Need GCC 4.0 for visibility
151 #endif
152 int main () { return 0; } 
153 ], have_gcc4=yes)
154
155 if test "x$have_gcc4" = "xyes"; then
156    CFLAGS="$CFLAGS -fvisibility=hidden"
157 fi
158 AC_MSG_RESULT($have_gcc4)
159
160 have_sunstudio8=no
161 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
162 AC_COMPILE_IFELSE([
163 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
164 #else
165 error Need Sun Studio 8 for visibility
166 #endif
167 int main () { return 0; } 
168 ], have_sunstudio8=yes)
169
170 if test "x$have_sunstudio8" = "xyes"; then
171    CFLAGS="$CFLAGS -xldscope=hidden"
172 fi
173 AC_MSG_RESULT($have_sunstudio8)
174
175 dnl ===========================================================================
176 dnl Check for MMX
177
178 if test "x$MMX_CFLAGS" = "x" ; then
179    if test "x$SUNCC" = "xyes"; then
180       # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
181       # but if we're building 64-bit, mmx & sse support is on by default and
182       # -xarch=sse throws an error instead
183       if test "$AMD64_ABI" = "no" ; then
184          MMX_CFLAGS="-xarch=sse"
185       fi
186    else
187       MMX_CFLAGS="-mmmx -Winline"
188    fi
189 fi
190
191 have_mmx_intrinsics=no
192 AC_MSG_CHECKING(whether to use MMX intrinsics)
193 xserver_save_CFLAGS=$CFLAGS
194 CFLAGS="$MMX_CFLAGS $CFLAGS"
195 AC_COMPILE_IFELSE([
196 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
197 error "Need GCC >= 3.4 for MMX intrinsics"
198 #endif
199 #include <mmintrin.h>
200 int main () {
201     __m64 v = _mm_cvtsi32_si64 (1);
202     return _mm_cvtsi64_si32 (v);
203 }], have_mmx_intrinsics=yes)
204 CFLAGS=$xserver_save_CFLAGS
205
206 AC_ARG_ENABLE(mmx,
207    [AC_HELP_STRING([--disable-mmx],
208                    [disable MMX fast paths])],
209    [enable_mmx=$enableval], [enable_mmx=auto])
210
211 if test $enable_mmx = no ; then
212    have_mmx_intrinsics=disabled
213 fi
214
215 if test $have_mmx_intrinsics = yes ; then
216    AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
217 else
218    MMX_CFLAGS=
219 fi
220
221 AC_MSG_RESULT($have_mmx_intrinsics)
222 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
223    AC_MSG_ERROR([MMX intrinsics not detected])
224 fi
225
226 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
227
228 dnl ===========================================================================
229 dnl Check for SSE2
230
231 if test "x$SSE2_CFLAGS" = "x" ; then
232    if test "x$SUNCC" = "xyes"; then
233       # SSE2 is enabled by default in the Sun Studio 64-bit environment
234       if test "$AMD64_ABI" = "no" ; then
235          SSE2_CFLAGS="-xarch=sse2"
236       fi
237    else
238       SSE2_CFLAGS="-mmmx -msse2 -Winline"
239    fi
240 fi
241
242 have_sse2_intrinsics=no
243 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
244 xserver_save_CFLAGS=$CFLAGS
245 CFLAGS="$SSE2_CFLAGS $CFLAGS"
246
247 AC_COMPILE_IFELSE([
248 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
249 #   if !defined(__amd64__) && !defined(__x86_64__)
250 #      error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
251 #   endif
252 #endif
253 #include <mmintrin.h>
254 #include <xmmintrin.h>
255 #include <emmintrin.h>
256 int main () {
257     __m128i a, b, c;
258         c = _mm_xor_si128 (a, b);
259     return 0;
260 }], have_sse2_intrinsics=yes)
261 CFLAGS=$xserver_save_CFLAGS
262
263 AC_ARG_ENABLE(sse2,
264    [AC_HELP_STRING([--disable-sse2],
265                    [disable SSE2 fast paths])],
266    [enable_sse2=$enableval], [enable_sse2=auto])
267
268 if test $enable_sse2 = no ; then
269    have_sse2_intrinsics=disabled
270 fi
271
272 if test $have_sse2_intrinsics = yes ; then
273    AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
274 fi
275
276 AC_MSG_RESULT($have_sse2_intrinsics)
277 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
278    AC_MSG_ERROR([SSE2 intrinsics not detected])
279 fi
280
281 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
282
283 dnl ===========================================================================
284 dnl Other special flags needed when building code using MMX or SSE instructions
285 case $host_os in
286    solaris*)
287       # When building 32-bit binaries, apply a mapfile to ensure that the
288       # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
289       # since they check at runtime before using those instructions.
290       # Not all linkers grok the mapfile format so we check for that first.
291       if test "$AMD64_ABI" = "no" ; then
292          use_hwcap_mapfile=no
293          AC_MSG_CHECKING(whether to use a hardware capability map file)
294          hwcap_save_LDFLAGS="$LDFLAGS"
295          HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
296          LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
297          AC_LINK_IFELSE([int main() { return 0; }],
298                         use_hwcap_mapfile=yes,
299                         HWCAP_LDFLAGS="")
300          LDFLAGS="$hwcap_save_LDFLAGS"
301          AC_MSG_RESULT($use_hwcap_mapfile)
302       fi
303       if test "x$MMX_LDFLAGS" = "x" ; then
304          MMX_LDFLAGS="$HWCAP_LDFLAGS"
305       fi
306       if test "x$SSE2_LDFLAGS" = "x" ; then
307          SSE2_LDFLAGS="$HWCAP_LDFLAGS"
308       fi
309       ;;
310 esac
311
312 AC_SUBST(MMX_CFLAGS)
313 AC_SUBST(MMX_LDFLAGS)
314 AC_SUBST(SSE2_CFLAGS)
315 AC_SUBST(SSE2_LDFLAGS)
316
317 dnl ===========================================================================
318 dnl Check for VMX/Altivec
319 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
320     VMX_CFLAGS="-faltivec"
321 else
322     VMX_CFLAGS="-maltivec -mabi=altivec"
323 fi
324
325 have_vmx_intrinsics=no
326 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
327 xserver_save_CFLAGS=$CFLAGS
328 CFLAGS="$VMX_CFLAGS $CFLAGS"
329 AC_COMPILE_IFELSE([
330 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
331 error "Need GCC >= 3.4 for sane altivec support"
332 #endif
333 #include <altivec.h>
334 int main () {
335     vector unsigned int v = vec_splat_u32 (1);
336     v = vec_sub (v, v);
337     return 0;
338 }], have_vmx_intrinsics=yes)
339 CFLAGS=$xserver_save_CFLAGS
340
341 AC_ARG_ENABLE(vmx,
342    [AC_HELP_STRING([--disable-vmx],
343                    [disable VMX fast paths])],
344    [enable_vmx=$enableval], [enable_vmx=auto])
345
346 if test $enable_vmx = no ; then
347    have_vmx_intrinsics=disabled
348 fi
349
350 if test $have_vmx_intrinsics = yes ; then
351    AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
352 else
353    VMX_CFLAGS=
354 fi
355
356 AC_MSG_RESULT($have_vmx_intrinsics)
357 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
358    AC_MSG_ERROR([VMX intrinsics not detected])
359 fi
360
361 AC_SUBST(VMX_CFLAGS)
362
363 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
364
365 dnl ===========================================================================
366 dnl Check for ARM SIMD instructions
367 ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
368
369 have_arm_simd=no
370 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
371 xserver_save_CFLAGS=$CFLAGS
372 CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
373 AC_COMPILE_IFELSE([
374 int main () {
375     asm("uqadd8 r1, r1, r2");
376     return 0;
377 }], have_arm_simd=yes)
378 CFLAGS=$xserver_save_CFLAGS
379
380 AC_ARG_ENABLE(arm-simd,
381    [AC_HELP_STRING([--disable-arm-simd],
382                    [disable ARM SIMD fast paths])],
383    [enable_arm_simd=$enableval], [enable_arm_simd=auto])
384
385 if test $enable_arm_simd = no ; then
386    have_arm_simd=disabled
387 fi
388
389 if test $have_arm_simd = yes ; then
390    AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
391 else
392    ARM_SIMD_CFLAGS=
393 fi
394
395 AC_MSG_RESULT($have_arm_simd)
396 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
397    AC_MSG_ERROR([ARM SIMD intrinsics not detected])
398 fi
399
400 AC_SUBST(ARM_SIMD_CFLAGS)
401
402 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
403
404 dnl ==========================================================================
405 dnl Check for ARM NEON instructions
406 ARM_NEON_CFLAGS="-mfpu=neon -mcpu=cortex-a8"
407
408 have_arm_neon=no
409 AC_MSG_CHECKING(whether to use ARM NEON)
410 xserver_save_CFLAGS=$CFLAGS
411 CFLAGS="$ARM_NEON_CFLAGS $CFLAGS"
412 AC_COMPILE_IFELSE([
413 #include <arm_neon.h>
414 int main () {
415     uint8x8_t neon_test=vmov_n_u8(0);
416     return 0;
417 }], have_arm_neon=yes)
418 CFLAGS=$xserver_save_CFLAGS
419
420 AC_ARG_ENABLE(arm-neon,
421    [AC_HELP_STRING([--disable-arm-neon],
422                    [disable ARM NEON fast paths])],
423    [enable_arm_neon=$enableval], [enable_arm_neon=auto])
424
425 if test $enable_arm_neon = no ; then
426    have_arm_neon=disabled
427 fi
428
429 if test $have_arm_neon = yes ; then
430    AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
431 else
432    ARM_NEON_CFLAGS=
433 fi
434
435 AC_SUBST(ARM_NEON_CFLAGS)
436
437 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
438
439 AC_MSG_RESULT($have_arm_neon)
440 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
441    AC_MSG_ERROR([ARM NEON intrinsics not detected])
442 fi
443
444 dnl =========================================================================================
445 dnl Check for GNU-style inline assembly support
446
447 have_gcc_inline_asm=no
448 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
449 AC_COMPILE_IFELSE([
450 int main () {
451     /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
452         asm volatile ( "\tnop\n" : : : "cc", "memory" );
453     return 0;
454 }], have_gcc_inline_asm=yes)
455
456 AC_ARG_ENABLE(gcc-inline-asm,
457    [AC_HELP_STRING([--disable-gcc-inline-asm],
458                    [disable GNU-style inline assembler])],
459    [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
460
461 if test $enable_gcc_inline_asm = no ; then
462    have_gcc_inline_asm=disabled
463 fi
464
465 if test $have_gcc_inline_asm = yes ; then
466    AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
467 fi
468
469 AC_MSG_RESULT($have_gcc_inline_asm)
470 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
471    AC_MSG_ERROR([GNU-style inline assembler not detected])
472 fi
473
474 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
475
476 dnl ==============================================
477 dnl Timers
478
479 AC_ARG_ENABLE(timers,
480    [AC_HELP_STRING([--enable-timers],
481                    [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
482    [enable_timers=$enableval], [enable_timers=no])
483
484 if test $enable_timers = yes ; then 
485    AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
486 fi
487 AC_SUBST(PIXMAN_TIMERS)
488
489 dnl ===================================
490 dnl GTK+
491
492 AC_ARG_ENABLE(gtk,
493    [AC_HELP_STRING([--enable-gtk],
494                    [enable tests using GTK+ [default=auto]])],
495    [enable_gtk=$enableval], [enable_gtk=auto])
496
497 PKG_PROG_PKG_CONFIG
498 if test $enable_gtk = auto ; then
499    PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
500 fi
501 if test $enable_gtk = yes ; then
502    PKG_CHECK_MODULES(GTK, [gtk+-2.0])
503 fi
504
505 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
506
507 AC_SUBST(GTK_CFLAGS)
508 AC_SUBST(GTK_LIBS)
509 AC_SUBST(DEP_CFLAGS)
510 AC_SUBST(DEP_LIBS)
511
512 dnl =====================================
513 dnl posix_memalign 
514
515 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
516 if test x$have_posix_memalign = xyes; then
517    AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
518 fi
519
520 AC_OUTPUT([pixman-1.pc
521            pixman-1-uninstalled.pc
522            Makefile
523            pixman/Makefile
524            pixman/pixman-version.h
525            test/Makefile])