diff options
Diffstat (limited to 'libs/pixman-0.40.0/meson.build')
-rw-r--r-- | libs/pixman-0.40.0/meson.build | 542 |
1 files changed, 0 insertions, 542 deletions
diff --git a/libs/pixman-0.40.0/meson.build b/libs/pixman-0.40.0/meson.build deleted file mode 100644 index 1cec227..0000000 --- a/libs/pixman-0.40.0/meson.build +++ /dev/null @@ -1,542 +0,0 @@ -# Copyright © 2018 Intel Corporation - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -project( - 'pixman', - ['c'], - version : '0.40.0', - license : 'MIT', - meson_version : '>= 0.50.0', - default_options : ['buildtype=debugoptimized'], -) - -config = configuration_data() -cc = meson.get_compiler('c') -null_dep = dependency('', required : false) - -add_project_arguments( - cc.get_supported_arguments([ - '-Wdeclaration-after-statement', - '-fno-strict-aliasing', - '-fvisibility=hidden', - '-Wundef', - ]), - language : ['c'] -) - -# GCC and Clang both ignore -Wno options that they don't recognize, so test for -# -W<opt>, then add -Wno-<opt> if it's ignored -foreach opt : ['unused-local-typedefs'] - if cc.has_argument('-W' + opt) - add_project_arguments(['-Wno-' + opt], language : ['c']) - endif -endforeach - -use_loongson_mmi = get_option('loongson-mmi') -have_loongson_mmi = false -loongson_mmi_flags = ['-mloongson-mmi'] -if not use_loongson_mmi.disabled() - if host_machine.cpu_family() == 'mips64' and cc.compiles(''' - #ifndef __mips_loongson_vector_rev - #error "Loongson Multimedia Instructions are only available on Loongson" - #endif - #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) - #error "Need GCC >= 4.4 for Loongson MMI compilation" - #endif - #include "pixman/loongson-mmintrin.h" - int main () { - union { - __m64 v; - char c[8]; - } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} }; - int b = 4; - __m64 c = _mm_srli_pi16 (a.v, b); - return 0; - }''', - args : loongson_mmi_flags, - include_directories : include_directories('.'), - name : 'Loongson MMI Intrinsic Support') - have_loongson_mmi = true - endif -endif - -if have_loongson_mmi - config.set10('USE_LOONGSON_MMI', true) -elif use_loongson_mmi.enabled() - error('Loongson MMI Support unavailable, but required') -endif - -use_mmx = get_option('mmx') -have_mmx = false -mmx_flags = [] - -if cc.get_id() == 'msvc' - mmx_flags = ['/w14710', '/w14714', '/wd4244'] -elif cc.get_id() == 'sun' - mmx_flags = ['-xarch=sse'] -else - mmx_flags = ['-mmmx', '-Winline'] -endif -if not use_mmx.disabled() - if host_machine.cpu_family() == 'x86_64' or cc.get_id() == 'msvc' - have_mmx = true - elif host_machine.cpu_family() == 'x86' and cc.compiles(''' - #include <mmintrin.h> - #include <stdint.h> - - /* Check support for block expressions */ - #define _mm_shuffle_pi16(A, N) \ - ({ \ - __m64 ret; \ - \ - /* Some versions of clang will choke on K */ \ - asm ("pshufw %2, %1, %0\n\t" \ - : "=y" (ret) \ - : "y" (A), "K" ((const int8_t)N) \ - ); \ - \ - ret; \ - }) - - int main () { - __m64 v = _mm_cvtsi32_si64 (1); - __m64 w; - - w = _mm_shuffle_pi16(v, 5); - - /* Some versions of clang will choke on this */ - asm ("pmulhuw %1, %0\n\t" - : "+y" (w) - : "y" (v) - ); - - return _mm_cvtsi64_si32 (v); - }''', - args : mmx_flags, - name : 'MMX Intrinsic Support') - have_mmx = true - endif -endif - -if have_mmx - # Inline assembly do not work on X64 MSVC, so we use - # compatibility intrinsics there - if cc.get_id() != 'msvc' or host_machine.cpu_family() != 'x86_64' - config.set10('USE_X86_MMX', true) - endif -elif use_mmx.enabled() - error('MMX Support unavailable, but required') -endif - -use_sse2 = get_option('sse2') -have_sse2 = false -sse2_flags = [] -if cc.get_id() == 'sun' - sse2_flags = ['-xarch=sse2'] -elif cc.get_id() != 'msvc' - sse2_flags = ['-msse2', '-Winline'] -endif -if not use_sse2.disabled() - if host_machine.cpu_family() == 'x86' - if cc.compiles(''' - #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)) - # if !defined(__amd64__) && !defined(__x86_64__) - # error "Need GCC >= 4.2 for SSE2 intrinsics on x86" - # endif - #endif - #include <mmintrin.h> - #include <xmmintrin.h> - #include <emmintrin.h> - int param; - int main () { - __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c; - c = _mm_xor_si128 (a, b); - return _mm_cvtsi128_si32(c); - }''', - args : sse2_flags, - name : 'SSE2 Intrinsic Support') - have_sse2 = true - endif - elif host_machine.cpu_family() == 'x86_64' - have_sse2 = true - endif -endif - -if have_sse2 - config.set10('USE_SSE2', true) -elif use_sse2.enabled() - error('sse2 Support unavailable, but required') -endif - -use_ssse3 = get_option('ssse3') -have_ssse3 = false -ssse3_flags = [] -if cc.get_id() != 'msvc' - ssse3_flags = ['-mssse3', '-Winline'] -endif - -# x64 pre-2010 MSVC compilers crashes when building the ssse3 code -if not use_ssse3.disabled() and not (cc.get_id() == 'msvc' and cc.version().version_compare('<16') and host_machine.cpu_family() == 'x86_64') - if host_machine.cpu_family().startswith('x86') - if cc.compiles(''' - #include <mmintrin.h> - #include <xmmintrin.h> - #include <emmintrin.h> - int param; - int main () { - __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c; - c = _mm_xor_si128 (a, b); - return _mm_cvtsi128_si32(c); - }''', - args : ssse3_flags, - name : 'SSSE3 Intrinsic Support') - have_ssse3 = true - endif - endif -endif - -if have_ssse3 - config.set10('USE_SSSE3', true) -elif use_ssse3.enabled() - error('ssse3 Support unavailable, but required') -endif - -use_vmx = get_option('vmx') -have_vmx = false -vmx_flags = ['-maltivec', '-mabi=altivec'] -if not use_vmx.disabled() - if host_machine.cpu_family().startswith('ppc') - if cc.compiles(''' - #include <altivec.h> - int main () { - vector unsigned int v = vec_splat_u32 (1); - v = vec_sub (v, v); - return 0; - }''', - args : vmx_flags, - name : 'VMX/Altivec Intrinsic Support') - have_vmx = true - endif - endif -endif - -if have_vmx - config.set10('USE_VMX', true) -elif use_vmx.enabled() - error('vmx Support unavailable, but required') -endif - -use_armv6_simd = get_option('arm-simd') -have_armv6_simd = false -if not use_armv6_simd.disabled() - if host_machine.cpu_family() == 'arm' - if cc.compiles(files('arm-simd-test.S'), name : 'ARMv6 SIMD Intrinsic Support') - have_armv6_simd = true - endif - endif -endif - -if have_armv6_simd - config.set10('USE_ARM_SIMD', true) -elif use_armv6_simd.enabled() - error('ARMv6 SIMD Support unavailable, but required') -endif - -use_neon = get_option('neon') -have_neon = false -if not use_neon.disabled() - if host_machine.cpu_family() == 'arm' - if cc.compiles(files('neon-test.S'), name : 'NEON Intrinsic Support') - have_neon = true - endif - endif -endif - -if have_neon - config.set10('USE_ARM_NEON', true) -elif use_neon.enabled() - error('NEON Support unavailable, but required') -endif - -use_iwmmxt = get_option('iwmmxt') -have_iwmmxt = false -iwmmxt_flags = ['-flax-vector-conversions', '-Winline'] -if not use_iwmmxt.disabled() - if get_option('iwmmxt2') - iwmmxt_flags += '-march=iwmmxt2' - else - iwmmxt_flags += '-march=iwmmxt' - endif - - if host_machine.cpu_family() == 'arm' - if cc.compiles(''' - #ifndef __IWMMXT__ - #error "IWMMXT not enabled (with -march=iwmmxt)" - #endif - #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)) - #error "Need GCC >= 4.8 for IWMMXT intrinsics" - #endif - #include <mmintrin.h> - int main () { - union { - __m64 v; - char c[8]; - } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} }; - int b = 4; - __m64 c = _mm_srli_si64 (a.v, b); - } - ''', - args : iwmmxt_flags, - name : 'IWMMXT Intrinsic Support') - have_iwmmxt = true - endif - endif -endif - -if have_iwmmxt - config.set10('USE_ARM_IWMMXT', true) -elif use_iwmmxt.enabled() - error('IWMMXT Support unavailable, but required') -endif - -use_mips_dspr2 = get_option('mips-dspr2') -have_mips_dspr2 = false -mips_dspr2_flags = ['-mdspr2'] -if not use_mips_dspr2.disabled() - if host_machine.cpu_family() == 'mips32' - if cc.compiles(''' - #if !(defined(__mips__) && __mips_isa_rev >= 2) - #error MIPS DSPr2 is currently only available on MIPS32r2 platforms. - #endif - int - main () - { - int c = 0, a = 0, b = 0; - __asm__ __volatile__ ( - "precr.qb.ph %[c], %[a], %[b] \n\t" - : [c] "=r" (c) - : [a] "r" (a), [b] "r" (b) - ); - return c; - }''', - args : mipds_dspr2_flags, - name : 'DSPr2 Intrinsic Support') - have_mips_dspr2 = true - endif - endif -endif - -if have_mips_dspr2 - config.set10('USE_MIPS_DSPR2', true) -elif use_mips_dspr2.enabled() - error('MIPS DSPr2 Support unavailable, but required') -endif - -use_gnu_asm = get_option('gnu-inline-asm') -if not use_gnu_asm.disabled() - if cc.compiles(''' - int main () { - /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */ - asm volatile ( "\tnop\n" : : : "cc", "memory" ); - return 0; - } - ''', - name : 'GNU Inline ASM support.') - config.set10('USE_GCC_INLINE_ASM', true) - elif use_gnu_asm.enabled() - error('GNU inline assembly support missing but required.') - endif -endif - -if get_option('timers') - config.set('PIXMAN_TIMERS', 1) -endif -if get_option('gnuplot') - config.set('PIXMAN_GNUPLOT', 1) -endif - -if cc.get_id() != 'msvc' - dep_openmp = dependency('openmp', required : get_option('openmp')) - if dep_openmp.found() - config.set10('USE_OPENMP', true) - elif meson.version().version_compare('<0.51.0') - # In versions of meson before 0.51 the openmp dependency can still - # inject arguments in the the auto case when it is not found, the - # detection does work correctly in that case however, so we just - # replace dep_openmp with null_dep to work around this. - dep_openmp = null_dep - endif -else - # the MSVC implementation of openmp is not compliant enough for our - # uses here, so we disable it here. - # Please see: https://stackoverflow.com/questions/12560243/using-threadprivate-directive-in-visual-studio - dep_openmp = null_dep -endif - -dep_gtk = dependency('gtk+-2.0', version : '>= 2.16', required : get_option('gtk')) -dep_glib = dependency('glib-2.0', required : get_option('gtk')) -dep_pixman = dependency('pixman-1', required : get_option('gtk'), - version : '>= ' + meson.project_version()) - -dep_png = null_dep -if not get_option('libpng').disabled() - dep_png = dependency('libpng', required : false) - - # We need to look for the right library to link to for libpng, - # when looking for libpng manually - foreach png_ver : [ '16', '15', '14', '13', '12', '10' ] - if not dep_png.found() - dep_png = cc.find_library('libpng@0@'.format(png_ver), has_headers : ['png.h'], required : false) - endif - endforeach - - if get_option('libpng').enabled() and not dep_png.found() - error('libpng support requested but libpng library not found') - endif -endif - -if dep_png.found() - config.set('HAVE_LIBPNG', 1) -endif -dep_m = cc.find_library('m', required : false) -dep_threads = dependency('threads') - -# MSVC-style compilers do not come with pthreads, so we must link -# to it explicitly, currently pthreads-win32 is supported -pthreads_found = false - -if dep_threads.found() and cc.has_header('pthread.h') - if cc.get_argument_syntax() == 'msvc' - pthread_lib = null_dep - foreach pthread_type : ['VC3', 'VSE3', 'VCE3', 'VC2', 'VSE2', 'VCE2'] - if not pthread_lib.found() - pthread_lib = cc.find_library('pthread@0@'.format(pthread_type), required : false) - endif - endforeach - if pthread_lib.found() - pthreads_found = true - dep_threads = pthread_lib - endif - else - pthreads_found = true - endif -endif - -if pthreads_found - config.set('HAVE_PTHREADS', 1) -endif - -funcs = ['sigaction', 'alarm', 'mprotect', 'getpagesize', 'mmap', 'getisax', 'gettimeofday'] -# mingw claimes to have posix_memalign, but it doesn't -if host_machine.system() != 'windows' - funcs += 'posix_memalign' -endif - -foreach f : funcs - if cc.has_function(f) - config.set('HAVE_@0@'.format(f.to_upper()), 1) - endif -endforeach - -# This is only used in one test, that defines _GNU_SOURCE -if cc.has_function('feenableexcept', - prefix : '#define _GNU_SOURCE\n#include <fenv.h>', - dependencies : dep_m) - config.set('HAVE_FEENABLEEXCEPT', 1) -endif - -if cc.has_header_symbol('fenv.h', 'FE_DIVBYZERO') - config.set('HAVE_FEDIVBYZERO', 1) -endif - -foreach h : ['sys/mman.h', 'fenv.h', 'unistd.h'] - if cc.check_header(h) - config.set('HAVE_@0@'.format(h.underscorify().to_upper()), 1) - endif -endforeach - -# gcc on Windows only warns that __declspec(thread) isn't supported, -# passing -Werror=attributes makes it fail. -if (host_machine.system() == 'windows' and - cc.compiles('int __declspec(thread) foo;', - args : cc.get_supported_arguments(['-Werror=attributes']), - name : 'TLS via __declspec(thread)')) - config.set('TLS', '__declspec(thread)') -elif cc.compiles('int __thread foo;', name : 'TLS via __thread') - config.set('TLS', '__thread') -endif - -if cc.links(''' - static int x = 1; - static void __attribute__((constructor)) constructor_function () { x = 0; } - int main (void) { return x; } - ''', - name : '__attribute__((constructor))') - config.set('TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR', 1) -endif - -if cc.links( - ' __float128 a = 1.0Q, b = 2.0Q; int main (void) { return a + b; }', - name : 'Has float128 support') - config.set('HAVE_FLOAT128', 1) -endif - -if cc.has_function('clz') - config.set('HAVE_BUILTIN_CLZ', 1) -endif - -if cc.links(''' - unsigned int __attribute__ ((vector_size(16))) e, a, b; - int main (void) { e = a - ((b << 27) + (b >> (32 - 27))) + 1; return e[0]; } - ''', - name : 'Support for GCC vector extensions') - config.set('HAVE_GCC_VECTOR_EXTENSIONS', 1) -endif - -if host_machine.endian() == 'big' - config.set('WORDS_BIGENDIAN', 1) -endif - -config.set('SIZEOF_LONG', cc.sizeof('long')) - -# Required to make pixman-private.h -config.set('PACKAGE', 'foo') - -version_conf = configuration_data() -split = meson.project_version().split('.') -version_conf.set('PIXMAN_VERSION_MAJOR', split[0]) -version_conf.set('PIXMAN_VERSION_MINOR', split[1]) -version_conf.set('PIXMAN_VERSION_MICRO', split[2]) - -add_project_arguments('-DHAVE_CONFIG_H', language : ['c']) - -subdir('pixman') -subdir('test') -subdir('demos') - -pkg = import('pkgconfig') -pkg.generate( - name : 'Pixman', - filebase : 'pixman-1', - description : 'The pixman library (version 1)', - libraries : libpixman, - subdirs: 'pixman-1', - version : meson.project_version(), -) |