1 dnl Copyright 2005 Red Hat, Inc.
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.
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.
21 dnl Process this file with autoconf to create configure.
25 # Pixman versioning scheme
27 # - The version in git has an odd MICRO version number
29 # - Released versions, both development and stable, have an
30 # even MICRO version number
32 # - Released development versions have an odd MINOR number
34 # - Released stable versions have an even MINOR number
36 # - Versions that break ABI must have a new MAJOR number
38 # - If you break the ABI, then at least this must be done:
42 # - In the first development release where you break ABI, find
43 # all instances of "pixman-n" and change them to pixman-(n+1)
45 # This needs to be done at least in
50 # This ensures that binary incompatible versions can be installed
51 # in parallel. See http://www106.pair.com/rhp/parallel.html for
55 m4_define([pixman_major], 0)
56 m4_define([pixman_minor], 37)
57 m4_define([pixman_micro], 1)
59 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
61 AC_INIT(pixman, pixman_version, [pixman@lists.freedesktop.org], pixman)
62 AM_INIT_AUTOMAKE([foreign dist-bzip2])
64 # Suppress verbose compile lines
65 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
67 AC_CONFIG_HEADERS(config.h)
71 test_CFLAGS=${CFLAGS+set} # We may override autoconf default CFLAGS.
76 AC_CHECK_FUNCS([getisax])
80 dnl PIXMAN_LINK_WITH_ENV(env-setup, program, true-action, false-action)
82 dnl Compiles and links the given program in the environment setup by env-setup
83 dnl and executes true-action on success and false-action on failure.
84 AC_DEFUN([PIXMAN_LINK_WITH_ENV],[dnl
86 save_LDFLAGS="$LDFLAGS"
92 CFLAGS="$save_CFLAGS $CFLAGS"
93 LDFLAGS="$save_LDFLAGS $LDFLAGS"
94 LIBS="$save_LIBS $LIBS"
96 [AC_LANG_SOURCE([$2])],
97 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
99 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
102 if test "x$pixman_cc_stderr" != "x"; then
106 if test "x$pixman_cc_flag" = "xyes"; then
107 ifelse([$3], , :, [$3])
109 ifelse([$4], , :, [$4])
111 CFLAGS="$save_CFLAGS"
112 LDFLAGS="$save_LDFLAGS"
116 dnl Find a -Werror for catching warnings.
118 for w in -Werror -errwarn; do
119 if test "z$WERROR" = "z"; then
120 AC_MSG_CHECKING([whether the compiler supports $w])
121 PIXMAN_LINK_WITH_ENV(
123 [int main(int c, char **v) { (void)c; (void)v; return 0; }],
124 [WERROR=$w; yesno=yes], [yesno=no])
125 AC_MSG_RESULT($yesno)
129 dnl PIXMAN_CHECK_CFLAG(flag, [program])
130 dnl Adds flag to CFLAGS if the given program links without warnings or errors.
131 AC_DEFUN([PIXMAN_CHECK_CFLAG], [dnl
132 AC_MSG_CHECKING([whether the compiler supports $1])
133 PIXMAN_LINK_WITH_ENV(
134 [CFLAGS="$WERROR $1"],
136 int main(int c, char **v) { (void)c; (void)v; return 0; }
140 if test "x$_yesno" = xyes; then
143 AC_MSG_RESULT($_yesno)
146 AC_CHECK_SIZEOF(long)
148 # Checks for Sun Studio compilers
149 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
150 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
152 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
153 # if we're using Sun Studio and neither the user nor a config.site
155 if test $SUNCC = yes && \
156 test "x$test_CFLAGS" = "x" && \
157 test "$CFLAGS" = "-g"
163 # We ignore pixman_major in the version here because the major version should
164 # always be encoded in the actual library name. Ie., the soname is:
166 # pixman-$(pixman_major).0.minor.micro
168 m4_define([lt_current], [pixman_minor])
169 m4_define([lt_revision], [pixman_micro])
170 m4_define([lt_age], [pixman_minor])
172 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
174 PIXMAN_VERSION_MAJOR=pixman_major()
175 AC_SUBST(PIXMAN_VERSION_MAJOR)
176 PIXMAN_VERSION_MINOR=pixman_minor()
177 AC_SUBST(PIXMAN_VERSION_MINOR)
178 PIXMAN_VERSION_MICRO=pixman_micro()
179 AC_SUBST(PIXMAN_VERSION_MICRO)
181 AC_SUBST(LT_VERSION_INFO)
183 # Check for dependencies
185 PIXMAN_CHECK_CFLAG([-Wall])
186 PIXMAN_CHECK_CFLAG([-Wdeclaration-after-statement])
187 PIXMAN_CHECK_CFLAG([-Wno-unused-local-typedefs])
188 PIXMAN_CHECK_CFLAG([-fno-strict-aliasing])
190 dnl =========================================================================
191 dnl OpenMP for the test suite?
194 # Check for OpenMP support only when autoconf support that (require autoconf >=2.62)
196 m4_ifdef([AC_OPENMP], [AC_OPENMP])
198 if test "x$enable_openmp" = "xyes" && test "x$ac_cv_prog_c_openmp" = "xunsupported" ; then
199 AC_MSG_WARN([OpenMP support requested but found unsupported])
202 dnl May not fail to link without -Wall -Werror added
203 dnl So try to link only when openmp is supported
204 dnl ac_cv_prog_c_openmp is not defined when --disable-openmp is used
205 if test "x$ac_cv_prog_c_openmp" != "xunsupported" && test "x$ac_cv_prog_c_openmp" != "x"; then
206 m4_define([openmp_test_program],[dnl
209 extern unsigned int lcg_seed;
210 #pragma omp threadprivate(lcg_seed)
211 unsigned int lcg_seed;
213 unsigned function(unsigned a, unsigned b)
216 return ((a + b) ^ a ) + lcg_seed;
219 int main(int argc, char **argv)
222 int n1 = 0, n2 = argc;
223 unsigned checksum = 0;
224 int verbose = argv != NULL;
225 unsigned (*test_function)(unsigned, unsigned);
226 test_function = function;
227 #pragma omp parallel for reduction(+:checksum) default(none) \
228 shared(n1, n2, test_function, verbose)
229 for (i = n1; i < n2; i++)
231 unsigned crc = test_function (i, 0);
233 printf ("%d: %08X\n", i, crc);
236 printf("%u\n", checksum);
241 PIXMAN_LINK_WITH_ENV(
242 [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
243 [openmp_test_program],
246 if test "x$have_openmp" = "xyes" ; then
247 AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
250 AC_SUBST(OPENMP_CFLAGS)
252 dnl =========================================================================
253 dnl -fvisibility stuff
255 PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
256 #if defined(__GNUC__) && (__GNUC__ >= 4)
258 #error Have -fvisibility but it is ignored and generates a warning
261 #error Need GCC 4.0 for visibility
265 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
266 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
268 #error Need Sun Studio 8 for visibility
272 dnl ===========================================================================
273 dnl Check for Loongson Multimedia Instructions
275 if test "x$LS_CFLAGS" = "x" ; then
276 LS_CFLAGS="-march=loongson2f"
280 AC_MSG_CHECKING(whether to use Loongson MMI assembler)
282 xserver_save_CFLAGS=$CFLAGS
283 CFLAGS=" $LS_CFLAGS $CFLAGS -I$srcdir"
284 AC_LINK_IFELSE([AC_LANG_SOURCE([[
285 #ifndef __mips_loongson_vector_rev
286 #error "Loongson Multimedia Instructions are only available on Loongson"
288 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4))
289 #error "Need GCC >= 4.4 for Loongson MMI compilation"
291 #include "pixman/loongson-mmintrin.h"
296 } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
298 __m64 c = _mm_srli_pi16 (a.v, b);
300 }]])], have_loongson_mmi=yes)
301 CFLAGS=$xserver_save_CFLAGS
303 AC_ARG_ENABLE(loongson-mmi,
304 [AC_HELP_STRING([--disable-loongson-mmi],
305 [disable Loongson MMI fast paths])],
306 [enable_loongson_mmi=$enableval], [enable_loongson_mmi=auto])
308 if test $enable_loongson_mmi = no ; then
309 have_loongson_mmi=disabled
312 if test $have_loongson_mmi = yes ; then
313 AC_DEFINE(USE_LOONGSON_MMI, 1, [use Loongson Multimedia Instructions])
318 AC_MSG_RESULT($have_loongson_mmi)
319 if test $enable_loongson_mmi = yes && test $have_loongson_mmi = no ; then
320 AC_MSG_ERROR([Loongson MMI not detected])
323 AM_CONDITIONAL(USE_LOONGSON_MMI, test $have_loongson_mmi = yes)
325 dnl ===========================================================================
328 if test "x$MMX_CFLAGS" = "x" ; then
329 if test "x$SUNCC" = "xyes"; then
330 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
331 # but if we're building 64-bit, mmx & sse support is on by default and
332 # -xarch=sse throws an error instead
333 if test "$AMD64_ABI" = "no" ; then
334 MMX_CFLAGS="-xarch=sse"
337 MMX_CFLAGS="-mmmx -Winline"
341 have_mmx_intrinsics=no
342 AC_MSG_CHECKING(whether to use MMX intrinsics)
343 xserver_save_CFLAGS=$CFLAGS
344 CFLAGS="$MMX_CFLAGS $CFLAGS"
345 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
346 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
347 #error "Need GCC >= 3.4 for MMX intrinsics"
349 #include <mmintrin.h>
352 /* Check support for block expressions */
353 #define _mm_shuffle_pi16(A, N) \
357 /* Some versions of clang will choke on K */ \
358 asm ("pshufw %2, %1, %0\n\t" \
360 : "y" (A), "K" ((const int8_t)N) \
367 __m64 v = _mm_cvtsi32_si64 (1);
370 w = _mm_shuffle_pi16(v, 5);
372 /* Some versions of clang will choke on this */
373 asm ("pmulhuw %1, %0\n\t"
378 return _mm_cvtsi64_si32 (v);
379 }]])], have_mmx_intrinsics=yes)
380 CFLAGS=$xserver_save_CFLAGS
383 [AC_HELP_STRING([--disable-mmx],
384 [disable x86 MMX fast paths])],
385 [enable_mmx=$enableval], [enable_mmx=auto])
387 if test $enable_mmx = no ; then
388 have_mmx_intrinsics=disabled
391 if test $have_mmx_intrinsics = yes ; then
392 AC_DEFINE(USE_X86_MMX, 1, [use x86 MMX compiler intrinsics])
397 AC_MSG_RESULT($have_mmx_intrinsics)
398 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
399 AC_MSG_ERROR([x86 MMX intrinsics not detected])
402 AM_CONDITIONAL(USE_X86_MMX, test $have_mmx_intrinsics = yes)
404 dnl ===========================================================================
407 if test "x$SSE2_CFLAGS" = "x" ; then
408 if test "x$SUNCC" = "xyes"; then
409 # SSE2 is enabled by default in the Sun Studio 64-bit environment
410 if test "$AMD64_ABI" = "no" ; then
411 SSE2_CFLAGS="-xarch=sse2"
414 SSE2_CFLAGS="-msse2 -Winline"
418 have_sse2_intrinsics=no
419 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
420 xserver_save_CFLAGS=$CFLAGS
421 CFLAGS="$SSE2_CFLAGS $CFLAGS"
423 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
424 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
425 # if !defined(__amd64__) && !defined(__x86_64__)
426 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
429 #include <mmintrin.h>
430 #include <xmmintrin.h>
431 #include <emmintrin.h>
434 __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
435 c = _mm_xor_si128 (a, b);
436 return _mm_cvtsi128_si32(c);
437 }]])], have_sse2_intrinsics=yes)
438 CFLAGS=$xserver_save_CFLAGS
441 [AC_HELP_STRING([--disable-sse2],
442 [disable SSE2 fast paths])],
443 [enable_sse2=$enableval], [enable_sse2=auto])
445 if test $enable_sse2 = no ; then
446 have_sse2_intrinsics=disabled
449 if test $have_sse2_intrinsics = yes ; then
450 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
453 AC_MSG_RESULT($have_sse2_intrinsics)
454 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
455 AC_MSG_ERROR([SSE2 intrinsics not detected])
458 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
460 dnl ===========================================================================
463 if test "x$SSSE3_CFLAGS" = "x" ; then
464 SSSE3_CFLAGS="-mssse3 -Winline"
467 have_ssse3_intrinsics=no
468 AC_MSG_CHECKING(whether to use SSSE3 intrinsics)
469 xserver_save_CFLAGS=$CFLAGS
470 CFLAGS="$SSSE3_CFLAGS $CFLAGS"
472 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
473 #include <mmintrin.h>
474 #include <xmmintrin.h>
475 #include <emmintrin.h>
476 #include <tmmintrin.h>
479 __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
480 c = _mm_maddubs_epi16 (a, b);
481 return _mm_cvtsi128_si32(c);
482 }]])], have_ssse3_intrinsics=yes)
483 CFLAGS=$xserver_save_CFLAGS
486 [AC_HELP_STRING([--disable-ssse3],
487 [disable SSSE3 fast paths])],
488 [enable_ssse3=$enableval], [enable_ssse3=auto])
490 if test $enable_ssse3 = no ; then
491 have_ssse3_intrinsics=disabled
494 if test $have_ssse3_intrinsics = yes ; then
495 AC_DEFINE(USE_SSSE3, 1, [use SSSE3 compiler intrinsics])
498 AC_MSG_RESULT($have_ssse3_intrinsics)
499 if test $enable_ssse3 = yes && test $have_ssse3_intrinsics = no ; then
500 AC_MSG_ERROR([SSSE3 intrinsics not detected])
503 AM_CONDITIONAL(USE_SSSE3, test $have_ssse3_intrinsics = yes)
505 dnl ===========================================================================
506 dnl Other special flags needed when building code using MMX or SSE instructions
509 # When building 32-bit binaries, apply a mapfile to ensure that the
510 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
511 # since they check at runtime before using those instructions.
512 # Not all linkers grok the mapfile format so we check for that first.
513 if test "$AMD64_ABI" = "no" ; then
515 AC_MSG_CHECKING(whether to use a hardware capability map file)
516 hwcap_save_LDFLAGS="$LDFLAGS"
517 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
518 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
519 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
520 use_hwcap_mapfile=yes,
522 LDFLAGS="$hwcap_save_LDFLAGS"
523 AC_MSG_RESULT($use_hwcap_mapfile)
525 if test "x$MMX_LDFLAGS" = "x" ; then
526 MMX_LDFLAGS="$HWCAP_LDFLAGS"
528 if test "x$SSE2_LDFLAGS" = "x" ; then
529 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
535 AC_SUBST(IWMMXT_CFLAGS)
537 AC_SUBST(MMX_LDFLAGS)
538 AC_SUBST(SSE2_CFLAGS)
539 AC_SUBST(SSE2_LDFLAGS)
540 AC_SUBST(SSSE3_CFLAGS)
542 dnl ===========================================================================
543 dnl Check for VMX/Altivec
544 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
545 VMX_CFLAGS="-faltivec"
547 VMX_CFLAGS="-maltivec -mabi=altivec"
550 have_vmx_intrinsics=no
551 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
552 xserver_save_CFLAGS=$CFLAGS
553 CFLAGS="$VMX_CFLAGS $CFLAGS"
554 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
555 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
556 #error "Need GCC >= 3.4 for sane altivec support"
560 vector unsigned int v = vec_splat_u32 (1);
563 }]])], have_vmx_intrinsics=yes)
564 CFLAGS=$xserver_save_CFLAGS
567 [AC_HELP_STRING([--disable-vmx],
568 [disable VMX fast paths])],
569 [enable_vmx=$enableval], [enable_vmx=auto])
571 if test $enable_vmx = no ; then
572 have_vmx_intrinsics=disabled
575 if test $have_vmx_intrinsics = yes ; then
576 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
581 AC_MSG_RESULT($have_vmx_intrinsics)
582 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
583 AC_MSG_ERROR([VMX intrinsics not detected])
588 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
590 dnl ==========================================================================
591 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
593 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
594 xserver_save_CFLAGS=$CFLAGS
595 CFLAGS="-x assembler-with-cpp $CFLAGS"
596 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
603 #error EABI is required (to be sure that calling conventions are compatible)
606 uqadd8 r0, r0, r0]])], have_arm_simd=yes)
607 CFLAGS=$xserver_save_CFLAGS
609 AC_ARG_ENABLE(arm-simd,
610 [AC_HELP_STRING([--disable-arm-simd],
611 [disable ARM SIMD fast paths])],
612 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
614 if test $enable_arm_simd = no ; then
615 have_arm_simd=disabled
618 if test $have_arm_simd = yes ; then
619 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
622 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
624 AC_MSG_RESULT($have_arm_simd)
625 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
626 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
629 dnl ==========================================================================
630 dnl Check if assembler is gas compatible and supports NEON instructions
632 AC_MSG_CHECKING(whether to use ARM NEON assembler)
633 xserver_save_CFLAGS=$CFLAGS
634 CFLAGS="-x assembler-with-cpp $CFLAGS"
635 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
640 .eabi_attribute 10, 0
644 #error EABI is required (to be sure that calling conventions are compatible)
647 vmovn.u16 d0, q0]])], have_arm_neon=yes)
648 CFLAGS=$xserver_save_CFLAGS
650 AC_ARG_ENABLE(arm-neon,
651 [AC_HELP_STRING([--disable-arm-neon],
652 [disable ARM NEON fast paths])],
653 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
655 if test $enable_arm_neon = no ; then
656 have_arm_neon=disabled
659 if test $have_arm_neon = yes ; then
660 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
663 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
665 AC_MSG_RESULT($have_arm_neon)
666 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
667 AC_MSG_ERROR([ARM NEON intrinsics not detected])
670 dnl ===========================================================================
673 AC_ARG_ENABLE(arm-iwmmxt,
674 [AC_HELP_STRING([--disable-arm-iwmmxt],
675 [disable ARM IWMMXT fast paths])],
676 [enable_iwmmxt=$enableval], [enable_iwmmxt=auto])
678 AC_ARG_ENABLE(arm-iwmmxt2,
679 [AC_HELP_STRING([--disable-arm-iwmmxt2],
680 [build ARM IWMMXT fast paths with -march=iwmmxt instead of -march=iwmmxt2])],
681 [enable_iwmmxt2=$enableval], [enable_iwmmxt2=auto])
683 if test "x$IWMMXT_CFLAGS" = "x" ; then
684 IWMMXT_CFLAGS="-flax-vector-conversions -Winline -march=iwmmxt"
685 if test $enable_iwmmxt2 != no ; then
686 IWMMXT_CFLAGS="${IWMMXT_CFLAGS}2"
690 have_iwmmxt_intrinsics=no
691 AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
692 xserver_save_CFLAGS=$CFLAGS
693 CFLAGS="$CFLAGS $IWMMXT_CFLAGS"
694 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
696 #error "IWMMXT is only available on ARM"
699 #error "IWMMXT not enabled (with -march=iwmmxt)"
701 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8))
702 #error "Need GCC >= 4.8 for IWMMXT intrinsics"
704 #include <mmintrin.h>
709 } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
711 __m64 c = _mm_srli_si64 (a.v, b);
712 }]])], have_iwmmxt_intrinsics=yes)
713 CFLAGS=$xserver_save_CFLAGS
715 if test $enable_iwmmxt = no ; then
716 have_iwmmxt_intrinsics=disabled
719 if test $have_iwmmxt_intrinsics = yes ; then
720 AC_DEFINE(USE_ARM_IWMMXT, 1, [use ARM IWMMXT compiler intrinsics])
725 AC_MSG_RESULT($have_iwmmxt_intrinsics)
726 if test $enable_iwmmxt = yes && test $have_iwmmxt_intrinsics = no ; then
727 AC_MSG_ERROR([IWMMXT intrinsics not detected])
730 AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
732 dnl ==========================================================================
733 dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
736 AC_MSG_CHECKING(whether to use MIPS DSPr2 assembler)
737 xserver_save_CFLAGS=$CFLAGS
738 CFLAGS="-mdspr2 $CFLAGS"
740 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
741 #if !(defined(__mips__) && __mips_isa_rev >= 2)
742 #error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
747 int c = 0, a = 0, b = 0;
748 __asm__ __volatile__ (
749 "precr.qb.ph %[c], %[a], %[b] \n\t"
751 : [a] "r" (a), [b] "r" (b)
754 }]])], have_mips_dspr2=yes)
755 CFLAGS=$xserver_save_CFLAGS
757 AC_ARG_ENABLE(mips-dspr2,
758 [AC_HELP_STRING([--disable-mips-dspr2],
759 [disable MIPS DSPr2 fast paths])],
760 [enable_mips_dspr2=$enableval], [enable_mips_dspr2=auto])
762 if test $enable_mips_dspr2 = no ; then
763 have_mips_dspr2=disabled
766 if test $have_mips_dspr2 = yes ; then
767 AC_DEFINE(USE_MIPS_DSPR2, 1, [use MIPS DSPr2 assembly optimizations])
770 AM_CONDITIONAL(USE_MIPS_DSPR2, test $have_mips_dspr2 = yes)
772 AC_MSG_RESULT($have_mips_dspr2)
773 if test $enable_mips_dspr2 = yes && test $have_mips_dspr2 = no ; then
774 AC_MSG_ERROR([MIPS DSPr2 instructions not detected])
777 dnl =========================================================================================
778 dnl Check for GNU-style inline assembly support
780 have_gcc_inline_asm=no
781 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
782 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
784 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
785 asm volatile ( "\tnop\n" : : : "cc", "memory" );
787 }]])], have_gcc_inline_asm=yes)
789 AC_ARG_ENABLE(gcc-inline-asm,
790 [AC_HELP_STRING([--disable-gcc-inline-asm],
791 [disable GNU-style inline assembler])],
792 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
794 if test $enable_gcc_inline_asm = no ; then
795 have_gcc_inline_asm=disabled
798 if test $have_gcc_inline_asm = yes ; then
799 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
802 AC_MSG_RESULT($have_gcc_inline_asm)
803 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
804 AC_MSG_ERROR([GNU-style inline assembler not detected])
807 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
809 dnl ==============================================
810 dnl Static test programs
812 AC_ARG_ENABLE(static-testprogs,
813 [AC_HELP_STRING([--enable-static-testprogs],
814 [build test programs as static binaries [default=no]])],
815 [enable_static_testprogs=$enableval], [enable_static_testprogs=no])
817 TESTPROGS_EXTRA_LDFLAGS=
818 if test "x$enable_static_testprogs" = "xyes" ; then
819 TESTPROGS_EXTRA_LDFLAGS="-all-static"
821 AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
823 dnl ==============================================
826 AC_ARG_ENABLE(timers,
827 [AC_HELP_STRING([--enable-timers],
828 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
829 [enable_timers=$enableval], [enable_timers=no])
831 if test $enable_timers = yes ; then
832 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
834 AC_SUBST(PIXMAN_TIMERS)
836 dnl ===================================
839 AC_ARG_ENABLE(gnuplot,
840 [AC_HELP_STRING([--enable-gnuplot],
841 [enable output of filters that can be piped to gnuplot [default=no]])],
842 [enable_gnuplot=$enableval], [enable_gnuplot=no])
844 if test $enable_gnuplot = yes ; then
845 AC_DEFINE(PIXMAN_GNUPLOT, 1, [enable output that can be piped to gnuplot])
847 AC_SUBST(PIXMAN_GNUPLOT)
849 dnl ===================================
853 [AC_HELP_STRING([--enable-gtk],
854 [enable tests using GTK+ [default=auto]])],
855 [enable_gtk=$enableval], [enable_gtk=auto])
859 if test $enable_gtk = yes ; then
860 AC_CHECK_LIB([pixman-1], [pixman_version_string])
861 PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16 pixman-1])
864 if test $enable_gtk = auto ; then
865 AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
868 if test $enable_gtk = auto ; then
869 PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16 pixman-1], [enable_gtk=yes], [enable_gtk=no])
872 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
877 dnl =====================================
878 dnl posix_memalign, sigaction, alarm, gettimeofday
880 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
881 if test x$have_posix_memalign = xyes; then
882 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
885 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
886 if test x$have_sigaction = xyes; then
887 AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
890 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
891 if test x$have_alarm = xyes; then
892 AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
895 AC_CHECK_HEADER([sys/mman.h],
896 [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
898 AC_CHECK_FUNC(mmap, have_mmap=yes, have_mmap=no)
899 if test x$have_mmap = xyes; then
900 AC_DEFINE(HAVE_MMAP, 1, [Whether we have mmap()])
903 AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
904 if test x$have_mprotect = xyes; then
905 AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
908 AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
909 if test x$have_getpagesize = xyes; then
910 AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
913 AC_CHECK_HEADER([fenv.h],
914 [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
916 AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
917 if test x$have_feenableexcept = xyes; then
918 AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
921 AC_CHECK_DECL([FE_DIVBYZERO],
922 [AC_DEFINE(HAVE_FEDIVBYZERO, 1, [Whether we have FE_DIVBYZERO])],
924 [[#include <fenv.h>]])
926 AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
927 AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
928 if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
929 AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
932 dnl =====================================
933 dnl Check for missing sqrtf() as, e.g., for Solaris 9
935 AC_SEARCH_LIBS([sqrtf], [m], [],
936 [AC_DEFINE([sqrtf], [sqrt],
937 [Define to sqrt if you do not have the `sqrtf' function.])])
939 dnl =====================================
940 dnl Thread local storage
942 AC_MSG_CHECKING(for thread local storage (TLS) support)
943 AC_CACHE_VAL(ac_cv_tls, [
945 keywords="__thread __declspec(thread)"
946 for kw in $keywords ; do
948 #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
949 #error This MinGW version has broken __thread support
952 #error OpenBSD has broken __thread support
955 int $kw test;], [], [ac_cv_tls=$kw; break])
958 AC_MSG_RESULT($ac_cv_tls)
960 if test "$ac_cv_tls" != "none"; then
961 AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [The compiler supported TLS storage class])
968 m4_define([pthread_test_program],AC_LANG_SOURCE([[dnl
972 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
973 static pthread_key_t key;
978 pthread_key_create (&key, NULL);
986 if (pthread_once (&once_control, make_key) != 0)
992 value = pthread_getspecific (key);
995 value = malloc (100);
996 pthread_setspecific (key, value);
1003 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
1004 if test "z$support_for_pthreads" != "zyes"; then
1005 PIXMAN_LINK_WITH_ENV(
1006 [$1], [pthread_test_program],
1007 [PTHREAD_CFLAGS="$CFLAGS"
1008 PTHREAD_LIBS="$LIBS"
1009 PTHREAD_LDFLAGS="$LDFLAGS"
1010 support_for_pthreads=yes])
1014 support_for_pthreads=no
1016 AC_MSG_CHECKING(for pthreads)
1018 PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
1019 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
1020 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
1022 if test $support_for_pthreads = yes; then
1023 AC_DEFINE([HAVE_PTHREADS], [], [Whether pthreads is supported])
1024 if test $ac_cv_tls = none ; then
1025 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
1029 AC_MSG_RESULT($support_for_pthreads)
1031 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
1032 AC_SUBST(HAVE_PTHREADS)
1033 AC_SUBST(PTHREAD_LDFLAGS)
1034 AC_SUBST(PTHREAD_LIBS)
1035 AC_SUBST(PTHREAD_CFLAGS)
1037 dnl =====================================
1038 dnl __attribute__((constructor))
1040 support_for_attribute_constructor=no
1042 AC_MSG_CHECKING(for __attribute__((constructor)))
1043 AC_LINK_IFELSE([AC_LANG_SOURCE([[
1044 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
1045 /* attribute 'constructor' is supported since gcc 2.7, but some compilers
1046 * may only pretend to be gcc, so let's try to actually use it
1049 static void __attribute__((constructor)) constructor_function () { x = 0; }
1050 int main (void) { return x; }
1052 #error not gcc or gcc version is older than 2.7
1054 ]])], support_for_attribute_constructor=yes)
1056 if test x$support_for_attribute_constructor = xyes; then
1057 AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
1058 [],[Whether the tool chain supports __attribute__((constructor))])
1061 AC_MSG_RESULT($support_for_attribute_constructor)
1062 AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
1064 dnl =====================================
1067 support_for_float128=no
1069 AC_MSG_CHECKING(for __float128)
1070 AC_LINK_IFELSE([AC_LANG_SOURCE([[
1071 __float128 a = 1.0Q, b = 2.0Q; int main (void) { return a + b; }
1072 ]])], support_for_float128=yes)
1074 if test x$support_for_float128 = xyes; then
1075 AC_DEFINE([HAVE_FLOAT128], [], [Whether the tool chain supports __float128])
1078 AC_MSG_RESULT($support_for_float128)
1080 dnl =====================================
1083 support_for_builtin_clz=no
1085 AC_MSG_CHECKING(for __builtin_clz)
1086 AC_LINK_IFELSE([AC_LANG_SOURCE([[
1087 unsigned int x = 11; int main (void) { return __builtin_clz(x); }
1088 ]])], support_for_builtin_clz=yes)
1090 if test x$support_for_builtin_clz = xyes; then
1091 AC_DEFINE([HAVE_BUILTIN_CLZ], [], [Whether the compiler supports __builtin_clz])
1094 AC_MSG_RESULT($support_for_builtin_clz)
1096 dnl =====================================
1097 dnl GCC vector extensions
1099 support_for_gcc_vector_extensions=no
1101 AC_MSG_CHECKING(for GCC vector extensions)
1102 AC_LINK_IFELSE([AC_LANG_SOURCE([[
1103 unsigned int __attribute__ ((vector_size(16))) e, a, b;
1104 int main (void) { e = a - ((b << 27) + (b >> (32 - 27))) + 1; return e[0]; }
1105 ]])], support_for_gcc_vector_extensions=yes)
1107 if test x$support_for_gcc_vector_extensions = xyes; then
1108 AC_DEFINE([HAVE_GCC_VECTOR_EXTENSIONS], [],
1109 [Whether the compiler supports GCC vector extensions])
1112 AC_MSG_RESULT($support_for_gcc_vector_extensions)
1114 dnl ==================
1117 AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
1118 [have_libpng=$enableval], [have_libpng=auto])
1120 case x$have_libpng in
1121 xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
1123 *) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
1126 if test x$have_libpng = xyes; then
1127 AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
1130 AC_SUBST(HAVE_LIBPNG)
1132 AC_OUTPUT([pixman-1.pc
1133 pixman-1-uninstalled.pc
1136 pixman/pixman-version.h
1140 m4_if(m4_eval(pixman_minor % 2), [1], [
1142 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
1144 echo " Thanks for testing this development snapshot of pixman. Please"
1145 echo " report any problems you find, either by sending email to "
1147 echo " pixman@lists.freedesktop.org"
1149 echo " or by filing a bug at "
1151 echo " https://bugs.freedesktop.org/enter_bug.cgi?product=pixman "
1153 echo " If you are looking for a stable release of pixman, please note "
1154 echo " that stable releases have _even_ minor version numbers. Ie., "
1155 echo " pixman-0.]m4_eval(pixman_minor & ~1)[.x are stable releases, whereas pixman-$PIXMAN_VERSION_MAJOR.$PIXMAN_VERSION_MINOR.$PIXMAN_VERSION_MICRO is a "
1156 echo " development snapshot that may contain bugs and experimental "
1159 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"