meson.build revision 338bf337
1338bf337Smrg# Copyright © 2018 Intel Corporation
2338bf337Smrg
3338bf337Smrg# Permission is hereby granted, free of charge, to any person obtaining a copy
4338bf337Smrg# of this software and associated documentation files (the "Software"), to deal
5338bf337Smrg# in the Software without restriction, including without limitation the rights
6338bf337Smrg# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7338bf337Smrg# copies of the Software, and to permit persons to whom the Software is
8338bf337Smrg# furnished to do so, subject to the following conditions:
9338bf337Smrg
10338bf337Smrg# The above copyright notice and this permission notice shall be included in
11338bf337Smrg# all copies or substantial portions of the Software.
12338bf337Smrg
13338bf337Smrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14338bf337Smrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15338bf337Smrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16338bf337Smrg# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17338bf337Smrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18338bf337Smrg# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19338bf337Smrg# SOFTWARE.
20338bf337Smrg
21338bf337Smrgproject(
22338bf337Smrg  'pixman',
23338bf337Smrg  ['c'],
24338bf337Smrg  version : '0.38.0',
25338bf337Smrg  license : 'MIT',
26338bf337Smrg  meson_version : '>= 0.47.2',
27338bf337Smrg  default_options : ['buildtype=debugoptimized'],
28338bf337Smrg)
29338bf337Smrg
30338bf337Smrgconfig = configuration_data()
31338bf337Smrgcc = meson.get_compiler('c')
32338bf337Smrgnull_dep = dependency('', required : false)
33338bf337Smrg
34338bf337Smrgadd_project_arguments(
35338bf337Smrg  cc.get_supported_arguments([
36338bf337Smrg    '-Wdeclaration-after-statement',
37338bf337Smrg    '-fno-strict-aliasing',
38338bf337Smrg    '-fvisibility=hidden',
39338bf337Smrg  ]),
40338bf337Smrg  language : ['c']
41338bf337Smrg)
42338bf337Smrg
43338bf337Smrg# GCC and Clang both ignore -Wno options that they don't recognize, so test for
44338bf337Smrg# -W<opt>, then add -Wno-<opt> if it's ignored
45338bf337Smrgforeach opt : ['unused-local-typedefs']
46338bf337Smrg  if cc.has_argument('-W' + opt)
47338bf337Smrg    add_project_arguments(['-Wno-' + opt], language : ['c'])
48338bf337Smrg  endif
49338bf337Smrgendforeach
50338bf337Smrg
51338bf337Smrguse_loongson_mmi = get_option('loongson-mmi')
52338bf337Smrghave_loongson_mmi = false
53338bf337Smrgloongson_mmi_flags = ['-mach=loongson2f']
54338bf337Smrgif not use_loongson_mmi.disabled()
55338bf337Smrg  if host_machine.cpu_family() == 'mips64' and cc.compiles('''
56338bf337Smrg      #ifndef __mips_loongson_vector_rev
57338bf337Smrg      #error "Loongson Multimedia Instructions are only available on Loongson"
58338bf337Smrg      #endif
59338bf337Smrg      #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4))
60338bf337Smrg      #error "Need GCC >= 4.4 for Loongson MMI compilation"
61338bf337Smrg      #endif
62338bf337Smrg      #include "pixman/loongson-mmintrin.h"
63338bf337Smrg      int main () {
64338bf337Smrg        union {
65338bf337Smrg          __m64 v;
66338bf337Smrg          char c[8];
67338bf337Smrg        } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
68338bf337Smrg        int b = 4;
69338bf337Smrg        __m64 c = _mm_srli_pi16 (a.v, b);
70338bf337Smrg        return 0;
71338bf337Smrg      }''',
72338bf337Smrg      args : loongson_mmi_flags,
73338bf337Smrg      name : 'Loongson MMI Intrinsic Support')
74338bf337Smrg    have_loongson_mmi = true
75338bf337Smrg  endif
76338bf337Smrgendif
77338bf337Smrg
78338bf337Smrgif have_loongson_mmi
79338bf337Smrg  config.set10('USE_LOONGSON_MMI', true)
80338bf337Smrgelif use_loongson_mmi.enabled()
81338bf337Smrg  error('Loongson MMI Support unavailable, but required')
82338bf337Smrgendif
83338bf337Smrg
84338bf337Smrguse_mmx = get_option('mmx')
85338bf337Smrghave_mmx = false
86338bf337Smrgmmx_flags = ['-mmmx', '-Winline']
87338bf337Smrgif not use_mmx.disabled()
88338bf337Smrg  if host_machine.cpu_family() == 'x86_64'
89338bf337Smrg    have_mmx = true
90338bf337Smrg  elif host_machine.cpu_family() == 'x86' and cc.compiles('''
91338bf337Smrg      #include <mmintrin.h>
92338bf337Smrg      #include <stdint.h>
93338bf337Smrg
94338bf337Smrg      /* Check support for block expressions */
95338bf337Smrg      #define _mm_shuffle_pi16(A, N)                    \
96338bf337Smrg        ({                                              \
97338bf337Smrg        __m64 ret;                                      \
98338bf337Smrg                                                        \
99338bf337Smrg        /* Some versions of clang will choke on K */    \
100338bf337Smrg        asm ("pshufw %2, %1, %0\n\t"                    \
101338bf337Smrg             : "=y" (ret)                               \
102338bf337Smrg             : "y" (A), "K" ((const int8_t)N)           \
103338bf337Smrg        );                                              \
104338bf337Smrg                                                        \
105338bf337Smrg        ret;                                            \
106338bf337Smrg        })
107338bf337Smrg
108338bf337Smrg      int main () {
109338bf337Smrg          __m64 v = _mm_cvtsi32_si64 (1);
110338bf337Smrg          __m64 w;
111338bf337Smrg
112338bf337Smrg          w = _mm_shuffle_pi16(v, 5);
113338bf337Smrg
114338bf337Smrg          /* Some versions of clang will choke on this */
115338bf337Smrg          asm ("pmulhuw %1, %0\n\t"
116338bf337Smrg               : "+y" (w)
117338bf337Smrg               : "y" (v)
118338bf337Smrg          );
119338bf337Smrg
120338bf337Smrg          return _mm_cvtsi64_si32 (v);
121338bf337Smrg      }''',
122338bf337Smrg      args : mmx_flags,
123338bf337Smrg      name : 'MMX Intrinsic Support')
124338bf337Smrg    have_mmx = true
125338bf337Smrg  endif
126338bf337Smrgendif
127338bf337Smrg
128338bf337Smrgif have_mmx
129338bf337Smrg  config.set10('USE_X86_MMX', true)
130338bf337Smrgelif use_mmx.enabled()
131338bf337Smrg  error('MMX Support unavailable, but required')
132338bf337Smrgendif
133338bf337Smrg
134338bf337Smrguse_sse2 = get_option('sse2')
135338bf337Smrghave_sse2 = false
136338bf337Smrgsse2_flags = ['-msse2', '-Winline']
137338bf337Smrgif not use_sse2.disabled()
138338bf337Smrg  if host_machine.cpu_family() == 'x86'
139338bf337Smrg    if cc.compiles('''
140338bf337Smrg        #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
141338bf337Smrg        #   if !defined(__amd64__) && !defined(__x86_64__)
142338bf337Smrg        #      error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
143338bf337Smrg        #   endif
144338bf337Smrg        #endif
145338bf337Smrg        #include <mmintrin.h>
146338bf337Smrg        #include <xmmintrin.h>
147338bf337Smrg        #include <emmintrin.h>
148338bf337Smrg        int param;
149338bf337Smrg        int main () {
150338bf337Smrg          __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
151338bf337Smrg          c = _mm_xor_si128 (a, b);
152338bf337Smrg          return _mm_cvtsi128_si32(c);
153338bf337Smrg        }''',
154338bf337Smrg        args : sse2_flags,
155338bf337Smrg        name : 'SSE2 Intrinsic Support')
156338bf337Smrg      have_sse2 = true
157338bf337Smrg    endif
158338bf337Smrg  elif host_machine.cpu_family() == 'x86_64'
159338bf337Smrg    have_sse2 = true
160338bf337Smrg  endif
161338bf337Smrgendif
162338bf337Smrg
163338bf337Smrgif have_sse2
164338bf337Smrg  config.set10('USE_SSE2', true)
165338bf337Smrgelif use_sse2.enabled()
166338bf337Smrg  error('sse2 Support unavailable, but required')
167338bf337Smrgendif
168338bf337Smrg
169338bf337Smrguse_ssse3 = get_option('ssse3')
170338bf337Smrghave_ssse3 = false
171338bf337Smrgssse3_flags =['-mssse3', '-Winline']
172338bf337Smrgif not use_ssse3.disabled()
173338bf337Smrg  if host_machine.cpu_family().startswith('x86')
174338bf337Smrg    if cc.compiles('''
175338bf337Smrg        #include <mmintrin.h>
176338bf337Smrg        #include <xmmintrin.h>
177338bf337Smrg        #include <emmintrin.h>
178338bf337Smrg        int param;
179338bf337Smrg        int main () {
180338bf337Smrg          __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
181338bf337Smrg          c = _mm_xor_si128 (a, b);
182338bf337Smrg          return _mm_cvtsi128_si32(c);
183338bf337Smrg        }''',
184338bf337Smrg        args : ssse3_flags,
185338bf337Smrg        name : 'SSSE3 Intrinsic Support')
186338bf337Smrg      have_ssse3 = true
187338bf337Smrg    endif
188338bf337Smrg  endif
189338bf337Smrgendif
190338bf337Smrg
191338bf337Smrgif have_ssse3
192338bf337Smrg  config.set10('USE_SSSE3', true)
193338bf337Smrgelif use_ssse3.enabled()
194338bf337Smrg  error('ssse3 Support unavailable, but required')
195338bf337Smrgendif
196338bf337Smrg
197338bf337Smrguse_vmx = get_option('vmx')
198338bf337Smrghave_vmx = false
199338bf337Smrgvmx_flags = ['-maltivec', '-mabi=altivec']
200338bf337Smrgif not use_vmx.disabled()
201338bf337Smrg  if host_machine.cpu_family().startswith('ppc')
202338bf337Smrg    if cc.compiles('''
203338bf337Smrg        #include <altivec.h>
204338bf337Smrg        int main () {
205338bf337Smrg            vector unsigned int v = vec_splat_u32 (1);
206338bf337Smrg            v = vec_sub (v, v);
207338bf337Smrg            return 0;
208338bf337Smrg        }''',
209338bf337Smrg        args : vmx_flags,
210338bf337Smrg        name : 'VMX/Altivec Intrinsic Support')
211338bf337Smrg      have_vmx = true
212338bf337Smrg    endif
213338bf337Smrg  endif
214338bf337Smrgendif
215338bf337Smrg
216338bf337Smrgif have_vmx
217338bf337Smrg  config.set10('USE_VMX', true)
218338bf337Smrgelif use_vmx.enabled()
219338bf337Smrg  error('vmx Support unavailable, but required')
220338bf337Smrgendif
221338bf337Smrg
222338bf337Smrguse_armv6_simd = get_option('arm-simd')
223338bf337Smrghave_armv6_simd = false
224338bf337Smrgif not use_armv6_simd.disabled()
225338bf337Smrg  if host_machine.cpu_family() == 'arm'
226338bf337Smrg    if cc.compiles('''
227338bf337Smrg        .text
228338bf337Smrg        .arch armv6
229338bf337Smrg        .object_arch armv4
230338bf337Smrg        .arm
231338bf337Smrg        .altmacro
232338bf337Smrg        #ifndef __ARM_EABI__
233338bf337Smrg        #error EABI is required (to be sure that calling conventions are compatible)
234338bf337Smrg        #endif
235338bf337Smrg        pld [r0]
236338bf337Smrg        uqadd8 r0, r0, r0
237338bf337Smrg        ''',
238338bf337Smrg        args : ['-x assembler-with-cpp'],
239338bf337Smrg        name : 'ARMv6 SIMD Intrinsic Support')
240338bf337Smrg      have_armv6_simd = true
241338bf337Smrg    endif
242338bf337Smrg  endif
243338bf337Smrgendif
244338bf337Smrg
245338bf337Smrgif have_armv6_simd
246338bf337Smrg  config.set10('USE_ARM_SIMD', true)
247338bf337Smrgelif use_armv6_simd.enabled()
248338bf337Smrg  error('ARMv6 SIMD Support unavailable, but required')
249338bf337Smrgendif
250338bf337Smrg
251338bf337Smrguse_neon = get_option('neon')
252338bf337Smrghave_neon = false
253338bf337Smrgif not use_neon.disabled()
254338bf337Smrg  if host_machine.cpu_family() == 'arm'
255338bf337Smrg    if cc.compiles('''
256338bf337Smrg        .text
257338bf337Smrg        .fpu neon
258338bf337Smrg        .arch armv7a
259338bf337Smrg        .object_arch armv4
260338bf337Smrg        .eabi_attribute 10, 0
261338bf337Smrg        .arm
262338bf337Smrg        .altmacro
263338bf337Smrg        #ifndef __ARM_EABI__
264338bf337Smrg        #error EABI is required (to be sure that calling conventions are compatible)
265338bf337Smrg        #endif
266338bf337Smrg        pld [r0]
267338bf337Smrg        vmovn.u16 d0, q0
268338bf337Smrg        ''',
269338bf337Smrg        args : ['-x assembler-with-cpp'],
270338bf337Smrg        name : 'NEON Intrinsic Support')
271338bf337Smrg      have_neon = true
272338bf337Smrg    endif
273338bf337Smrg  endif
274338bf337Smrgendif
275338bf337Smrg
276338bf337Smrgif have_neon
277338bf337Smrg  config.set10('USE_ARM_NEON', true)
278338bf337Smrgelif use_neon.enabled()
279338bf337Smrg  error('NEON Support unavailable, but required')
280338bf337Smrgendif
281338bf337Smrg
282338bf337Smrguse_iwmmxt = get_option('iwmmxt')
283338bf337Smrghave_iwmmxt = false
284338bf337Smrgiwmmxt_flags = ['-flax-vector-conversions', '-Winline']
285338bf337Smrgif not use_iwmmxt.disabled()
286338bf337Smrg  if get_option('iwmmxt2')
287338bf337Smrg    iwmmxt_flags += '-march=iwmmxt2'
288338bf337Smrg  else
289338bf337Smrg    iwmmxt_flags += '-march=iwmmxt'
290338bf337Smrg  endif
291338bf337Smrg
292338bf337Smrg  if host_machine.cpu_family() == 'arm'
293338bf337Smrg    if cc.compiles('''
294338bf337Smrg        #ifndef __IWMMXT__
295338bf337Smrg        #error "IWMMXT not enabled (with -march=iwmmxt)"
296338bf337Smrg        #endif
297338bf337Smrg        #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8))
298338bf337Smrg        #error "Need GCC >= 4.8 for IWMMXT intrinsics"
299338bf337Smrg        #endif
300338bf337Smrg        #include <mmintrin.h>
301338bf337Smrg        int main () {
302338bf337Smrg          union {
303338bf337Smrg            __m64 v;
304338bf337Smrg            char c[8];
305338bf337Smrg          } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
306338bf337Smrg          int b = 4;
307338bf337Smrg          __m64 c = _mm_srli_si64 (a.v, b);
308338bf337Smrg        }
309338bf337Smrg        ''',
310338bf337Smrg        args : iwmmxt_flags,
311338bf337Smrg        name : 'IWMMXT Intrinsic Support')
312338bf337Smrg      have_iwmmxt = true
313338bf337Smrg    endif
314338bf337Smrg  endif
315338bf337Smrgendif
316338bf337Smrg
317338bf337Smrgif have_iwmmxt
318338bf337Smrg  config.set10('USE_ARM_IWMMXT', true)
319338bf337Smrgelif use_iwmmxt.enabled()
320338bf337Smrg  error('NEON Support unavailable, but required')
321338bf337Smrgendif
322338bf337Smrg
323338bf337Smrguse_mips_dspr2 = get_option('mips-dspr2')
324338bf337Smrghave_mips_dspr2 = false
325338bf337Smrgmips_dspr2_flags = ['-mdspr2']
326338bf337Smrgif not use_mips_dspr2.disabled()
327338bf337Smrg  if host_machine.cpu_family() == 'mips32'
328338bf337Smrg    if cc.compiles('''
329338bf337Smrg        #if !(defined(__mips__) &&  __mips_isa_rev >= 2)
330338bf337Smrg        #error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
331338bf337Smrg        #endif
332338bf337Smrg        int
333338bf337Smrg        main ()
334338bf337Smrg        {
335338bf337Smrg            int c = 0, a = 0, b = 0;
336338bf337Smrg            __asm__ __volatile__ (
337338bf337Smrg                "precr.qb.ph %[c], %[a], %[b]          \n\t"
338338bf337Smrg                : [c] "=r" (c)
339338bf337Smrg                : [a] "r" (a), [b] "r" (b)
340338bf337Smrg            );
341338bf337Smrg            return c;
342338bf337Smrg        }''',
343338bf337Smrg        args : mipds_dspr2_flags,
344338bf337Smrg        name : 'DSPr2 Intrinsic Support')
345338bf337Smrg      have_mips_dspr2 = true
346338bf337Smrg    endif
347338bf337Smrg  endif
348338bf337Smrgendif
349338bf337Smrg
350338bf337Smrgif have_mips_dspr2
351338bf337Smrg  config.set10('USE_MIPS_DSPR2', true)
352338bf337Smrgelif use_mips_dspr2.enabled()
353338bf337Smrg  error('MIPS DSPr2 Support unavailable, but required')
354338bf337Smrgendif
355338bf337Smrg
356338bf337Smrguse_gnu_asm = get_option('gnu-inline-asm')
357338bf337Smrgif not use_gnu_asm.disabled()
358338bf337Smrg  if cc.compiles('''
359338bf337Smrg      int main () {
360338bf337Smrg        /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
361338bf337Smrg        asm volatile ( "\tnop\n" : : : "cc", "memory" );
362338bf337Smrg        return 0;
363338bf337Smrg      }
364338bf337Smrg      ''',
365338bf337Smrg      name : 'GNU Inline ASM support.')
366338bf337Smrg    config.set10('USE_GCC_INLINE_ASM', true)
367338bf337Smrg  elif use_gnu_asm.enabled()
368338bf337Smrg    error('GNU inline assembly support missing but required.')
369338bf337Smrg  endif
370338bf337Smrgendif
371338bf337Smrg
372338bf337Smrgif get_option('timers')
373338bf337Smrg  config.set('PIXMAN_TIMERS', 1)
374338bf337Smrgendif
375338bf337Smrgif get_option('gnuplot')
376338bf337Smrg  config.set('PIXMAN_GNUPLOT', 1)
377338bf337Smrgendif
378338bf337Smrg
379338bf337Smrguse_openmp = get_option('openmp')
380338bf337Smrgdep_openmp = null_dep
381338bf337Smrgif not use_openmp.disabled()
382338bf337Smrg  dep_openmp = dependency('openmp', required : get_option('openmp'))
383338bf337Smrg  if dep_openmp.found()
384338bf337Smrg    config.set10('USE_OPENMP', true)
385338bf337Smrg  endif
386338bf337Smrgendif
387338bf337Smrg
388338bf337Smrgdep_gtk = dependency('gtk+-2.0', version : '>= 2.16', required : get_option('gtk'))
389338bf337Smrgdep_glib = dependency('glib-2.0', required : get_option('gtk'))
390338bf337Smrgdep_pixman = dependency('pixman-1', required : get_option('gtk'),
391338bf337Smrg                        version : '>= ' + meson.project_version())
392338bf337Smrgdep_png = dependency('libpng', required : get_option('libpng'))
393338bf337Smrgif dep_png.found()
394338bf337Smrg  config.set('HAVE_LIBPNG', 1)
395338bf337Smrgendif
396338bf337Smrgdep_m = cc.find_library('m', required : false)
397338bf337Smrgdep_threads = dependency('threads')
398338bf337Smrgif dep_threads.found()
399338bf337Smrg  config.set('HAVE_PTHREADS', 1)
400338bf337Smrgendif
401338bf337Smrg
402338bf337Smrgfuncs = ['sigaction', 'alarm', 'mprotect', 'getpagesize', 'mmap']
403338bf337Smrg# mingw claimes to have posix_memalign, but it doesn't
404338bf337Smrgif host_machine.system() != 'windows'
405338bf337Smrg  funcs += 'posix_memalign'
406338bf337Smrgendif
407338bf337Smrg
408338bf337Smrgforeach f : funcs
409338bf337Smrg  if cc.has_function(f)
410338bf337Smrg    config.set('HAVE_@0@'.format(f.to_upper()), 1)
411338bf337Smrg  endif
412338bf337Smrgendforeach
413338bf337Smrg
414338bf337Smrgif cc.has_function('gettimeofday')
415338bf337Smrg  config.set('HAVE_GETTIMEOFDAY', 1)
416338bf337Smrgendif
417338bf337Smrg
418338bf337Smrg# This is only used in one test, that defines _GNU_SOURCE
419338bf337Smrgif cc.has_function('feenableexcept',
420338bf337Smrg                   prefix : '#define _GNU_SOURCE\n#include <fenv.h>',
421338bf337Smrg                   dependencies : dep_m)
422338bf337Smrg  config.set('HAVE_FEENABLEEXCEPT', 1)
423338bf337Smrgendif
424338bf337Smrg
425338bf337Smrgif cc.has_header_symbol('fenv.h', 'FE_DIVBYZERO')
426338bf337Smrg  config.set('HAVE_FEDIVBYZERO', 1)
427338bf337Smrgendif
428338bf337Smrg
429338bf337Smrgforeach h : ['sys/mman.h', 'fenv.h', 'unistd.h']
430338bf337Smrg  if cc.check_header(h)
431338bf337Smrg    config.set('HAVE_@0@'.format(h.underscorify().to_upper()), 1)
432338bf337Smrg  endif
433338bf337Smrgendforeach
434338bf337Smrg
435338bf337Smrgif (host_machine.system() == 'windows' and
436338bf337Smrg    cc.compiles('int __declspec(thread) foo;', name : 'TLS via __declspec(thread)'))
437338bf337Smrg  config.set('TLS', '__declspec(thread)')
438338bf337Smrgelif cc.compiles('int __thread foo;', name : 'TLS via __thread')
439338bf337Smrg  config.set('TLS', '__thread')
440338bf337Smrgendif
441338bf337Smrg
442338bf337Smrgif cc.links('''
443338bf337Smrg    static int x = 1;
444338bf337Smrg    static void __attribute__((constructor)) constructor_function () { x = 0; }
445338bf337Smrg    int main (void) { return x; }
446338bf337Smrg    ''',
447338bf337Smrg    name : '__attribute__((constructor))')
448338bf337Smrg  config.set('TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR', 1)
449338bf337Smrgendif
450338bf337Smrg
451338bf337Smrgif cc.links(
452338bf337Smrg    ' __float128 a = 1.0Q, b = 2.0Q; int main (void) { return a + b; }',
453338bf337Smrg    name : 'Has float128 support')
454338bf337Smrg  config.set('HAVE_FLOAT128', 1)
455338bf337Smrgendif
456338bf337Smrg
457338bf337Smrgif cc.has_function('clz')
458338bf337Smrg  config.set('HAVE_BUILTIN_CLZ', 1)
459338bf337Smrgendif
460338bf337Smrg
461338bf337Smrgif cc.links('''
462338bf337Smrg    unsigned int __attribute__ ((vector_size(16))) e, a, b;
463338bf337Smrg    int main (void) { e = a - ((b << 27) + (b >> (32 - 27))) + 1; return e[0]; }
464338bf337Smrg    ''',
465338bf337Smrg    name : 'Support for GCC vector extensions')
466338bf337Smrg  config.set('HAVE_GCC_VECTOR_EXTENSIONS', 1)
467338bf337Smrgendif
468338bf337Smrg
469338bf337Smrgif host_machine.endian() == 'big'
470338bf337Smrg  config.set('WORDS_BIGENDIAN', 1)
471338bf337Smrgendif
472338bf337Smrg
473338bf337Smrg# Required to make pixman-private.h
474338bf337Smrgconfig.set('PACKAGE', 'foo')
475338bf337Smrg
476338bf337Smrgversion_conf = configuration_data()
477338bf337Smrgsplit = meson.project_version().split('.')
478338bf337Smrgversion_conf.set('PIXMAN_VERSION_MAJOR', split[0])
479338bf337Smrgversion_conf.set('PIXMAN_VERSION_MINOR', split[1])
480338bf337Smrgversion_conf.set('PIXMAN_VERSION_MICRO', split[2])
481338bf337Smrg
482338bf337Smrgadd_project_arguments('-DHAVE_CONFIG_H', language : ['c'])
483338bf337Smrg
484338bf337Smrgsubdir('pixman')
485338bf337Smrgsubdir('test')
486338bf337Smrgsubdir('demos')
487338bf337Smrg
488338bf337Smrgpkg = import('pkgconfig')
489338bf337Smrgpkg.generate(
490338bf337Smrg  name : 'Pixman',
491338bf337Smrg  filebase : 'pixman-1',
492338bf337Smrg  description : 'The pixman library (version 1)',
493338bf337Smrg  libraries : libpixman,
494338bf337Smrg  subdirs: 'pixman-1',
495338bf337Smrg  version : meson.project_version(),
496338bf337Smrg)
497