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], 32)
57
m4_define([pixman_micro], 6)
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([-fno-strict-aliasing])
189
dnl =========================================================================
190
dnl OpenMP for the test suite?
193
# Check for OpenMP support only when autoconf support that (require autoconf >=2.62)
195
m4_ifdef([AC_OPENMP], [AC_OPENMP])
197
if test "x$enable_openmp" = "xyes" && test "x$ac_cv_prog_c_openmp" = "xunsupported" ; then
198
AC_MSG_WARN([OpenMP support requested but found unsupported])
201
dnl May not fail to link without -Wall -Werror added
202
dnl So try to link only when openmp is supported
203
dnl ac_cv_prog_c_openmp is not defined when --disable-openmp is used
204
if test "x$ac_cv_prog_c_openmp" != "xunsupported" && test "x$ac_cv_prog_c_openmp" != "x"; then
205
m4_define([openmp_test_program],[dnl
208
extern unsigned int lcg_seed;
209
#pragma omp threadprivate(lcg_seed)
210
unsigned int lcg_seed;
212
unsigned function(unsigned a, unsigned b)
215
return ((a + b) ^ a ) + lcg_seed;
218
int main(int argc, char **argv)
221
int n1 = 0, n2 = argc;
222
unsigned checksum = 0;
223
int verbose = argv != NULL;
224
unsigned (*test_function)(unsigned, unsigned);
225
test_function = function;
226
#pragma omp parallel for reduction(+:checksum) default(none) \
227
shared(n1, n2, test_function, verbose)
228
for (i = n1; i < n2; i++)
230
unsigned crc = test_function (i, 0);
232
printf ("%d: %08X\n", i, crc);
235
printf("%u\n", checksum);
240
PIXMAN_LINK_WITH_ENV(
241
[CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
242
[openmp_test_program],
245
if test "x$have_openmp" = "xyes" ; then
246
AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
249
AC_SUBST(OPENMP_CFLAGS)
251
dnl =========================================================================
252
dnl -fvisibility stuff
254
PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
255
#if defined(__GNUC__) && (__GNUC__ >= 4)
257
#error Have -fvisibility but it is ignored and generates a warning
260
#error Need GCC 4.0 for visibility
264
PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
265
#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
267
#error Need Sun Studio 8 for visibility
271
dnl ===========================================================================
272
dnl Check for Loongson Multimedia Instructions
274
if test "x$LS_CFLAGS" = "x" ; then
275
LS_CFLAGS="-march=loongson2f"
279
AC_MSG_CHECKING(whether to use Loongson MMI assembler)
281
xserver_save_CFLAGS=$CFLAGS
282
CFLAGS=" $LS_CFLAGS $CFLAGS -I$srcdir"
283
AC_LINK_IFELSE([AC_LANG_SOURCE([[
284
#ifndef __mips_loongson_vector_rev
285
#error "Loongson Multimedia Instructions are only available on Loongson"
287
#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4))
288
#error "Need GCC >= 4.4 for Loongson MMI compilation"
290
#include "pixman/loongson-mmintrin.h"
295
} a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
297
__m64 c = _mm_srli_pi16 (a.v, b);
299
}]])], have_loongson_mmi=yes)
300
CFLAGS=$xserver_save_CFLAGS
302
AC_ARG_ENABLE(loongson-mmi,
303
[AC_HELP_STRING([--disable-loongson-mmi],
304
[disable Loongson MMI fast paths])],
305
[enable_loongson_mmi=$enableval], [enable_loongson_mmi=auto])
307
if test $enable_loongson_mmi = no ; then
308
have_loongson_mmi=disabled
311
if test $have_loongson_mmi = yes ; then
312
AC_DEFINE(USE_LOONGSON_MMI, 1, [use Loongson Multimedia Instructions])
317
AC_MSG_RESULT($have_loongson_mmi)
318
if test $enable_loongson_mmi = yes && test $have_loongson_mmi = no ; then
319
AC_MSG_ERROR([Loongson MMI not detected])
322
AM_CONDITIONAL(USE_LOONGSON_MMI, test $have_loongson_mmi = yes)
324
dnl ===========================================================================
327
if test "x$MMX_CFLAGS" = "x" ; then
328
if test "x$SUNCC" = "xyes"; then
329
# Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
330
# but if we're building 64-bit, mmx & sse support is on by default and
331
# -xarch=sse throws an error instead
332
if test "$AMD64_ABI" = "no" ; then
333
MMX_CFLAGS="-xarch=sse"
336
MMX_CFLAGS="-mmmx -Winline"
340
have_mmx_intrinsics=no
341
AC_MSG_CHECKING(whether to use MMX intrinsics)
342
xserver_save_CFLAGS=$CFLAGS
343
CFLAGS="$MMX_CFLAGS $CFLAGS"
344
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
345
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
346
#error "Need GCC >= 3.4 for MMX intrinsics"
348
#include <mmintrin.h>
350
__m64 v = _mm_cvtsi32_si64 (1);
353
/* Some versions of clang will choke on K */
354
asm ("pshufw %2, %1, %0\n\t"
359
/* Some versions of clang will choke on this */
360
asm ("pmulhuw %1, %0\n\t"
365
return _mm_cvtsi64_si32 (v);
366
}]])], have_mmx_intrinsics=yes)
367
CFLAGS=$xserver_save_CFLAGS
370
[AC_HELP_STRING([--disable-mmx],
371
[disable x86 MMX fast paths])],
372
[enable_mmx=$enableval], [enable_mmx=auto])
374
if test $enable_mmx = no ; then
375
have_mmx_intrinsics=disabled
378
if test $have_mmx_intrinsics = yes ; then
379
AC_DEFINE(USE_X86_MMX, 1, [use x86 MMX compiler intrinsics])
384
AC_MSG_RESULT($have_mmx_intrinsics)
385
if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
386
AC_MSG_ERROR([x86 MMX intrinsics not detected])
389
AM_CONDITIONAL(USE_X86_MMX, test $have_mmx_intrinsics = yes)
391
dnl ===========================================================================
394
if test "x$SSE2_CFLAGS" = "x" ; then
395
if test "x$SUNCC" = "xyes"; then
396
# SSE2 is enabled by default in the Sun Studio 64-bit environment
397
if test "$AMD64_ABI" = "no" ; then
398
SSE2_CFLAGS="-xarch=sse2"
401
SSE2_CFLAGS="-msse2 -Winline"
405
have_sse2_intrinsics=no
406
AC_MSG_CHECKING(whether to use SSE2 intrinsics)
407
xserver_save_CFLAGS=$CFLAGS
408
CFLAGS="$SSE2_CFLAGS $CFLAGS"
410
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
411
#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
412
# if !defined(__amd64__) && !defined(__x86_64__)
413
# error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
416
#include <mmintrin.h>
417
#include <xmmintrin.h>
418
#include <emmintrin.h>
420
__m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
421
c = _mm_xor_si128 (a, b);
423
}]])], have_sse2_intrinsics=yes)
424
CFLAGS=$xserver_save_CFLAGS
427
[AC_HELP_STRING([--disable-sse2],
428
[disable SSE2 fast paths])],
429
[enable_sse2=$enableval], [enable_sse2=auto])
431
if test $enable_sse2 = no ; then
432
have_sse2_intrinsics=disabled
435
if test $have_sse2_intrinsics = yes ; then
436
AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
439
AC_MSG_RESULT($have_sse2_intrinsics)
440
if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
441
AC_MSG_ERROR([SSE2 intrinsics not detected])
444
AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
446
dnl ===========================================================================
449
if test "x$SSSE3_CFLAGS" = "x" ; then
450
SSSE3_CFLAGS="-mssse3 -Winline"
453
have_ssse3_intrinsics=no
454
AC_MSG_CHECKING(whether to use SSSE3 intrinsics)
455
xserver_save_CFLAGS=$CFLAGS
456
CFLAGS="$SSSE3_CFLAGS $CFLAGS"
458
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
459
#include <mmintrin.h>
460
#include <xmmintrin.h>
461
#include <emmintrin.h>
462
#include <tmmintrin.h>
464
__m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
465
c = _mm_maddubs_epi16 (a, b);
467
}]])], have_ssse3_intrinsics=yes)
468
CFLAGS=$xserver_save_CFLAGS
471
[AC_HELP_STRING([--disable-ssse3],
472
[disable SSSE3 fast paths])],
473
[enable_ssse3=$enableval], [enable_ssse3=auto])
475
if test $enable_ssse3 = no ; then
476
have_ssse3_intrinsics=disabled
479
if test $have_ssse3_intrinsics = yes ; then
480
AC_DEFINE(USE_SSSE3, 1, [use SSSE3 compiler intrinsics])
483
AC_MSG_RESULT($have_ssse3_intrinsics)
484
if test $enable_ssse3 = yes && test $have_ssse3_intrinsics = no ; then
485
AC_MSG_ERROR([SSSE3 intrinsics not detected])
488
AM_CONDITIONAL(USE_SSSE3, test $have_ssse3_intrinsics = yes)
490
dnl ===========================================================================
491
dnl Other special flags needed when building code using MMX or SSE instructions
494
# When building 32-bit binaries, apply a mapfile to ensure that the
495
# binaries aren't flagged as only able to run on MMX+SSE capable CPUs
496
# since they check at runtime before using those instructions.
497
# Not all linkers grok the mapfile format so we check for that first.
498
if test "$AMD64_ABI" = "no" ; then
500
AC_MSG_CHECKING(whether to use a hardware capability map file)
501
hwcap_save_LDFLAGS="$LDFLAGS"
502
HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
503
LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
504
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
505
use_hwcap_mapfile=yes,
507
LDFLAGS="$hwcap_save_LDFLAGS"
508
AC_MSG_RESULT($use_hwcap_mapfile)
510
if test "x$MMX_LDFLAGS" = "x" ; then
511
MMX_LDFLAGS="$HWCAP_LDFLAGS"
513
if test "x$SSE2_LDFLAGS" = "x" ; then
514
SSE2_LDFLAGS="$HWCAP_LDFLAGS"
520
AC_SUBST(IWMMXT_CFLAGS)
522
AC_SUBST(MMX_LDFLAGS)
523
AC_SUBST(SSE2_CFLAGS)
524
AC_SUBST(SSE2_LDFLAGS)
525
AC_SUBST(SSSE3_CFLAGS)
527
dnl ===========================================================================
528
dnl Check for VMX/Altivec
529
if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
530
VMX_CFLAGS="-faltivec"
532
VMX_CFLAGS="-maltivec -mabi=altivec"
535
have_vmx_intrinsics=no
536
AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
537
xserver_save_CFLAGS=$CFLAGS
538
CFLAGS="$VMX_CFLAGS $CFLAGS"
539
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
540
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
541
#error "Need GCC >= 3.4 for sane altivec support"
545
vector unsigned int v = vec_splat_u32 (1);
548
}]])], have_vmx_intrinsics=yes)
549
CFLAGS=$xserver_save_CFLAGS
552
[AC_HELP_STRING([--disable-vmx],
553
[disable VMX fast paths])],
554
[enable_vmx=$enableval], [enable_vmx=auto])
556
if test $enable_vmx = no ; then
557
have_vmx_intrinsics=disabled
560
if test $have_vmx_intrinsics = yes ; then
561
AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
566
AC_MSG_RESULT($have_vmx_intrinsics)
567
if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
568
AC_MSG_ERROR([VMX intrinsics not detected])
573
AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
575
dnl ==========================================================================
576
dnl Check if assembler is gas compatible and supports ARM SIMD instructions
578
AC_MSG_CHECKING(whether to use ARM SIMD assembler)
579
xserver_save_CFLAGS=$CFLAGS
580
CFLAGS="-x assembler-with-cpp $CFLAGS"
581
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
588
#error EABI is required (to be sure that calling conventions are compatible)
591
uqadd8 r0, r0, r0]])], have_arm_simd=yes)
592
CFLAGS=$xserver_save_CFLAGS
594
AC_ARG_ENABLE(arm-simd,
595
[AC_HELP_STRING([--disable-arm-simd],
596
[disable ARM SIMD fast paths])],
597
[enable_arm_simd=$enableval], [enable_arm_simd=auto])
599
if test $enable_arm_simd = no ; then
600
have_arm_simd=disabled
603
if test $have_arm_simd = yes ; then
604
AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
607
AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
609
AC_MSG_RESULT($have_arm_simd)
610
if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
611
AC_MSG_ERROR([ARM SIMD intrinsics not detected])
614
dnl ==========================================================================
615
dnl Check if assembler is gas compatible and supports NEON instructions
617
AC_MSG_CHECKING(whether to use ARM NEON assembler)
618
xserver_save_CFLAGS=$CFLAGS
619
CFLAGS="-x assembler-with-cpp $CFLAGS"
620
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
625
.eabi_attribute 10, 0
629
#error EABI is required (to be sure that calling conventions are compatible)
632
vmovn.u16 d0, q0]])], have_arm_neon=yes)
633
CFLAGS=$xserver_save_CFLAGS
635
AC_ARG_ENABLE(arm-neon,
636
[AC_HELP_STRING([--disable-arm-neon],
637
[disable ARM NEON fast paths])],
638
[enable_arm_neon=$enableval], [enable_arm_neon=auto])
640
if test $enable_arm_neon = no ; then
641
have_arm_neon=disabled
644
if test $have_arm_neon = yes ; then
645
AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
648
AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
650
AC_MSG_RESULT($have_arm_neon)
651
if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
652
AC_MSG_ERROR([ARM NEON intrinsics not detected])
655
dnl ===========================================================================
658
AC_ARG_ENABLE(arm-iwmmxt,
659
[AC_HELP_STRING([--disable-arm-iwmmxt],
660
[disable ARM IWMMXT fast paths])],
661
[enable_iwmmxt=$enableval], [enable_iwmmxt=auto])
663
AC_ARG_ENABLE(arm-iwmmxt2,
664
[AC_HELP_STRING([--disable-arm-iwmmxt2],
665
[build ARM IWMMXT fast paths with -march=iwmmxt instead of -march=iwmmxt2])],
666
[enable_iwmmxt2=$enableval], [enable_iwmmxt2=auto])
668
if test "x$IWMMXT_CFLAGS" = "x" ; then
669
IWMMXT_CFLAGS="-flax-vector-conversions -Winline -march=iwmmxt"
670
if test $enable_iwmmxt2 != no ; then
671
IWMMXT_CFLAGS="${IWMMXT_CFLAGS}2"
675
have_iwmmxt_intrinsics=no
676
AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
677
xserver_save_CFLAGS=$CFLAGS
678
CFLAGS="$CFLAGS $IWMMXT_CFLAGS"
679
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
681
#error "IWMMXT is only available on ARM"
684
#error "IWMMXT not enabled (with -march=iwmmxt)"
686
#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8))
687
#error "Need GCC >= 4.8 for IWMMXT intrinsics"
689
#include <mmintrin.h>
694
} a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
696
__m64 c = _mm_srli_si64 (a.v, b);
697
}]])], have_iwmmxt_intrinsics=yes)
698
CFLAGS=$xserver_save_CFLAGS
700
if test $enable_iwmmxt = no ; then
701
have_iwmmxt_intrinsics=disabled
704
if test $have_iwmmxt_intrinsics = yes ; then
705
AC_DEFINE(USE_ARM_IWMMXT, 1, [use ARM IWMMXT compiler intrinsics])
710
AC_MSG_RESULT($have_iwmmxt_intrinsics)
711
if test $enable_iwmmxt = yes && test $have_iwmmxt_intrinsics = no ; then
712
AC_MSG_ERROR([IWMMXT intrinsics not detected])
715
AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
717
dnl ==========================================================================
718
dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
721
AC_MSG_CHECKING(whether to use MIPS DSPr2 assembler)
722
xserver_save_CFLAGS=$CFLAGS
723
CFLAGS="-mdspr2 $CFLAGS"
725
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
726
#if !(defined(__mips__) && __mips_isa_rev >= 2)
727
#error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
732
int c = 0, a = 0, b = 0;
733
__asm__ __volatile__ (
734
"precr.qb.ph %[c], %[a], %[b] \n\t"
736
: [a] "r" (a), [b] "r" (b)
739
}]])], have_mips_dspr2=yes)
740
CFLAGS=$xserver_save_CFLAGS
742
AC_ARG_ENABLE(mips-dspr2,
743
[AC_HELP_STRING([--disable-mips-dspr2],
744
[disable MIPS DSPr2 fast paths])],
745
[enable_mips_dspr2=$enableval], [enable_mips_dspr2=auto])
747
if test $enable_mips_dspr2 = no ; then
748
have_mips_dspr2=disabled
751
if test $have_mips_dspr2 = yes ; then
752
AC_DEFINE(USE_MIPS_DSPR2, 1, [use MIPS DSPr2 assembly optimizations])
755
AM_CONDITIONAL(USE_MIPS_DSPR2, test $have_mips_dspr2 = yes)
757
AC_MSG_RESULT($have_mips_dspr2)
758
if test $enable_mips_dspr2 = yes && test $have_mips_dspr2 = no ; then
759
AC_MSG_ERROR([MIPS DSPr2 instructions not detected])
762
dnl =========================================================================================
763
dnl Check for GNU-style inline assembly support
765
have_gcc_inline_asm=no
766
AC_MSG_CHECKING(whether to use GNU-style inline assembler)
767
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
769
/* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
770
asm volatile ( "\tnop\n" : : : "cc", "memory" );
772
}]])], have_gcc_inline_asm=yes)
774
AC_ARG_ENABLE(gcc-inline-asm,
775
[AC_HELP_STRING([--disable-gcc-inline-asm],
776
[disable GNU-style inline assembler])],
777
[enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
779
if test $enable_gcc_inline_asm = no ; then
780
have_gcc_inline_asm=disabled
783
if test $have_gcc_inline_asm = yes ; then
784
AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
787
AC_MSG_RESULT($have_gcc_inline_asm)
788
if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
789
AC_MSG_ERROR([GNU-style inline assembler not detected])
792
AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
794
dnl ==============================================
795
dnl Static test programs
797
AC_ARG_ENABLE(static-testprogs,
798
[AC_HELP_STRING([--enable-static-testprogs],
799
[build test programs as static binaries [default=no]])],
800
[enable_static_testprogs=$enableval], [enable_static_testprogs=no])
802
TESTPROGS_EXTRA_LDFLAGS=
803
if test "x$enable_static_testprogs" = "xyes" ; then
804
TESTPROGS_EXTRA_LDFLAGS="-all-static"
806
AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
808
dnl ==============================================
811
AC_ARG_ENABLE(timers,
812
[AC_HELP_STRING([--enable-timers],
813
[enable TIMER_BEGIN and TIMER_END macros [default=no]])],
814
[enable_timers=$enableval], [enable_timers=no])
816
if test $enable_timers = yes ; then
817
AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
819
AC_SUBST(PIXMAN_TIMERS)
821
dnl ===================================
825
[AC_HELP_STRING([--enable-gtk],
826
[enable tests using GTK+ [default=auto]])],
827
[enable_gtk=$enableval], [enable_gtk=auto])
831
if test $enable_gtk = yes ; then
832
AC_CHECK_LIB([pixman-1], [pixman_version_string])
833
PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16 pixman-1])
836
if test $enable_gtk = auto ; then
837
AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
840
if test $enable_gtk = auto ; then
841
PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16 pixman-1], [enable_gtk=yes], [enable_gtk=no])
844
AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
849
dnl =====================================
850
dnl posix_memalign, sigaction, alarm, gettimeofday
852
AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
853
if test x$have_posix_memalign = xyes; then
854
AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
857
AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
858
if test x$have_sigaction = xyes; then
859
AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
862
AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
863
if test x$have_alarm = xyes; then
864
AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
867
AC_CHECK_HEADER([sys/mman.h],
868
[AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
870
AC_CHECK_FUNC(mmap, have_mmap=yes, have_mmap=no)
871
if test x$have_mmap = xyes; then
872
AC_DEFINE(HAVE_MMAP, 1, [Whether we have mmap()])
875
AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
876
if test x$have_mprotect = xyes; then
877
AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
880
AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
881
if test x$have_getpagesize = xyes; then
882
AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
885
AC_CHECK_HEADER([fenv.h],
886
[AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
888
AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
889
if test x$have_feenableexcept = xyes; then
890
AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
893
AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
894
AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
895
if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
896
AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
899
dnl =====================================
900
dnl Check for missing sqrtf() as, e.g., for Solaris 9
902
AC_SEARCH_LIBS([sqrtf], [m], [],
903
[AC_DEFINE([sqrtf], [sqrt],
904
[Define to sqrt if you do not have the `sqrtf' function.])])
906
dnl =====================================
907
dnl Thread local storage
909
AC_MSG_CHECKING(for thread local storage (TLS) support)
910
AC_CACHE_VAL(ac_cv_tls, [
912
keywords="__thread __declspec(thread)"
913
for kw in $keywords ; do
915
#if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
916
#error This MinGW version has broken __thread support
919
#error OpenBSD has broken __thread support
922
int $kw test;], [], [ac_cv_tls=$kw; break])
925
AC_MSG_RESULT($ac_cv_tls)
927
if test "$ac_cv_tls" != "none"; then
928
AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [The compiler supported TLS storage class])
935
m4_define([pthread_test_program],AC_LANG_SOURCE([[dnl
939
static pthread_once_t once_control = PTHREAD_ONCE_INIT;
940
static pthread_key_t key;
945
pthread_key_create (&key, NULL);
953
if (pthread_once (&once_control, make_key) != 0)
959
value = pthread_getspecific (key);
962
value = malloc (100);
963
pthread_setspecific (key, value);
970
AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
971
if test "z$support_for_pthreads" != "zyes"; then
972
PIXMAN_LINK_WITH_ENV(
973
[$1], [pthread_test_program],
974
[PTHREAD_CFLAGS="$CFLAGS"
976
PTHREAD_LDFLAGS="$LDFLAGS"
977
support_for_pthreads=yes])
981
support_for_pthreads=no
983
AC_MSG_CHECKING(for pthreads)
985
PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
986
PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
987
PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
989
if test $support_for_pthreads = yes; then
990
AC_DEFINE([HAVE_PTHREADS], [], [Whether pthreads is supported])
991
if test $ac_cv_tls = none ; then
992
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
996
AC_MSG_RESULT($support_for_pthreads)
998
AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
999
AC_SUBST(HAVE_PTHREADS)
1000
AC_SUBST(PTHREAD_LDFLAGS)
1001
AC_SUBST(PTHREAD_LIBS)
1002
AC_SUBST(PTHREAD_CFLAGS)
1004
dnl =====================================
1005
dnl __attribute__((constructor))
1007
support_for_attribute_constructor=no
1009
AC_MSG_CHECKING(for __attribute__((constructor)))
1010
AC_LINK_IFELSE([AC_LANG_SOURCE([[
1011
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
1012
/* attribute 'constructor' is supported since gcc 2.7, but some compilers
1013
* may only pretend to be gcc, so let's try to actually use it
1016
static void __attribute__((constructor)) constructor_function () { x = 0; }
1017
int main (void) { return x; }
1019
#error not gcc or gcc version is older than 2.7
1021
]])], support_for_attribute_constructor=yes)
1023
if test x$support_for_attribute_constructor = xyes; then
1024
AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
1025
[],[Whether the tool chain supports __attribute__((constructor))])
1028
AC_MSG_RESULT($support_for_attribute_constructor)
1029
AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
1031
dnl =====================================
1034
support_for_float128=no
1036
AC_MSG_CHECKING(for __float128)
1037
AC_LINK_IFELSE([AC_LANG_SOURCE([[
1038
__float128 a = 1.0Q, b = 2.0Q; int main (void) { return a + b; }
1039
]])], support_for_float128=yes)
1041
if test x$support_for_float128 = xyes; then
1042
AC_DEFINE([HAVE_FLOAT128], [], [Whether the tool chain supports __float128])
1045
AC_MSG_RESULT($support_for_float128)
1047
dnl =====================================
1050
support_for_builtin_clz=no
1052
AC_MSG_CHECKING(for __builtin_clz)
1053
AC_LINK_IFELSE([AC_LANG_SOURCE([[
1054
unsigned int x = 11; int main (void) { return __builtin_clz(x); }
1055
]])], support_for_builtin_clz=yes)
1057
if test x$support_for_builtin_clz = xyes; then
1058
AC_DEFINE([HAVE_BUILTIN_CLZ], [], [Whether the compiler supports __builtin_clz])
1061
AC_MSG_RESULT($support_for_builtin_clz)
1063
dnl =====================================
1064
dnl GCC vector extensions
1066
support_for_gcc_vector_extensions=no
1068
AC_MSG_CHECKING(for GCC vector extensions)
1069
AC_LINK_IFELSE([AC_LANG_SOURCE([[
1070
unsigned int __attribute__ ((vector_size(16))) e, a, b;
1071
int main (void) { e = a - ((b << 27) + (b >> (32 - 27))) + 1; return e[0]; }
1072
]])], support_for_gcc_vector_extensions=yes)
1074
if test x$support_for_gcc_vector_extensions = xyes; then
1075
AC_DEFINE([HAVE_GCC_VECTOR_EXTENSIONS], [],
1076
[Whether the compiler supports GCC vector extensions])
1079
AC_MSG_RESULT($support_for_gcc_vector_extensions)
1081
dnl ==================
1084
AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
1085
[have_libpng=$enableval], [have_libpng=auto])
1087
case x$have_libpng in
1088
xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
1090
*) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
1093
if test x$have_libpng = xyes; then
1094
AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
1097
AC_SUBST(HAVE_LIBPNG)
1099
AC_OUTPUT([pixman-1.pc
1100
pixman-1-uninstalled.pc
1103
pixman/pixman-version.h
1107
m4_if(m4_eval(pixman_minor % 2), [1], [
1109
echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
1111
echo " Thanks for testing this development snapshot of pixman. Please"
1112
echo " report any problems you find, either by sending email to "
1114
echo " pixman@lists.freedesktop.org"
1116
echo " or by filing a bug at "
1118
echo " https://bugs.freedesktop.org/enter_bug.cgi?product=pixman "
1120
echo " If you are looking for a stable release of pixman, please note "
1121
echo " that stable releases have _even_ minor version numbers. Ie., "
1122
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 "
1123
echo " development snapshot that may contain bugs and experimental "
1126
echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"