1*61046927SAndroid Build Coastguard Worker# Copyright © 2017-2020 Intel Corporation 2*61046927SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard Workerproject( 5*61046927SAndroid Build Coastguard Worker 'mesa', 6*61046927SAndroid Build Coastguard Worker ['c', 'cpp'], 7*61046927SAndroid Build Coastguard Worker version : files('VERSION'), 8*61046927SAndroid Build Coastguard Worker license : 'MIT', 9*61046927SAndroid Build Coastguard Worker meson_version : '>= 1.1.0', 10*61046927SAndroid Build Coastguard Worker default_options : [ 11*61046927SAndroid Build Coastguard Worker 'buildtype=debugoptimized', 12*61046927SAndroid Build Coastguard Worker 'b_ndebug=if-release', 13*61046927SAndroid Build Coastguard Worker 'c_std=c11', 14*61046927SAndroid Build Coastguard Worker 'cpp_std=c++17', 15*61046927SAndroid Build Coastguard Worker 'rust_std=2021', 16*61046927SAndroid Build Coastguard Worker 'build.rust_std=2021', 17*61046927SAndroid Build Coastguard Worker ], 18*61046927SAndroid Build Coastguard Worker) 19*61046927SAndroid Build Coastguard Worker 20*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'darwin' 21*61046927SAndroid Build Coastguard Worker add_languages('objc', native : false) 22*61046927SAndroid Build Coastguard Worker add_global_arguments('-fobjc-arc', language : 'objc') 23*61046927SAndroid Build Coastguard Workerendif 24*61046927SAndroid Build Coastguard Worker 25*61046927SAndroid Build Coastguard Workercc = meson.get_compiler('c') 26*61046927SAndroid Build Coastguard Workercpp = meson.get_compiler('cpp') 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Workersizeof_pointer = cc.sizeof('void*').to_string() 29*61046927SAndroid Build Coastguard Worker 30*61046927SAndroid Build Coastguard Workernull_dep = dependency('', required : false) 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard Workerif get_option('layout') != 'mirror' 33*61046927SAndroid Build Coastguard Worker error('`mirror` is the only build directory layout supported') 34*61046927SAndroid Build Coastguard Workerendif 35*61046927SAndroid Build Coastguard Worker 36*61046927SAndroid Build Coastguard Workerwith_mesa_debug = get_option('buildtype') == 'debug' 37*61046927SAndroid Build Coastguard Worker 38*61046927SAndroid Build Coastguard Worker# This means the final value of b_ndebug==true 39*61046927SAndroid Build Coastguard Workerwith_mesa_ndebug = get_option('b_ndebug') == 'true' or (get_option('buildtype') == 'release' and get_option('b_ndebug') == 'if-release') 40*61046927SAndroid Build Coastguard Worker 41*61046927SAndroid Build Coastguard Worker# Arguments for the preprocessor, put these in a separate array from the C and 42*61046927SAndroid Build Coastguard Worker# C++ (cpp in meson terminology) arguments since they need to be added to the 43*61046927SAndroid Build Coastguard Worker# default arguments for both C and C++. 44*61046927SAndroid Build Coastguard Workerpre_args = [ 45*61046927SAndroid Build Coastguard Worker '-D__STDC_CONSTANT_MACROS', 46*61046927SAndroid Build Coastguard Worker '-D__STDC_FORMAT_MACROS', 47*61046927SAndroid Build Coastguard Worker '-D__STDC_LIMIT_MACROS', 48*61046927SAndroid Build Coastguard Worker '-DPACKAGE_VERSION="@0@"'.format(meson.project_version()), 49*61046927SAndroid Build Coastguard Worker '-DPACKAGE_BUGREPORT="https://gitlab.freedesktop.org/mesa/mesa/-/issues"', 50*61046927SAndroid Build Coastguard Worker] 51*61046927SAndroid Build Coastguard Worker# Arguments for c or cpp compiler, can be compiler options 52*61046927SAndroid Build Coastguard Workerc_cpp_args = [] 53*61046927SAndroid Build Coastguard Worker 54*61046927SAndroid Build Coastguard Workerc_args = [] 55*61046927SAndroid Build Coastguard Workercpp_args = [] 56*61046927SAndroid Build Coastguard Worker 57*61046927SAndroid Build Coastguard Workerwith_moltenvk_dir = get_option('moltenvk-dir') 58*61046927SAndroid Build Coastguard Workerwith_vulkan_icd_dir = get_option('vulkan-icd-dir') 59*61046927SAndroid Build Coastguard Workerwith_tests = get_option('build-tests') 60*61046927SAndroid Build Coastguard Workerwith_glcpp_tests = get_option('enable-glcpp-tests') 61*61046927SAndroid Build Coastguard Workerwith_aco_tests = get_option('build-aco-tests') 62*61046927SAndroid Build Coastguard Workerwith_glx_read_only_text = get_option('glx-read-only-text') 63*61046927SAndroid Build Coastguard Workerwith_glx_direct = get_option('glx-direct') 64*61046927SAndroid Build Coastguard Workerwith_osmesa = get_option('osmesa') 65*61046927SAndroid Build Coastguard Workerwith_vulkan_overlay_layer = get_option('vulkan-layers').contains('overlay') 66*61046927SAndroid Build Coastguard Workerwith_vulkan_device_select_layer = get_option('vulkan-layers').contains('device-select') 67*61046927SAndroid Build Coastguard Workerwith_vulkan_screenshot_layer = get_option('vulkan-layers').contains('screenshot') 68*61046927SAndroid Build Coastguard Workerwith_tools = get_option('tools') 69*61046927SAndroid Build Coastguard Workerif with_tools.contains('all') 70*61046927SAndroid Build Coastguard Worker with_tools = [ 71*61046927SAndroid Build Coastguard Worker 'drm-shim', 72*61046927SAndroid Build Coastguard Worker 'dlclose-skip', 73*61046927SAndroid Build Coastguard Worker 'etnaviv', 74*61046927SAndroid Build Coastguard Worker 'freedreno', 75*61046927SAndroid Build Coastguard Worker 'glsl', 76*61046927SAndroid Build Coastguard Worker 'intel', 77*61046927SAndroid Build Coastguard Worker 'intel-ui', 78*61046927SAndroid Build Coastguard Worker 'lima', 79*61046927SAndroid Build Coastguard Worker 'nir', 80*61046927SAndroid Build Coastguard Worker 'nouveau', 81*61046927SAndroid Build Coastguard Worker 'asahi', 82*61046927SAndroid Build Coastguard Worker 'imagination', 83*61046927SAndroid Build Coastguard Worker ] 84*61046927SAndroid Build Coastguard Workerendif 85*61046927SAndroid Build Coastguard Worker 86*61046927SAndroid Build Coastguard Workerwith_any_vulkan_layers = get_option('vulkan-layers').length() != 0 87*61046927SAndroid Build Coastguard Workerwith_intel_tools = with_tools.contains('intel') or with_tools.contains('intel-ui') 88*61046927SAndroid Build Coastguard Workerwith_imgui = with_intel_tools or with_vulkan_overlay_layer 89*61046927SAndroid Build Coastguard Worker 90*61046927SAndroid Build Coastguard Workerdri_drivers_path = get_option('dri-drivers-path') 91*61046927SAndroid Build Coastguard Workerif dri_drivers_path == '' 92*61046927SAndroid Build Coastguard Worker dri_drivers_path = join_paths(get_option('prefix'), get_option('libdir'), 'dri') 93*61046927SAndroid Build Coastguard Workerendif 94*61046927SAndroid Build Coastguard Worker 95*61046927SAndroid Build Coastguard Workergbm_backends_path = get_option('gbm-backends-path') 96*61046927SAndroid Build Coastguard Workerif gbm_backends_path == '' 97*61046927SAndroid Build Coastguard Worker gbm_backends_path = join_paths(get_option('prefix'), get_option('libdir'), 'gbm') 98*61046927SAndroid Build Coastguard Workerendif 99*61046927SAndroid Build Coastguard Worker 100*61046927SAndroid Build Coastguard Worker# Default shared glapi disabled for windows, enabled elsewhere. 101*61046927SAndroid Build Coastguard Workerwith_shared_glapi = get_option('shared-glapi') \ 102*61046927SAndroid Build Coastguard Worker .disable_auto_if(host_machine.system() == 'windows') \ 103*61046927SAndroid Build Coastguard Worker .allowed() 104*61046927SAndroid Build Coastguard Worker 105*61046927SAndroid Build Coastguard Workerwith_opengl = get_option('opengl') 106*61046927SAndroid Build Coastguard Worker 107*61046927SAndroid Build Coastguard Workerwith_gles1 = get_option('gles1') \ 108*61046927SAndroid Build Coastguard Worker .require(with_shared_glapi, error_message : 'OpengGL ES 1.x requires shared-glapi') \ 109*61046927SAndroid Build Coastguard Worker .allowed() 110*61046927SAndroid Build Coastguard Worker 111*61046927SAndroid Build Coastguard Workerwith_gles2 = get_option('gles2') \ 112*61046927SAndroid Build Coastguard Worker .require(with_shared_glapi, error_message : 'OpengGL ES 2.x requires shared-glapi') \ 113*61046927SAndroid Build Coastguard Worker .allowed() 114*61046927SAndroid Build Coastguard Worker 115*61046927SAndroid Build Coastguard Workerpre_args += '-DHAVE_OPENGL=@0@'.format(with_opengl.to_int()) 116*61046927SAndroid Build Coastguard Workerpre_args += '-DHAVE_OPENGL_ES_1=@0@'.format(with_gles1.to_int()) 117*61046927SAndroid Build Coastguard Workerpre_args += '-DHAVE_OPENGL_ES_2=@0@'.format(with_gles2.to_int()) 118*61046927SAndroid Build Coastguard Worker 119*61046927SAndroid Build Coastguard Workerwith_any_opengl = with_opengl or with_gles1 or with_gles2 120*61046927SAndroid Build Coastguard Worker# Only build shared_glapi if at least one OpenGL API is enabled 121*61046927SAndroid Build Coastguard Workerwith_shared_glapi = with_shared_glapi and with_any_opengl 122*61046927SAndroid Build Coastguard Worker 123*61046927SAndroid Build Coastguard Workersystem_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'gnu/kfreebsd', 'dragonfly', 'linux', 'sunos', 'android', 'managarm'].contains(host_machine.system()) 124*61046927SAndroid Build Coastguard Worker 125*61046927SAndroid Build Coastguard Workergallium_drivers = get_option('gallium-drivers') 126*61046927SAndroid Build Coastguard Workerif gallium_drivers.contains('auto') 127*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 128*61046927SAndroid Build Coastguard Worker # TODO: Sparc 129*61046927SAndroid Build Coastguard Worker if ['x86', 'x86_64'].contains(host_machine.cpu_family()) 130*61046927SAndroid Build Coastguard Worker gallium_drivers = [ 131*61046927SAndroid Build Coastguard Worker 'r300', 'r600', 'radeonsi', 'nouveau', 'virgl', 'svga', 'llvmpipe', 'softpipe', 132*61046927SAndroid Build Coastguard Worker 'iris', 'crocus', 'i915', 'zink' 133*61046927SAndroid Build Coastguard Worker ] 134*61046927SAndroid Build Coastguard Worker elif ['arm', 'aarch64'].contains(host_machine.cpu_family()) 135*61046927SAndroid Build Coastguard Worker gallium_drivers = [ 136*61046927SAndroid Build Coastguard Worker 'v3d', 'vc4', 'freedreno', 'etnaviv', 'nouveau', 'svga', 137*61046927SAndroid Build Coastguard Worker 'tegra', 'virgl', 'lima', 'panfrost', 'llvmpipe', 'softpipe', 'iris', 138*61046927SAndroid Build Coastguard Worker 'zink' 139*61046927SAndroid Build Coastguard Worker ] 140*61046927SAndroid Build Coastguard Worker elif ['mips', 'mips64', 'ppc', 'ppc64', 'riscv32', 'riscv64'].contains(host_machine.cpu_family()) 141*61046927SAndroid Build Coastguard Worker gallium_drivers = [ 142*61046927SAndroid Build Coastguard Worker 'r300', 'r600', 'radeonsi', 'nouveau', 'virgl', 'llvmpipe', 'softpipe', 'zink' 143*61046927SAndroid Build Coastguard Worker ] 144*61046927SAndroid Build Coastguard Worker elif ['loongarch64'].contains(host_machine.cpu_family()) 145*61046927SAndroid Build Coastguard Worker gallium_drivers = [ 146*61046927SAndroid Build Coastguard Worker 'r300', 'r600', 'radeonsi', 'nouveau', 'virgl', 'etnaviv', 'llvmpipe', 'softpipe', 'zink' 147*61046927SAndroid Build Coastguard Worker ] 148*61046927SAndroid Build Coastguard Worker else 149*61046927SAndroid Build Coastguard Worker error('Unknown architecture @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format( 150*61046927SAndroid Build Coastguard Worker host_machine.cpu_family())) 151*61046927SAndroid Build Coastguard Worker endif 152*61046927SAndroid Build Coastguard Worker elif ['windows'].contains(host_machine.system()) 153*61046927SAndroid Build Coastguard Worker gallium_drivers = ['llvmpipe', 'softpipe', 'zink', 'd3d12'] 154*61046927SAndroid Build Coastguard Worker elif ['darwin', 'cygwin', 'haiku'].contains(host_machine.system()) 155*61046927SAndroid Build Coastguard Worker gallium_drivers = ['llvmpipe', 'softpipe'] 156*61046927SAndroid Build Coastguard Worker else 157*61046927SAndroid Build Coastguard Worker error('Unknown OS @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format( 158*61046927SAndroid Build Coastguard Worker host_machine.system())) 159*61046927SAndroid Build Coastguard Worker endif 160*61046927SAndroid Build Coastguard Workerelif gallium_drivers.contains('all') 161*61046927SAndroid Build Coastguard Worker # Build-test everything except for i915, which depends on libdrm-intel which 162*61046927SAndroid Build Coastguard Worker # is not available on non-Intel distros. 163*61046927SAndroid Build Coastguard Worker gallium_drivers = [ 164*61046927SAndroid Build Coastguard Worker 'r300', 'r600', 'radeonsi', 'crocus', 'v3d', 'vc4', 'freedreno', 'etnaviv', 165*61046927SAndroid Build Coastguard Worker 'nouveau', 'svga', 'tegra', 'virgl', 'lima', 'panfrost', 'llvmpipe', 'softpipe', 'iris', 166*61046927SAndroid Build Coastguard Worker 'zink', 'd3d12', 'asahi' 167*61046927SAndroid Build Coastguard Worker ] 168*61046927SAndroid Build Coastguard Workerendif 169*61046927SAndroid Build Coastguard Worker 170*61046927SAndroid Build Coastguard Worker# compatibility for meson configurations asking for 'swrast' 171*61046927SAndroid Build Coastguard Workerwith_swrast = gallium_drivers.contains('swrast') 172*61046927SAndroid Build Coastguard Workerif with_swrast 173*61046927SAndroid Build Coastguard Worker warning('`gallium-drivers=swrast` is a deprecated alias for `gallium-drivers=softpipe,llvmpipe` and will be removed in version 25.0') 174*61046927SAndroid Build Coastguard Workerendif 175*61046927SAndroid Build Coastguard Worker 176*61046927SAndroid Build Coastguard Workerwith_gallium_radeonsi = gallium_drivers.contains('radeonsi') 177*61046927SAndroid Build Coastguard Workerwith_gallium_r300 = gallium_drivers.contains('r300') 178*61046927SAndroid Build Coastguard Workerwith_gallium_r600 = gallium_drivers.contains('r600') 179*61046927SAndroid Build Coastguard Workerwith_gallium_nouveau = gallium_drivers.contains('nouveau') 180*61046927SAndroid Build Coastguard Workerwith_gallium_freedreno = gallium_drivers.contains('freedreno') 181*61046927SAndroid Build Coastguard Workerwith_gallium_softpipe = with_swrast or gallium_drivers.contains('softpipe') 182*61046927SAndroid Build Coastguard Workerwith_gallium_llvmpipe = with_swrast or gallium_drivers.contains('llvmpipe') 183*61046927SAndroid Build Coastguard Workerwith_gallium_vc4 = gallium_drivers.contains('vc4') 184*61046927SAndroid Build Coastguard Workerwith_gallium_v3d = gallium_drivers.contains('v3d') 185*61046927SAndroid Build Coastguard Workerwith_gallium_panfrost = gallium_drivers.contains('panfrost') 186*61046927SAndroid Build Coastguard Workerwith_gallium_etnaviv = gallium_drivers.contains('etnaviv') 187*61046927SAndroid Build Coastguard Workerwith_gallium_tegra = gallium_drivers.contains('tegra') 188*61046927SAndroid Build Coastguard Workerwith_gallium_crocus = gallium_drivers.contains('crocus') 189*61046927SAndroid Build Coastguard Workerwith_gallium_iris = gallium_drivers.contains('iris') 190*61046927SAndroid Build Coastguard Workerwith_gallium_i915 = gallium_drivers.contains('i915') 191*61046927SAndroid Build Coastguard Workerwith_gallium_svga = gallium_drivers.contains('svga') 192*61046927SAndroid Build Coastguard Workerwith_gallium_virgl = gallium_drivers.contains('virgl') 193*61046927SAndroid Build Coastguard Workerwith_gallium_lima = gallium_drivers.contains('lima') 194*61046927SAndroid Build Coastguard Workerwith_gallium_zink = gallium_drivers.contains('zink') 195*61046927SAndroid Build Coastguard Workerwith_gallium_d3d12 = gallium_drivers.contains('d3d12') 196*61046927SAndroid Build Coastguard Workerwith_gallium_asahi = gallium_drivers.contains('asahi') 197*61046927SAndroid Build Coastguard Workerforeach gallium_driver : gallium_drivers 198*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_@0@'.format(gallium_driver.to_upper()) 199*61046927SAndroid Build Coastguard Workerendforeach 200*61046927SAndroid Build Coastguard Worker 201*61046927SAndroid Build Coastguard Worker# compatibility for "swrast" as an internal-ish driver name 202*61046927SAndroid Build Coastguard Workerwith_gallium_swrast = with_gallium_softpipe or with_gallium_llvmpipe 203*61046927SAndroid Build Coastguard Workerif with_gallium_swrast 204*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_SWRAST' 205*61046927SAndroid Build Coastguard Workerendif 206*61046927SAndroid Build Coastguard Worker 207*61046927SAndroid Build Coastguard Workerwith_gallium = gallium_drivers.length() != 0 208*61046927SAndroid Build Coastguard Workerwith_gallium_kmsro = system_has_kms_drm and [ 209*61046927SAndroid Build Coastguard Worker with_gallium_asahi, 210*61046927SAndroid Build Coastguard Worker with_gallium_etnaviv, 211*61046927SAndroid Build Coastguard Worker with_gallium_freedreno, 212*61046927SAndroid Build Coastguard Worker with_gallium_lima, 213*61046927SAndroid Build Coastguard Worker with_gallium_panfrost, 214*61046927SAndroid Build Coastguard Worker with_gallium_v3d, 215*61046927SAndroid Build Coastguard Worker with_gallium_vc4, 216*61046927SAndroid Build Coastguard Worker].contains(true) 217*61046927SAndroid Build Coastguard Worker 218*61046927SAndroid Build Coastguard Worker_vulkan_drivers = get_option('vulkan-drivers') 219*61046927SAndroid Build Coastguard Workerif _vulkan_drivers.contains('auto') 220*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 221*61046927SAndroid Build Coastguard Worker if host_machine.cpu_family().startswith('x86') 222*61046927SAndroid Build Coastguard Worker _vulkan_drivers = ['amd', 'intel', 'intel_hasvk', 'nouveau', 'swrast'] 223*61046927SAndroid Build Coastguard Worker elif ['arm', 'aarch64'].contains(host_machine.cpu_family()) 224*61046927SAndroid Build Coastguard Worker _vulkan_drivers = ['swrast', 'intel'] 225*61046927SAndroid Build Coastguard Worker elif ['mips', 'mips64', 'ppc', 'ppc64', 'riscv32', 'riscv64'].contains(host_machine.cpu_family()) 226*61046927SAndroid Build Coastguard Worker _vulkan_drivers = ['amd', 'swrast'] 227*61046927SAndroid Build Coastguard Worker elif ['loongarch64'].contains(host_machine.cpu_family()) 228*61046927SAndroid Build Coastguard Worker _vulkan_drivers = ['amd', 'swrast'] 229*61046927SAndroid Build Coastguard Worker else 230*61046927SAndroid Build Coastguard Worker error('Unknown architecture @0@. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.'.format( 231*61046927SAndroid Build Coastguard Worker host_machine.cpu_family())) 232*61046927SAndroid Build Coastguard Worker endif 233*61046927SAndroid Build Coastguard Worker elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system()) 234*61046927SAndroid Build Coastguard Worker # No vulkan driver supports windows or macOS currently 235*61046927SAndroid Build Coastguard Worker _vulkan_drivers = [] 236*61046927SAndroid Build Coastguard Worker else 237*61046927SAndroid Build Coastguard Worker error('Unknown OS @0@. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.'.format( 238*61046927SAndroid Build Coastguard Worker host_machine.system())) 239*61046927SAndroid Build Coastguard Worker endif 240*61046927SAndroid Build Coastguard Workerelif _vulkan_drivers.contains('all') 241*61046927SAndroid Build Coastguard Worker # Build every vulkan driver regardless of architecture. 242*61046927SAndroid Build Coastguard Worker _vulkan_drivers = ['amd', 'intel', 'intel_hasvk', 'swrast', 243*61046927SAndroid Build Coastguard Worker 'freedreno', 'panfrost', 'virtio', 'broadcom', 244*61046927SAndroid Build Coastguard Worker 'imagination-experimental', 'microsoft-experimental', 245*61046927SAndroid Build Coastguard Worker 'nouveau', 'asahi', 'gfxstream'] 246*61046927SAndroid Build Coastguard Workerendif 247*61046927SAndroid Build Coastguard Worker 248*61046927SAndroid Build Coastguard Workerwith_intel_vk = _vulkan_drivers.contains('intel') 249*61046927SAndroid Build Coastguard Workerwith_intel_hasvk = _vulkan_drivers.contains('intel_hasvk') 250*61046927SAndroid Build Coastguard Workerwith_amd_vk = _vulkan_drivers.contains('amd') 251*61046927SAndroid Build Coastguard Workerwith_freedreno_vk = _vulkan_drivers.contains('freedreno') 252*61046927SAndroid Build Coastguard Workerwith_panfrost_vk = _vulkan_drivers.contains('panfrost') 253*61046927SAndroid Build Coastguard Workerwith_swrast_vk = _vulkan_drivers.contains('swrast') 254*61046927SAndroid Build Coastguard Workerwith_virtio_vk = _vulkan_drivers.contains('virtio') 255*61046927SAndroid Build Coastguard Workerwith_broadcom_vk = _vulkan_drivers.contains('broadcom') 256*61046927SAndroid Build Coastguard Workerwith_imagination_vk = _vulkan_drivers.contains('imagination-experimental') 257*61046927SAndroid Build Coastguard Workerwith_imagination_srv = get_option('imagination-srv') 258*61046927SAndroid Build Coastguard Workerwith_microsoft_vk = _vulkan_drivers.contains('microsoft-experimental') 259*61046927SAndroid Build Coastguard Workerwith_nouveau_vk = _vulkan_drivers.contains('nouveau') 260*61046927SAndroid Build Coastguard Workerwith_asahi_vk = _vulkan_drivers.contains('asahi') 261*61046927SAndroid Build Coastguard Workerwith_gfxstream_vk = _vulkan_drivers.contains('gfxstream') 262*61046927SAndroid Build Coastguard Workerwith_any_vk = _vulkan_drivers.length() != 0 263*61046927SAndroid Build Coastguard Worker 264*61046927SAndroid Build Coastguard Workerif with_any_vk and host_machine.system() == 'windows' and meson.version().version_compare('< 1.3') 265*61046927SAndroid Build Coastguard Worker error('Vulkan drivers on Windows require meson 1.3 or newer') 266*61046927SAndroid Build Coastguard Workerendif 267*61046927SAndroid Build Coastguard Worker 268*61046927SAndroid Build Coastguard Workerwith_any_llvmpipe = with_gallium_llvmpipe or with_swrast_vk 269*61046927SAndroid Build Coastguard Workerwith_gallium_or_lvp = with_gallium or with_swrast_vk 270*61046927SAndroid Build Coastguard Worker 271*61046927SAndroid Build Coastguard Workerfreedreno_kmds = get_option('freedreno-kmds') 272*61046927SAndroid Build Coastguard Workerif freedreno_kmds.length() != 0 and freedreno_kmds != [ 'msm' ] and with_freedreno_vk 273*61046927SAndroid Build Coastguard Worker if freedreno_kmds.contains('msm') 274*61046927SAndroid Build Coastguard Worker warning('Turnip with the DRM KMD will require libdrm to always be present at runtime which may not always be the case on platforms such as Android.') 275*61046927SAndroid Build Coastguard Worker elif with_gallium_kmsro 276*61046927SAndroid Build Coastguard Worker warning('As a side-effect, Turnip is forced to link with libdrm when built alongside Gallium DRM drivers which platforms such as Android may not have available at runtime.') 277*61046927SAndroid Build Coastguard Worker elif _vulkan_drivers != [ 'freedreno' ] 278*61046927SAndroid Build Coastguard Worker warning('Turnip is forced to link with libdrm when built alongside other Vulkan drivers which platforms such as Android may not have available at runtime.') 279*61046927SAndroid Build Coastguard Worker else 280*61046927SAndroid Build Coastguard Worker # If DRM support isn't needed, we can get rid of it since linking 281*61046927SAndroid Build Coastguard Worker # to libdrm can be a potential compatibility hazard. 282*61046927SAndroid Build Coastguard Worker system_has_kms_drm = false 283*61046927SAndroid Build Coastguard Worker endif 284*61046927SAndroid Build Coastguard Workerendif 285*61046927SAndroid Build Coastguard Worker 286*61046927SAndroid Build Coastguard Workerwith_dri = false 287*61046927SAndroid Build Coastguard Workerif with_gallium and system_has_kms_drm 288*61046927SAndroid Build Coastguard Worker _glx = get_option('glx') 289*61046927SAndroid Build Coastguard Worker _egl = get_option('egl') 290*61046927SAndroid Build Coastguard Worker if _glx == 'dri' or _egl.enabled() or (_glx == 'disabled' and _egl.allowed()) 291*61046927SAndroid Build Coastguard Worker with_dri = true 292*61046927SAndroid Build Coastguard Worker endif 293*61046927SAndroid Build Coastguard Workerendif 294*61046927SAndroid Build Coastguard Worker 295*61046927SAndroid Build Coastguard Workerwith_any_broadcom = [ 296*61046927SAndroid Build Coastguard Worker with_gallium_vc4, 297*61046927SAndroid Build Coastguard Worker with_gallium_v3d, 298*61046927SAndroid Build Coastguard Worker with_broadcom_vk, 299*61046927SAndroid Build Coastguard Worker].contains(true) 300*61046927SAndroid Build Coastguard Worker 301*61046927SAndroid Build Coastguard Workerif get_option('intel-clc') != 'system' 302*61046927SAndroid Build Coastguard Worker # Require intel-clc with Anv & Iris (for internal shaders) 303*61046927SAndroid Build Coastguard Worker with_intel_clc = get_option('intel-clc') == 'enabled' or \ 304*61046927SAndroid Build Coastguard Worker with_intel_vk or with_gallium_iris 305*61046927SAndroid Build Coastguard Workerelse 306*61046927SAndroid Build Coastguard Worker with_intel_clc = false 307*61046927SAndroid Build Coastguard Workerendif 308*61046927SAndroid Build Coastguard Worker 309*61046927SAndroid Build Coastguard Workerwith_intel_vk_rt = get_option('intel-rt') \ 310*61046927SAndroid Build Coastguard Worker .disable_auto_if(not with_intel_vk) \ 311*61046927SAndroid Build Coastguard Worker .disable_if(host_machine.cpu_family() != 'x86_64', error_message : 'Intel Ray Tracing is only supported on x86_64') \ 312*61046927SAndroid Build Coastguard Worker .allowed() 313*61046927SAndroid Build Coastguard Worker 314*61046927SAndroid Build Coastguard Workerwith_any_intel = [ 315*61046927SAndroid Build Coastguard Worker with_gallium_crocus, 316*61046927SAndroid Build Coastguard Worker with_gallium_i915, 317*61046927SAndroid Build Coastguard Worker with_gallium_iris, 318*61046927SAndroid Build Coastguard Worker with_intel_clc, 319*61046927SAndroid Build Coastguard Worker with_intel_hasvk, 320*61046927SAndroid Build Coastguard Worker with_intel_tools, 321*61046927SAndroid Build Coastguard Worker with_intel_vk, 322*61046927SAndroid Build Coastguard Worker].contains(true) 323*61046927SAndroid Build Coastguard Workerwith_any_nouveau = with_gallium_nouveau or with_nouveau_vk 324*61046927SAndroid Build Coastguard Worker 325*61046927SAndroid Build Coastguard Worker# needed in the loader 326*61046927SAndroid Build Coastguard Workerif with_nouveau_vk 327*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_NVK' 328*61046927SAndroid Build Coastguard Workerendif 329*61046927SAndroid Build Coastguard Worker 330*61046927SAndroid Build Coastguard Workerif with_gallium_tegra and not with_gallium_nouveau 331*61046927SAndroid Build Coastguard Worker error('tegra driver requires nouveau driver') 332*61046927SAndroid Build Coastguard Workerendif 333*61046927SAndroid Build Coastguard Workerif with_aco_tests and not with_amd_vk 334*61046927SAndroid Build Coastguard Worker error('ACO tests require Radv') 335*61046927SAndroid Build Coastguard Workerendif 336*61046927SAndroid Build Coastguard Worker 337*61046927SAndroid Build Coastguard Workerwith_microsoft_clc = get_option('microsoft-clc').enabled() 338*61046927SAndroid Build Coastguard Workerwith_spirv_to_dxil = get_option('spirv-to-dxil') 339*61046927SAndroid Build Coastguard Worker 340*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'darwin' 341*61046927SAndroid Build Coastguard Worker with_dri_platform = 'apple' 342*61046927SAndroid Build Coastguard Worker pre_args += '-DBUILDING_MESA' 343*61046927SAndroid Build Coastguard Workerelif ['windows', 'cygwin'].contains(host_machine.system()) 344*61046927SAndroid Build Coastguard Worker with_dri_platform = 'windows' 345*61046927SAndroid Build Coastguard Workerelif system_has_kms_drm 346*61046927SAndroid Build Coastguard Worker with_dri_platform = 'drm' 347*61046927SAndroid Build Coastguard Workerelse 348*61046927SAndroid Build Coastguard Worker # FIXME: haiku doesn't use dri, and xlib doesn't use dri, probably should 349*61046927SAndroid Build Coastguard Worker # assert here that one of those cases has been met. 350*61046927SAndroid Build Coastguard Worker # FIXME: illumos ends up here as well 351*61046927SAndroid Build Coastguard Worker with_dri_platform = 'none' 352*61046927SAndroid Build Coastguard Workerendif 353*61046927SAndroid Build Coastguard Worker 354*61046927SAndroid Build Coastguard Workerwith_vulkan_beta = get_option('vulkan-beta') 355*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'darwin' 356*61046927SAndroid Build Coastguard Worker #macOS seems to need beta extensions to build for now: 357*61046927SAndroid Build Coastguard Worker with_vulkan_beta = true 358*61046927SAndroid Build Coastguard Workerendif 359*61046927SAndroid Build Coastguard Workerif with_vulkan_beta 360*61046927SAndroid Build Coastguard Worker pre_args += '-DVK_ENABLE_BETA_EXTENSIONS' 361*61046927SAndroid Build Coastguard Workerendif 362*61046927SAndroid Build Coastguard Worker 363*61046927SAndroid Build Coastguard Worker_codecs = get_option('video-codecs') 364*61046927SAndroid Build Coastguard Workerpatent_codecs = ['vc1dec', 'h264dec', 'h264enc', 'h265dec', 'h265enc'] 365*61046927SAndroid Build Coastguard Workerfree_codecs = ['av1dec', 'av1enc', 'vp9dec'] 366*61046927SAndroid Build Coastguard Workerall_codecs = patent_codecs + free_codecs 367*61046927SAndroid Build Coastguard Worker 368*61046927SAndroid Build Coastguard Workerif _codecs.contains('all') 369*61046927SAndroid Build Coastguard Worker _codecs = all_codecs 370*61046927SAndroid Build Coastguard Workerelif _codecs.contains('all_free') 371*61046927SAndroid Build Coastguard Worker selected_codecs = _codecs 372*61046927SAndroid Build Coastguard Worker _codecs = free_codecs 373*61046927SAndroid Build Coastguard Worker foreach c : patent_codecs 374*61046927SAndroid Build Coastguard Worker if selected_codecs.contains(c) 375*61046927SAndroid Build Coastguard Worker _codecs += c 376*61046927SAndroid Build Coastguard Worker endif 377*61046927SAndroid Build Coastguard Worker endforeach 378*61046927SAndroid Build Coastguard Workerendif 379*61046927SAndroid Build Coastguard Workerforeach c : all_codecs 380*61046927SAndroid Build Coastguard Worker pre_args += '-DVIDEO_CODEC_@0@=@1@'.format(c.to_upper(), _codecs.contains(c).to_int()) 381*61046927SAndroid Build Coastguard Workerendforeach 382*61046927SAndroid Build Coastguard Worker 383*61046927SAndroid Build Coastguard Worker_platforms = get_option('platforms') 384*61046927SAndroid Build Coastguard Workerif _platforms.contains('auto') 385*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 386*61046927SAndroid Build Coastguard Worker _platforms = ['x11', 'wayland'] 387*61046927SAndroid Build Coastguard Worker elif host_machine.system() == 'cygwin' 388*61046927SAndroid Build Coastguard Worker _platforms = ['x11'] 389*61046927SAndroid Build Coastguard Worker elif host_machine.system() == 'haiku' 390*61046927SAndroid Build Coastguard Worker _platforms = ['haiku'] 391*61046927SAndroid Build Coastguard Worker elif host_machine.system() == 'windows' 392*61046927SAndroid Build Coastguard Worker _platforms = ['windows'] 393*61046927SAndroid Build Coastguard Worker elif host_machine.system() == 'darwin' 394*61046927SAndroid Build Coastguard Worker _platforms = ['x11', 'macos'] 395*61046927SAndroid Build Coastguard Worker else 396*61046927SAndroid Build Coastguard Worker error('Unknown OS @0@. Please pass -Dplatforms to set platforms. Patches gladly accepted to fix this.'.format( 397*61046927SAndroid Build Coastguard Worker host_machine.system())) 398*61046927SAndroid Build Coastguard Worker endif 399*61046927SAndroid Build Coastguard Workerendif 400*61046927SAndroid Build Coastguard Worker 401*61046927SAndroid Build Coastguard Workerwith_platform_android = _platforms.contains('android') 402*61046927SAndroid Build Coastguard Workerwith_platform_x11 = _platforms.contains('x11') 403*61046927SAndroid Build Coastguard Workerwith_platform_xcb = _platforms.contains('xcb') 404*61046927SAndroid Build Coastguard Workerwith_platform_wayland = _platforms.contains('wayland') 405*61046927SAndroid Build Coastguard Workerwith_platform_haiku = _platforms.contains('haiku') 406*61046927SAndroid Build Coastguard Workerwith_platform_windows = _platforms.contains('windows') 407*61046927SAndroid Build Coastguard Workerwith_platform_macos = _platforms.contains('macos') 408*61046927SAndroid Build Coastguard Worker 409*61046927SAndroid Build Coastguard Workerwith_glx = get_option('glx') 410*61046927SAndroid Build Coastguard Workerif with_glx == 'auto' 411*61046927SAndroid Build Coastguard Worker if not with_opengl 412*61046927SAndroid Build Coastguard Worker with_glx = 'disabled' 413*61046927SAndroid Build Coastguard Worker elif with_platform_android 414*61046927SAndroid Build Coastguard Worker with_glx = 'disabled' 415*61046927SAndroid Build Coastguard Worker elif with_dri 416*61046927SAndroid Build Coastguard Worker with_glx = 'dri' 417*61046927SAndroid Build Coastguard Worker elif with_platform_haiku 418*61046927SAndroid Build Coastguard Worker with_glx = 'disabled' 419*61046927SAndroid Build Coastguard Worker elif host_machine.system() == 'windows' 420*61046927SAndroid Build Coastguard Worker with_glx = 'disabled' 421*61046927SAndroid Build Coastguard Worker elif with_gallium 422*61046927SAndroid Build Coastguard Worker # Even when building just gallium drivers the user probably wants dri 423*61046927SAndroid Build Coastguard Worker with_glx = 'dri' 424*61046927SAndroid Build Coastguard Worker elif with_platform_x11 and with_any_opengl and not with_any_vk 425*61046927SAndroid Build Coastguard Worker # The automatic behavior should not be to turn on xlib based glx when 426*61046927SAndroid Build Coastguard Worker # building only vulkan drivers 427*61046927SAndroid Build Coastguard Worker with_glx = 'xlib' 428*61046927SAndroid Build Coastguard Worker else 429*61046927SAndroid Build Coastguard Worker with_glx = 'disabled' 430*61046927SAndroid Build Coastguard Worker endif 431*61046927SAndroid Build Coastguard Workerendif 432*61046927SAndroid Build Coastguard Workerif with_glx == 'dri' 433*61046927SAndroid Build Coastguard Worker if with_gallium 434*61046927SAndroid Build Coastguard Worker with_dri = true 435*61046927SAndroid Build Coastguard Worker endif 436*61046927SAndroid Build Coastguard Workerendif 437*61046927SAndroid Build Coastguard Worker 438*61046927SAndroid Build Coastguard Workerif not with_opengl and with_glx != 'disabled' 439*61046927SAndroid Build Coastguard Worker error('Building GLX without OpenGL is not supported.') 440*61046927SAndroid Build Coastguard Workerendif 441*61046927SAndroid Build Coastguard Worker 442*61046927SAndroid Build Coastguard Workerif not (with_dri or with_gallium or with_glx != 'disabled') 443*61046927SAndroid Build Coastguard Worker with_gles1 = false 444*61046927SAndroid Build Coastguard Worker with_gles2 = false 445*61046927SAndroid Build Coastguard Worker with_opengl = false 446*61046927SAndroid Build Coastguard Worker with_any_opengl = false 447*61046927SAndroid Build Coastguard Worker with_shared_glapi = false 448*61046927SAndroid Build Coastguard Workerendif 449*61046927SAndroid Build Coastguard Worker 450*61046927SAndroid Build Coastguard Workerwith_gbm = get_option('gbm') \ 451*61046927SAndroid Build Coastguard Worker .require(system_has_kms_drm, error_message : 'GBM only supports DRM/KMS platforms') \ 452*61046927SAndroid Build Coastguard Worker .disable_auto_if(not with_dri) \ 453*61046927SAndroid Build Coastguard Worker .allowed() 454*61046927SAndroid Build Coastguard Worker 455*61046927SAndroid Build Coastguard Workerwith_xlib_lease = get_option('xlib-lease') \ 456*61046927SAndroid Build Coastguard Worker .require(with_platform_x11 and (system_has_kms_drm or with_dri_platform == 'apple'), error_message : 'xlib-lease requires X11 and KMS/DRM support') \ 457*61046927SAndroid Build Coastguard Worker .allowed() 458*61046927SAndroid Build Coastguard Worker 459*61046927SAndroid Build Coastguard Workerwith_egl = get_option('egl') \ 460*61046927SAndroid Build Coastguard Worker .require(with_platform_windows or with_platform_haiku or with_dri or with_platform_android, error_message : 'EGL requires DRI, Haiku, Windows or Android') \ 461*61046927SAndroid Build Coastguard Worker .require(with_shared_glapi, error_message : 'EGL requires shared-glapi') \ 462*61046927SAndroid Build Coastguard Worker .require(with_glx != 'xlib', error_message :'EGL requires DRI, but GLX is being built with xlib support') \ 463*61046927SAndroid Build Coastguard Worker .disable_auto_if(with_platform_haiku) \ 464*61046927SAndroid Build Coastguard Worker .allowed() 465*61046927SAndroid Build Coastguard Worker 466*61046927SAndroid Build Coastguard Workerif with_egl 467*61046927SAndroid Build Coastguard Worker _platforms += 'surfaceless' 468*61046927SAndroid Build Coastguard Worker if with_gbm and not with_platform_android 469*61046927SAndroid Build Coastguard Worker _platforms += 'drm' 470*61046927SAndroid Build Coastguard Worker endif 471*61046927SAndroid Build Coastguard Worker 472*61046927SAndroid Build Coastguard Worker egl_native_platform = get_option('egl-native-platform') 473*61046927SAndroid Build Coastguard Worker if egl_native_platform.contains('auto') 474*61046927SAndroid Build Coastguard Worker egl_native_platform = _platforms[0] 475*61046927SAndroid Build Coastguard Worker endif 476*61046927SAndroid Build Coastguard Workerendif 477*61046927SAndroid Build Coastguard Worker 478*61046927SAndroid Build Coastguard Workerif with_egl and not _platforms.contains(egl_native_platform) 479*61046927SAndroid Build Coastguard Worker error('-Degl-native-platform does not specify an enabled platform') 480*61046927SAndroid Build Coastguard Workerendif 481*61046927SAndroid Build Coastguard Worker 482*61046927SAndroid Build Coastguard Workerif 'x11' in _platforms 483*61046927SAndroid Build Coastguard Worker _platforms += 'xcb' 484*61046927SAndroid Build Coastguard Workerendif 485*61046927SAndroid Build Coastguard Worker 486*61046927SAndroid Build Coastguard Workerforeach platform : _platforms 487*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_@0@_PLATFORM'.format(platform.to_upper()) 488*61046927SAndroid Build Coastguard Workerendforeach 489*61046927SAndroid Build Coastguard Worker 490*61046927SAndroid Build Coastguard Workerif with_platform_android and get_option('platform-sdk-version') >= 29 491*61046927SAndroid Build Coastguard Worker # By default the NDK compiler, at least, emits emutls references instead of 492*61046927SAndroid Build Coastguard Worker # ELF TLS, even when building targeting newer API levels. Make it actually do 493*61046927SAndroid Build Coastguard Worker # ELF TLS instead. 494*61046927SAndroid Build Coastguard Worker c_cpp_args += '-fno-emulated-tls' 495*61046927SAndroid Build Coastguard Workerendif 496*61046927SAndroid Build Coastguard Worker 497*61046927SAndroid Build Coastguard Worker# -mtls-dialect=gnu2 speeds up non-initial-exec TLS significantly but requires 498*61046927SAndroid Build Coastguard Worker# full toolchain (including libc) support. 499*61046927SAndroid Build Coastguard Workerhave_mtls_dialect = false 500*61046927SAndroid Build Coastguard Workerforeach c_arg : get_option('c_args') 501*61046927SAndroid Build Coastguard Worker if c_arg.startswith('-mtls-dialect=') 502*61046927SAndroid Build Coastguard Worker have_mtls_dialect = true 503*61046927SAndroid Build Coastguard Worker break 504*61046927SAndroid Build Coastguard Worker endif 505*61046927SAndroid Build Coastguard Workerendforeach 506*61046927SAndroid Build Coastguard Workerif not have_mtls_dialect 507*61046927SAndroid Build Coastguard Worker # need .run to check libc support. meson aborts when calling .run when 508*61046927SAndroid Build Coastguard Worker # cross-compiling, but because this is just an optimization we can skip it 509*61046927SAndroid Build Coastguard Worker if meson.is_cross_build() and not meson.can_run_host_binaries() 510*61046927SAndroid Build Coastguard Worker warning('cannot auto-detect -mtls-dialect when cross-compiling, using compiler default') 511*61046927SAndroid Build Coastguard Worker else 512*61046927SAndroid Build Coastguard Worker # The way to specify the TLSDESC dialect is architecture-specific. 513*61046927SAndroid Build Coastguard Worker # We probe both because there is not a fallback guaranteed to work for all 514*61046927SAndroid Build Coastguard Worker # future architectures. 515*61046927SAndroid Build Coastguard Worker foreach tlsdesc_arg : ['-mtls-dialect=gnu2', '-mtls-dialect=desc'] 516*61046927SAndroid Build Coastguard Worker # -fpic to force dynamic tls, otherwise TLS relaxation defeats check 517*61046927SAndroid Build Coastguard Worker tlsdesc_test = cc.run('int __thread x; int main() { return x; }', 518*61046927SAndroid Build Coastguard Worker args: [tlsdesc_arg, '-fpic'], 519*61046927SAndroid Build Coastguard Worker name: tlsdesc_arg) 520*61046927SAndroid Build Coastguard Worker if tlsdesc_test.returncode() == 0 and ( 521*61046927SAndroid Build Coastguard Worker # check for lld 13 bug: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5665 522*61046927SAndroid Build Coastguard Worker host_machine.cpu_family() != 'x86_64' or 523*61046927SAndroid Build Coastguard Worker # get_linker_id misses LDFLAGS=-fuse-ld=lld: https://github.com/mesonbuild/meson/issues/6377 524*61046927SAndroid Build Coastguard Worker #cc.get_linker_id() != 'ld.lld' or 525*61046927SAndroid Build Coastguard Worker cc.links('''int __thread x; int y; int main() { __asm__( 526*61046927SAndroid Build Coastguard Worker "leaq x@TLSDESC(%rip), %rax\n" 527*61046927SAndroid Build Coastguard Worker "movq y@GOTPCREL(%rip), %rdx\n" 528*61046927SAndroid Build Coastguard Worker "call *x@TLSCALL(%rax)\n"); }''', name: 'split TLSDESC') 529*61046927SAndroid Build Coastguard Worker ) 530*61046927SAndroid Build Coastguard Worker c_cpp_args += tlsdesc_arg 531*61046927SAndroid Build Coastguard Worker break 532*61046927SAndroid Build Coastguard Worker endif 533*61046927SAndroid Build Coastguard Worker endforeach 534*61046927SAndroid Build Coastguard Worker endif 535*61046927SAndroid Build Coastguard Workerendif 536*61046927SAndroid Build Coastguard Worker 537*61046927SAndroid Build Coastguard Workerif with_glx != 'disabled' 538*61046927SAndroid Build Coastguard Worker if not (with_platform_x11 and with_any_opengl) 539*61046927SAndroid Build Coastguard Worker error('Cannot build GLX support without X11 platform support and at least one OpenGL API') 540*61046927SAndroid Build Coastguard Worker elif with_glx == 'xlib' 541*61046927SAndroid Build Coastguard Worker if not with_gallium 542*61046927SAndroid Build Coastguard Worker error('xlib based GLX requires at least one gallium driver') 543*61046927SAndroid Build Coastguard Worker elif not with_gallium_swrast 544*61046927SAndroid Build Coastguard Worker error('xlib based GLX requires softpipe or llvmpipe.') 545*61046927SAndroid Build Coastguard Worker elif with_dri 546*61046927SAndroid Build Coastguard Worker error('xlib conflicts with any dri driver') 547*61046927SAndroid Build Coastguard Worker endif 548*61046927SAndroid Build Coastguard Worker elif with_glx == 'dri' 549*61046927SAndroid Build Coastguard Worker if not with_shared_glapi 550*61046927SAndroid Build Coastguard Worker error('dri based GLX requires shared-glapi') 551*61046927SAndroid Build Coastguard Worker endif 552*61046927SAndroid Build Coastguard Worker endif 553*61046927SAndroid Build Coastguard Workerendif 554*61046927SAndroid Build Coastguard Worker 555*61046927SAndroid Build Coastguard Worker_glvnd = get_option('glvnd') \ 556*61046927SAndroid Build Coastguard Worker .require(not with_platform_windows, 557*61046927SAndroid Build Coastguard Worker error_message: 'glvnd cannot be used on Windows') \ 558*61046927SAndroid Build Coastguard Worker .require(with_glx != 'xlib', 559*61046927SAndroid Build Coastguard Worker error_message: 'Cannot build glvnd support for GLX that is not DRI based.') \ 560*61046927SAndroid Build Coastguard Worker .require(with_glx != 'disabled' or with_egl, 561*61046927SAndroid Build Coastguard Worker error_message: 'glvnd requires DRI based GLX and/or EGL') \ 562*61046927SAndroid Build Coastguard Worker .require(get_option('egl-lib-suffix') == '', 563*61046927SAndroid Build Coastguard Worker error_message: '''EGL lib suffix can't be used with libglvnd''') 564*61046927SAndroid Build Coastguard Workerdep_glvnd = dependency('libglvnd', version : '>= 1.3.2', required : _glvnd) 565*61046927SAndroid Build Coastguard Workerwith_glvnd = dep_glvnd.found() 566*61046927SAndroid Build Coastguard Workerpre_args += '-DUSE_LIBGLVND=@0@'.format(with_glvnd.to_int()) 567*61046927SAndroid Build Coastguard Workerglvnd_vendor_name = get_option('glvnd-vendor-name') 568*61046927SAndroid Build Coastguard Worker 569*61046927SAndroid Build Coastguard Workerif with_vulkan_icd_dir == '' 570*61046927SAndroid Build Coastguard Worker with_vulkan_icd_dir = join_paths(get_option('datadir'), 'vulkan/icd.d') 571*61046927SAndroid Build Coastguard Workerendif 572*61046927SAndroid Build Coastguard Worker 573*61046927SAndroid Build Coastguard Workerwith_dri2 = (with_dri or with_any_vk) and (with_dri_platform == 'drm' or with_dri_platform == 'apple') 574*61046927SAndroid Build Coastguard Worker 575*61046927SAndroid Build Coastguard Workerwith_x11_dri2 = with_dri2 and get_option('legacy-x11').contains('dri2') 576*61046927SAndroid Build Coastguard Worker 577*61046927SAndroid Build Coastguard Workerif with_dri 578*61046927SAndroid Build Coastguard Worker if with_glx == 'disabled' and not with_egl and not with_gbm 579*61046927SAndroid Build Coastguard Worker error('building dri drivers require at least one windowing system') 580*61046927SAndroid Build Coastguard Worker endif 581*61046927SAndroid Build Coastguard Workerendif 582*61046927SAndroid Build Coastguard Worker 583*61046927SAndroid Build Coastguard Workerdep_dxheaders = null_dep 584*61046927SAndroid Build Coastguard Workerif with_gallium_d3d12 or with_microsoft_clc or with_microsoft_vk 585*61046927SAndroid Build Coastguard Worker dep_dxheaders = dependency('directx-headers', required : false) 586*61046927SAndroid Build Coastguard Worker if not dep_dxheaders.found() 587*61046927SAndroid Build Coastguard Worker dep_dxheaders = dependency('DirectX-Headers', 588*61046927SAndroid Build Coastguard Worker version : '>= 1.614.1', 589*61046927SAndroid Build Coastguard Worker fallback : ['DirectX-Headers', 'dep_dxheaders'], 590*61046927SAndroid Build Coastguard Worker required : with_gallium_d3d12 or with_microsoft_vk 591*61046927SAndroid Build Coastguard Worker ) 592*61046927SAndroid Build Coastguard Worker endif 593*61046927SAndroid Build Coastguard Workerendif 594*61046927SAndroid Build Coastguard Worker 595*61046927SAndroid Build Coastguard Worker_with_gallium_d3d12_video = get_option('gallium-d3d12-video') 596*61046927SAndroid Build Coastguard Workerwith_gallium_d3d12_video = false 597*61046927SAndroid Build Coastguard Workerif with_gallium_d3d12 and not _with_gallium_d3d12_video.disabled() 598*61046927SAndroid Build Coastguard Worker with_gallium_d3d12_video = true 599*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_GALLIUM_D3D12_VIDEO' 600*61046927SAndroid Build Coastguard Workerendif 601*61046927SAndroid Build Coastguard Worker 602*61046927SAndroid Build Coastguard Worker_vdpau_drivers = [ 603*61046927SAndroid Build Coastguard Worker with_gallium_d3d12_video, 604*61046927SAndroid Build Coastguard Worker with_gallium_nouveau, 605*61046927SAndroid Build Coastguard Worker with_gallium_r600, 606*61046927SAndroid Build Coastguard Worker with_gallium_radeonsi, 607*61046927SAndroid Build Coastguard Worker with_gallium_virgl, 608*61046927SAndroid Build Coastguard Worker] 609*61046927SAndroid Build Coastguard Worker 610*61046927SAndroid Build Coastguard Workervdpau = get_option('gallium-vdpau') \ 611*61046927SAndroid Build Coastguard Worker .require(system_has_kms_drm, error_message : 'VDPAU state tracker can only be build on unix-like OSes.') \ 612*61046927SAndroid Build Coastguard Worker .require(with_platform_x11, error_message : 'VDPAU state tracker requires X11 support.') \ 613*61046927SAndroid Build Coastguard Worker .require(_vdpau_drivers.contains(true), error_message : 'VDPAU state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau, d3d12 (with option gallium-d3d12-video, virgl).') 614*61046927SAndroid Build Coastguard Worker 615*61046927SAndroid Build Coastguard Workerdep_vdpau = dependency('vdpau', version : '>= 1.5', required : vdpau) 616*61046927SAndroid Build Coastguard Workerif dep_vdpau.found() 617*61046927SAndroid Build Coastguard Worker dep_vdpau = dep_vdpau.partial_dependency(compile_args : true) 618*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_ST_VDPAU' 619*61046927SAndroid Build Coastguard Workerendif 620*61046927SAndroid Build Coastguard Workerwith_gallium_vdpau = dep_vdpau.found() 621*61046927SAndroid Build Coastguard Worker 622*61046927SAndroid Build Coastguard Workervdpau_drivers_path = get_option('vdpau-libs-path') 623*61046927SAndroid Build Coastguard Workerif vdpau_drivers_path == '' 624*61046927SAndroid Build Coastguard Worker vdpau_drivers_path = join_paths(get_option('libdir'), 'vdpau') 625*61046927SAndroid Build Coastguard Workerendif 626*61046927SAndroid Build Coastguard Worker 627*61046927SAndroid Build Coastguard Worker# GLSL has interesting version output and Meson doesn't parse it correctly as of 628*61046927SAndroid Build Coastguard Worker# Meson 1.4.0 629*61046927SAndroid Build Coastguard Workerprog_glslang = find_program('glslangValidator', native : true, 630*61046927SAndroid Build Coastguard Worker required : with_vulkan_overlay_layer or with_aco_tests or with_amd_vk or with_intel_vk) 631*61046927SAndroid Build Coastguard Workerif prog_glslang.found() 632*61046927SAndroid Build Coastguard Worker # Check if glslang has depfile support. Support was added in 11.3.0, but 633*61046927SAndroid Build Coastguard Worker # Windows path support was broken until 11.9.0. 634*61046927SAndroid Build Coastguard Worker # 635*61046927SAndroid Build Coastguard Worker # It is intentional to check the build machine, since we need to ensure that 636*61046927SAndroid Build Coastguard Worker # glslang will output valid paths on the build platform 637*61046927SAndroid Build Coastguard Worker _glslang_check = build_machine.system() == 'windows' ? '>= 11.9.0' : '>= 11.3.0' 638*61046927SAndroid Build Coastguard Worker if run_command(prog_glslang, ['--version'], check : false).stdout().split(':')[2].version_compare(_glslang_check) 639*61046927SAndroid Build Coastguard Worker glslang_depfile = ['--depfile', '@DEPFILE@'] 640*61046927SAndroid Build Coastguard Worker else 641*61046927SAndroid Build Coastguard Worker glslang_depfile = [] 642*61046927SAndroid Build Coastguard Worker endif 643*61046927SAndroid Build Coastguard Worker if run_command(prog_glslang, [ '--quiet', '--version' ], check : false).returncode() == 0 644*61046927SAndroid Build Coastguard Worker glslang_quiet = ['--quiet'] 645*61046927SAndroid Build Coastguard Worker else 646*61046927SAndroid Build Coastguard Worker glslang_quiet = [] 647*61046927SAndroid Build Coastguard Worker endif 648*61046927SAndroid Build Coastguard Workerendif 649*61046927SAndroid Build Coastguard Worker 650*61046927SAndroid Build Coastguard Worker_va_drivers = [ 651*61046927SAndroid Build Coastguard Worker with_gallium_d3d12_video, 652*61046927SAndroid Build Coastguard Worker with_gallium_nouveau, 653*61046927SAndroid Build Coastguard Worker with_gallium_r600, 654*61046927SAndroid Build Coastguard Worker with_gallium_radeonsi, 655*61046927SAndroid Build Coastguard Worker with_gallium_virgl, 656*61046927SAndroid Build Coastguard Worker] 657*61046927SAndroid Build Coastguard Worker 658*61046927SAndroid Build Coastguard Worker_va = get_option('gallium-va') \ 659*61046927SAndroid Build Coastguard Worker .require(_va_drivers.contains(true), 660*61046927SAndroid Build Coastguard Worker error_message : 'VA state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau, d3d12 (with option gallium-d3d12-video), virgl.') 661*61046927SAndroid Build Coastguard Worker_dep_va_name = host_machine.system() == 'windows' ? 'libva-win32' : 'libva' 662*61046927SAndroid Build Coastguard Workerdep_va = dependency(_dep_va_name, version : '>= 1.8.0', required : _va) 663*61046927SAndroid Build Coastguard Workerif dep_va.found() 664*61046927SAndroid Build Coastguard Worker dep_va_headers = dep_va.partial_dependency(compile_args : true) 665*61046927SAndroid Build Coastguard Worker if cc.has_header_symbol('va/va.h', 'VASurfaceAttribDRMFormatModifiers', 666*61046927SAndroid Build Coastguard Worker dependencies: dep_va_headers) 667*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_VA_SURFACE_ATTRIB_DRM_FORMAT_MODIFIERS' 668*61046927SAndroid Build Coastguard Worker endif 669*61046927SAndroid Build Coastguard Workerendif 670*61046927SAndroid Build Coastguard Workerwith_gallium_va = dep_va.found() 671*61046927SAndroid Build Coastguard Worker 672*61046927SAndroid Build Coastguard Workerva_drivers_path = get_option('va-libs-path') 673*61046927SAndroid Build Coastguard Workerif va_drivers_path == '' 674*61046927SAndroid Build Coastguard Worker va_drivers_path = join_paths(get_option('libdir'), 'dri') 675*61046927SAndroid Build Coastguard Workerendif 676*61046927SAndroid Build Coastguard Worker 677*61046927SAndroid Build Coastguard Workerwith_gallium_xa = get_option('gallium-xa') \ 678*61046927SAndroid Build Coastguard Worker .require(system_has_kms_drm, error_message : 'XA state tracker can only be built on unix-like OSes.') \ 679*61046927SAndroid Build Coastguard Worker .require(with_gallium_nouveau or with_gallium_freedreno or with_gallium_i915 or with_gallium_svga, 680*61046927SAndroid Build Coastguard Worker error_message : 'XA state tracker requires at least one of the following gallium drivers: nouveau, freedreno, i915, svga.') \ 681*61046927SAndroid Build Coastguard Worker .allowed() 682*61046927SAndroid Build Coastguard Worker 683*61046927SAndroid Build Coastguard Workerd3d_drivers_path = get_option('d3d-drivers-path') 684*61046927SAndroid Build Coastguard Workerif d3d_drivers_path == '' 685*61046927SAndroid Build Coastguard Worker d3d_drivers_path = join_paths(get_option('prefix'), get_option('libdir'), 'd3d') 686*61046927SAndroid Build Coastguard Workerendif 687*61046927SAndroid Build Coastguard Worker 688*61046927SAndroid Build Coastguard Workerwith_gallium_st_nine = get_option('gallium-nine') 689*61046927SAndroid Build Coastguard Workerif with_gallium_st_nine 690*61046927SAndroid Build Coastguard Worker if not with_gallium_swrast 691*61046927SAndroid Build Coastguard Worker error('The nine state tracker requires gallium softpipe/llvmpipe.') 692*61046927SAndroid Build Coastguard Worker elif not [ 693*61046927SAndroid Build Coastguard Worker with_gallium_crocus, 694*61046927SAndroid Build Coastguard Worker with_gallium_freedreno, 695*61046927SAndroid Build Coastguard Worker with_gallium_i915, 696*61046927SAndroid Build Coastguard Worker with_gallium_iris, 697*61046927SAndroid Build Coastguard Worker with_gallium_nouveau, 698*61046927SAndroid Build Coastguard Worker with_gallium_panfrost, 699*61046927SAndroid Build Coastguard Worker with_gallium_r300, 700*61046927SAndroid Build Coastguard Worker with_gallium_r600, 701*61046927SAndroid Build Coastguard Worker with_gallium_radeonsi, 702*61046927SAndroid Build Coastguard Worker with_gallium_svga, 703*61046927SAndroid Build Coastguard Worker with_gallium_zink, 704*61046927SAndroid Build Coastguard Worker ].contains(true) 705*61046927SAndroid Build Coastguard Worker error('The nine state tracker requires at least one non-swrast gallium driver.') 706*61046927SAndroid Build Coastguard Worker endif 707*61046927SAndroid Build Coastguard Workerendif 708*61046927SAndroid Build Coastguard Workerwith_gallium_st_d3d10umd = get_option('gallium-d3d10umd') 709*61046927SAndroid Build Coastguard Workerif with_gallium_st_d3d10umd 710*61046927SAndroid Build Coastguard Worker if not with_gallium_swrast 711*61046927SAndroid Build Coastguard Worker error('The d3d10umd state tracker requires gallium softpipe/llvmpipe.') 712*61046927SAndroid Build Coastguard Worker endif 713*61046927SAndroid Build Coastguard Workerendif 714*61046927SAndroid Build Coastguard Worker_power8 = get_option('power8') 715*61046927SAndroid Build Coastguard Workerif _power8.allowed() 716*61046927SAndroid Build Coastguard Worker if host_machine.cpu_family() == 'ppc64' and host_machine.endian() == 'little' 717*61046927SAndroid Build Coastguard Worker if cc.get_id() == 'gcc' and cc.version().version_compare('< 4.8') 718*61046927SAndroid Build Coastguard Worker error('Altivec is not supported with gcc version < 4.8.') 719*61046927SAndroid Build Coastguard Worker endif 720*61046927SAndroid Build Coastguard Worker if cc.compiles(''' 721*61046927SAndroid Build Coastguard Worker #include <altivec.h> 722*61046927SAndroid Build Coastguard Worker int main() { 723*61046927SAndroid Build Coastguard Worker vector unsigned char r; 724*61046927SAndroid Build Coastguard Worker vector unsigned int v = vec_splat_u32 (1); 725*61046927SAndroid Build Coastguard Worker r = __builtin_vec_vgbbd ((vector unsigned char) v); 726*61046927SAndroid Build Coastguard Worker return 0; 727*61046927SAndroid Build Coastguard Worker }''', 728*61046927SAndroid Build Coastguard Worker args : '-mpower8-vector', 729*61046927SAndroid Build Coastguard Worker name : 'POWER8 intrinsics') 730*61046927SAndroid Build Coastguard Worker pre_args += ['-D_ARCH_PWR8'] 731*61046927SAndroid Build Coastguard Worker c_cpp_args += '-mpower8-vector' 732*61046927SAndroid Build Coastguard Worker elif _power8.enabled() 733*61046927SAndroid Build Coastguard Worker error('POWER8 intrinsic support required but not found.') 734*61046927SAndroid Build Coastguard Worker endif 735*61046927SAndroid Build Coastguard Worker endif 736*61046927SAndroid Build Coastguard Workerendif 737*61046927SAndroid Build Coastguard Worker 738*61046927SAndroid Build Coastguard Workerif get_option('vmware-mks-stats') 739*61046927SAndroid Build Coastguard Worker if not with_gallium_svga 740*61046927SAndroid Build Coastguard Worker error('vmware-mks-stats requires gallium VMware/svga driver.') 741*61046927SAndroid Build Coastguard Worker endif 742*61046927SAndroid Build Coastguard Worker pre_args += '-DVMX86_STATS=1' 743*61046927SAndroid Build Coastguard Workerendif 744*61046927SAndroid Build Coastguard Worker 745*61046927SAndroid Build Coastguard Worker_opencl = get_option('gallium-opencl') 746*61046927SAndroid Build Coastguard Worker_rtti = get_option('cpp_rtti') 747*61046927SAndroid Build Coastguard Workerif _opencl != 'disabled' 748*61046927SAndroid Build Coastguard Worker if not with_gallium 749*61046927SAndroid Build Coastguard Worker error('OpenCL Clover implementation requires at least one gallium driver.') 750*61046927SAndroid Build Coastguard Worker endif 751*61046927SAndroid Build Coastguard Worker if not _rtti 752*61046927SAndroid Build Coastguard Worker error('The Clover OpenCL state tracker requires rtti') 753*61046927SAndroid Build Coastguard Worker endif 754*61046927SAndroid Build Coastguard Worker 755*61046927SAndroid Build Coastguard Worker with_gallium_clover = true 756*61046927SAndroid Build Coastguard Worker with_opencl_icd = _opencl == 'icd' 757*61046927SAndroid Build Coastguard Workerelse 758*61046927SAndroid Build Coastguard Worker with_gallium_clover = false 759*61046927SAndroid Build Coastguard Worker with_opencl_icd = false 760*61046927SAndroid Build Coastguard Workerendif 761*61046927SAndroid Build Coastguard Worker 762*61046927SAndroid Build Coastguard Workerwith_gallium_rusticl = get_option('gallium-rusticl') 763*61046927SAndroid Build Coastguard Workerif with_gallium_rusticl 764*61046927SAndroid Build Coastguard Worker if not with_gallium 765*61046927SAndroid Build Coastguard Worker error('rusticl requires at least one gallium driver.') 766*61046927SAndroid Build Coastguard Worker endif 767*61046927SAndroid Build Coastguard Workerendif 768*61046927SAndroid Build Coastguard Worker 769*61046927SAndroid Build Coastguard Workerif with_gallium_rusticl or with_nouveau_vk or with_tools.contains('etnaviv') 770*61046927SAndroid Build Coastguard Worker if with_gallium_rusticl 771*61046927SAndroid Build Coastguard Worker # uses rust.bindgen.output_inline_wrapper needing 1.4.0 772*61046927SAndroid Build Coastguard Worker if meson.version().version_compare('< 1.4.0') 773*61046927SAndroid Build Coastguard Worker error('Rusticl requires meson 1.4.0 or newer') 774*61046927SAndroid Build Coastguard Worker endif 775*61046927SAndroid Build Coastguard Worker else 776*61046927SAndroid Build Coastguard Worker # see https://github.com/mesonbuild/meson/issues/12758 (backported to 1.3.2) 777*61046927SAndroid Build Coastguard Worker if meson.version().version_compare('< 1.3.2') 778*61046927SAndroid Build Coastguard Worker error('Mesa Rust support requires meson 1.3.2 or newer') 779*61046927SAndroid Build Coastguard Worker endif 780*61046927SAndroid Build Coastguard Worker endif 781*61046927SAndroid Build Coastguard Worker 782*61046927SAndroid Build Coastguard Worker add_languages('rust', required: true) 783*61046927SAndroid Build Coastguard Worker rustc = meson.get_compiler('rust') 784*61046927SAndroid Build Coastguard Worker rust = import('rust') 785*61046927SAndroid Build Coastguard Worker 786*61046927SAndroid Build Coastguard Worker if rustc.version().version_compare('< 1.76') 787*61046927SAndroid Build Coastguard Worker error('Mesa requires Rust 1.76.0 or newer') 788*61046927SAndroid Build Coastguard Worker endif 789*61046927SAndroid Build Coastguard Worker 790*61046927SAndroid Build Coastguard Worker bindgen_version = find_program('bindgen').version() 791*61046927SAndroid Build Coastguard Worker if bindgen_version == 'unknown' 792*61046927SAndroid Build Coastguard Worker error('Failed to detect bindgen version. If you are using bindgen 0.69.0, ' + 793*61046927SAndroid Build Coastguard Worker 'please either update to 0.69.1 or downgrade to 0.68.1. ' + 794*61046927SAndroid Build Coastguard Worker 'You can install the latest version for your user with `cargo install bindgen-cli`.') 795*61046927SAndroid Build Coastguard Worker endif 796*61046927SAndroid Build Coastguard Worker 797*61046927SAndroid Build Coastguard Worker if bindgen_version.version_compare('< 0.65') 798*61046927SAndroid Build Coastguard Worker error('Mesa requires bindgen 0.65 or newer. ' + 799*61046927SAndroid Build Coastguard Worker 'If your distribution does not ship a recent enough version, ' + 800*61046927SAndroid Build Coastguard Worker 'you can install the latest version for your user with `cargo install bindgen-cli`.') 801*61046927SAndroid Build Coastguard Worker endif 802*61046927SAndroid Build Coastguard Workerendif 803*61046927SAndroid Build Coastguard Worker 804*61046927SAndroid Build Coastguard Workerwith_clover_spirv = with_gallium_clover and get_option('opencl-spirv') 805*61046927SAndroid Build Coastguard Workerwith_clc = with_microsoft_clc or with_intel_clc or with_gallium_asahi or with_asahi_vk or with_gallium_rusticl or with_clover_spirv 806*61046927SAndroid Build Coastguard Worker 807*61046927SAndroid Build Coastguard Workerdep_clc = null_dep 808*61046927SAndroid Build Coastguard Workerif with_gallium_clover or with_clc 809*61046927SAndroid Build Coastguard Worker dep_clc = dependency('libclc') 810*61046927SAndroid Build Coastguard Workerendif 811*61046927SAndroid Build Coastguard Worker 812*61046927SAndroid Build Coastguard Workergl_pkgconfig_c_flags = [] 813*61046927SAndroid Build Coastguard Workerwith_glx_indirect_rendering = false 814*61046927SAndroid Build Coastguard Workerif with_platform_x11 815*61046927SAndroid Build Coastguard Worker if with_glx == 'xlib' 816*61046927SAndroid Build Coastguard Worker pre_args += '-DUSE_XSHM' 817*61046927SAndroid Build Coastguard Worker else 818*61046927SAndroid Build Coastguard Worker with_glx_indirect_rendering = true 819*61046927SAndroid Build Coastguard Worker pre_args += '-DGLX_INDIRECT_RENDERING' 820*61046927SAndroid Build Coastguard Worker if with_glx_direct 821*61046927SAndroid Build Coastguard Worker pre_args += '-DGLX_DIRECT_RENDERING' 822*61046927SAndroid Build Coastguard Worker endif 823*61046927SAndroid Build Coastguard Worker if with_dri_platform == 'drm' 824*61046927SAndroid Build Coastguard Worker pre_args += '-DGLX_USE_DRM' 825*61046927SAndroid Build Coastguard Worker elif with_dri_platform == 'apple' 826*61046927SAndroid Build Coastguard Worker pre_args += '-DGLX_USE_APPLEGL' 827*61046927SAndroid Build Coastguard Worker # Check to see if more than just the default 'swrast' is required 828*61046927SAndroid Build Coastguard Worker if (not with_gallium_softpipe) or 1 < gallium_drivers.length() 829*61046927SAndroid Build Coastguard Worker # Switch the MacOS code from "forwarding to the OpenGL.framework" mode 830*61046927SAndroid Build Coastguard Worker # and into actual Gallium Driver mode 831*61046927SAndroid Build Coastguard Worker pre_args += '-DGLX_USE_APPLE' 832*61046927SAndroid Build Coastguard Worker endif 833*61046927SAndroid Build Coastguard Worker elif with_dri_platform == 'windows' 834*61046927SAndroid Build Coastguard Worker pre_args += '-DGLX_USE_WINDOWSGL' 835*61046927SAndroid Build Coastguard Worker endif 836*61046927SAndroid Build Coastguard Worker endif 837*61046927SAndroid Build Coastguard Workerendif 838*61046927SAndroid Build Coastguard Worker 839*61046927SAndroid Build Coastguard Workerwith_glapi_export_proto_entry_points = false 840*61046927SAndroid Build Coastguard Workerif with_shared_glapi and not with_glx_indirect_rendering 841*61046927SAndroid Build Coastguard Worker # Imply !defined(GLX_INDIRECT_RENDERING) 842*61046927SAndroid Build Coastguard Worker with_glapi_export_proto_entry_points = true 843*61046927SAndroid Build Coastguard Workerendif 844*61046927SAndroid Build Coastguard Workerpre_args += '-DGLAPI_EXPORT_PROTO_ENTRY_POINTS=@0@'.format(with_glapi_export_proto_entry_points.to_int()) 845*61046927SAndroid Build Coastguard Worker 846*61046927SAndroid Build Coastguard Workerwith_android_stub = get_option('android-stub') 847*61046927SAndroid Build Coastguard Workerif with_android_stub and not with_platform_android 848*61046927SAndroid Build Coastguard Worker error('`-D android-stub=true` makes no sense without `-D platforms=android`') 849*61046927SAndroid Build Coastguard Workerendif 850*61046927SAndroid Build Coastguard Worker 851*61046927SAndroid Build Coastguard Workerwith_libbacktrace = get_option('android-libbacktrace') \ 852*61046927SAndroid Build Coastguard Worker .require(with_platform_android, error_message : '`-D android-libbacktrace=enabled` makes no sense without `-D platforms=android`') \ 853*61046927SAndroid Build Coastguard Worker .disable_auto_if(not with_platform_android) \ 854*61046927SAndroid Build Coastguard Worker .allowed() 855*61046927SAndroid Build Coastguard Worker 856*61046927SAndroid Build Coastguard Workerif with_libbacktrace 857*61046927SAndroid Build Coastguard Worker cpp_args += '-DWITH_LIBBACKTRACE' 858*61046927SAndroid Build Coastguard Workerendif 859*61046927SAndroid Build Coastguard Worker 860*61046927SAndroid Build Coastguard Workerif with_platform_android 861*61046927SAndroid Build Coastguard Worker dep_android_mapper4 = null_dep 862*61046927SAndroid Build Coastguard Worker if not with_android_stub 863*61046927SAndroid Build Coastguard Worker dep_android = [ 864*61046927SAndroid Build Coastguard Worker dependency('cutils'), 865*61046927SAndroid Build Coastguard Worker dependency('hardware'), 866*61046927SAndroid Build Coastguard Worker dependency('log'), 867*61046927SAndroid Build Coastguard Worker dependency('sync'), 868*61046927SAndroid Build Coastguard Worker ] 869*61046927SAndroid Build Coastguard Worker if with_libbacktrace 870*61046927SAndroid Build Coastguard Worker dep_android += dependency('backtrace') 871*61046927SAndroid Build Coastguard Worker endif 872*61046927SAndroid Build Coastguard Worker if get_option('platform-sdk-version') >= 26 873*61046927SAndroid Build Coastguard Worker dep_android += dependency('nativewindow') 874*61046927SAndroid Build Coastguard Worker endif 875*61046927SAndroid Build Coastguard Worker if get_option('platform-sdk-version') >= 30 876*61046927SAndroid Build Coastguard Worker dep_android_mapper4 = dependency('android.hardware.graphics.mapper', version : '>= 4.0', required : false) 877*61046927SAndroid Build Coastguard Worker endif 878*61046927SAndroid Build Coastguard Worker endif 879*61046927SAndroid Build Coastguard Worker pre_args += '-DANDROID_API_LEVEL=' + get_option('platform-sdk-version').to_string() 880*61046927SAndroid Build Coastguard Worker if get_option('android-strict') 881*61046927SAndroid Build Coastguard Worker pre_args += '-DANDROID_STRICT' 882*61046927SAndroid Build Coastguard Worker endif 883*61046927SAndroid Build Coastguard Workerendif 884*61046927SAndroid Build Coastguard Worker 885*61046927SAndroid Build Coastguard Worker# On Android, seccomp kills the process on kernels without 886*61046927SAndroid Build Coastguard Worker# CONFIG_KCMP/CONFIG_CHECKPOINT_RESTORE if it attemps to use KCMP. 887*61046927SAndroid Build Coastguard Worker# Since we can't detect that, err on the side of caution and disable 888*61046927SAndroid Build Coastguard Worker# KCMP by default on Android. 889*61046927SAndroid Build Coastguard Workerif get_option('allow-kcmp') \ 890*61046927SAndroid Build Coastguard Worker .disable_auto_if(with_platform_android) \ 891*61046927SAndroid Build Coastguard Worker .allowed() 892*61046927SAndroid Build Coastguard Worker pre_args += '-DALLOW_KCMP' 893*61046927SAndroid Build Coastguard Workerendif 894*61046927SAndroid Build Coastguard Worker 895*61046927SAndroid Build Coastguard Workerprog_python = import('python').find_installation('python3') 896*61046927SAndroid Build Coastguard Workerhas_mako = run_command( 897*61046927SAndroid Build Coastguard Worker prog_python, '-c', 898*61046927SAndroid Build Coastguard Worker ''' 899*61046927SAndroid Build Coastguard Workertry: 900*61046927SAndroid Build Coastguard Worker from packaging.version import Version 901*61046927SAndroid Build Coastguard Workerexcept: 902*61046927SAndroid Build Coastguard Worker from distutils.version import StrictVersion as Version 903*61046927SAndroid Build Coastguard Workerimport mako 904*61046927SAndroid Build Coastguard Workerassert Version(mako.__version__) >= Version("0.8.0") 905*61046927SAndroid Build Coastguard Worker ''', check: false) 906*61046927SAndroid Build Coastguard Workerif has_mako.returncode() != 0 907*61046927SAndroid Build Coastguard Worker error('Python (3.x) mako module >= 0.8.0 required to build mesa.') 908*61046927SAndroid Build Coastguard Workerendif 909*61046927SAndroid Build Coastguard Worker 910*61046927SAndroid Build Coastguard Workerhas_yaml = run_command( 911*61046927SAndroid Build Coastguard Worker prog_python, '-c', 912*61046927SAndroid Build Coastguard Worker ''' 913*61046927SAndroid Build Coastguard Workerimport yaml 914*61046927SAndroid Build Coastguard Worker ''', check: false) 915*61046927SAndroid Build Coastguard Workerif has_yaml.returncode() != 0 916*61046927SAndroid Build Coastguard Worker error('Python (3.x) yaml module (PyYAML) required to build mesa.') 917*61046927SAndroid Build Coastguard Workerendif 918*61046927SAndroid Build Coastguard Worker 919*61046927SAndroid Build Coastguard Workerif cc.get_id() == 'gcc' and cc.version().version_compare('< 4.4.6') 920*61046927SAndroid Build Coastguard Worker error('When using GCC, version 4.4.6 or later is required.') 921*61046927SAndroid Build Coastguard Workerendif 922*61046927SAndroid Build Coastguard Worker 923*61046927SAndroid Build Coastguard Worker# Support systems without ETIME (e.g. FreeBSD) 924*61046927SAndroid Build Coastguard Workerif cc.get_define('ETIME', prefix : '#include <errno.h>') == '' 925*61046927SAndroid Build Coastguard Worker pre_args += '-DETIME=ETIMEDOUT' 926*61046927SAndroid Build Coastguard Workerendif 927*61046927SAndroid Build Coastguard Worker 928*61046927SAndroid Build Coastguard Worker# Define MESA_DEBUG to 1 for debug builds only (debugoptimized is not included on this one); 929*61046927SAndroid Build Coastguard Worker# otherwise define MESA_DEBUG to 0 930*61046927SAndroid Build Coastguard Workerpre_args += '-DMESA_DEBUG=@0@'.format(with_mesa_debug.to_int()) 931*61046927SAndroid Build Coastguard Worker 932*61046927SAndroid Build Coastguard Workerwith_split_debug = get_option('split-debug') \ 933*61046927SAndroid Build Coastguard Worker .disable_if(not cc.has_argument('-gsplit-dwarf'), 934*61046927SAndroid Build Coastguard Worker error_message : 'split-debug requires compiler -gsplit-dwarf support') \ 935*61046927SAndroid Build Coastguard Worker .disable_if(not cc.has_link_argument('-Wl,--gdb-index'), 936*61046927SAndroid Build Coastguard Worker error_message : 'split-debug requires the linker argument -Wl,--gdb-index') 937*61046927SAndroid Build Coastguard Worker 938*61046927SAndroid Build Coastguard Workerif with_split_debug.allowed() and get_option('debug') 939*61046927SAndroid Build Coastguard Worker add_project_arguments('-gsplit-dwarf', language : ['c', 'cpp']) 940*61046927SAndroid Build Coastguard Worker add_project_link_arguments('-Wl,--gdb-index', language : ['c', 'cpp']) 941*61046927SAndroid Build Coastguard Workerendif 942*61046927SAndroid Build Coastguard Worker 943*61046927SAndroid Build Coastguard Workerwith_shader_cache = get_option('shader-cache') \ 944*61046927SAndroid Build Coastguard Worker .require(host_machine.system() != 'windows', error_message : 'Shader Cache does not currently work on Windows') \ 945*61046927SAndroid Build Coastguard Worker .allowed() 946*61046927SAndroid Build Coastguard Worker 947*61046927SAndroid Build Coastguard Workerif with_shader_cache 948*61046927SAndroid Build Coastguard Worker pre_args += '-DENABLE_SHADER_CACHE' 949*61046927SAndroid Build Coastguard Worker if not get_option('shader-cache-default') 950*61046927SAndroid Build Coastguard Worker pre_args += '-DSHADER_CACHE_DISABLE_BY_DEFAULT' 951*61046927SAndroid Build Coastguard Worker endif 952*61046927SAndroid Build Coastguard Worker 953*61046927SAndroid Build Coastguard Worker shader_cache_max_size = get_option('shader-cache-max-size') 954*61046927SAndroid Build Coastguard Worker if shader_cache_max_size != '' 955*61046927SAndroid Build Coastguard Worker pre_args += '-DMESA_SHADER_CACHE_MAX_SIZE="@0@"'.format(shader_cache_max_size) 956*61046927SAndroid Build Coastguard Worker endif 957*61046927SAndroid Build Coastguard Workerendif 958*61046927SAndroid Build Coastguard Worker 959*61046927SAndroid Build Coastguard Worker# Check for GCC style builtins 960*61046927SAndroid Build Coastguard Workerforeach b : ['bswap32', 'bswap64', 'clz', 'clzll', 'ctz', 'expect', 'ffs', 961*61046927SAndroid Build Coastguard Worker 'ffsll', 'popcount', 'popcountll', 'unreachable', 'types_compatible_p'] 962*61046927SAndroid Build Coastguard Worker if cc.has_function(b) 963*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE___BUILTIN_@0@'.format(b.to_upper()) 964*61046927SAndroid Build Coastguard Worker endif 965*61046927SAndroid Build Coastguard Workerendforeach 966*61046927SAndroid Build Coastguard Worker 967*61046927SAndroid Build Coastguard Worker# check for GCC __attribute__ 968*61046927SAndroid Build Coastguard Worker_attributes = [ 969*61046927SAndroid Build Coastguard Worker 'const', 'flatten', 'malloc', 'pure', 'unused', 'warn_unused_result', 970*61046927SAndroid Build Coastguard Worker 'weak', 'format', 'packed', 'returns_nonnull', 'alias', 'noreturn', 971*61046927SAndroid Build Coastguard Worker 'optimize', 972*61046927SAndroid Build Coastguard Worker] 973*61046927SAndroid Build Coastguard Workerforeach a : cc.get_supported_function_attributes(_attributes) 974*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_FUNC_ATTRIBUTE_@0@'.format(a.to_upper()) 975*61046927SAndroid Build Coastguard Workerendforeach 976*61046927SAndroid Build Coastguard Workerif cc.has_function_attribute('visibility:hidden') 977*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_FUNC_ATTRIBUTE_VISIBILITY' 978*61046927SAndroid Build Coastguard Workerendif 979*61046927SAndroid Build Coastguard Workerif cc.compiles('__uint128_t foo(void) { return 0; }', 980*61046927SAndroid Build Coastguard Worker name : '__uint128_t') 981*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_UINT128' 982*61046927SAndroid Build Coastguard Workerendif 983*61046927SAndroid Build Coastguard Worker 984*61046927SAndroid Build Coastguard Workerif cc.has_function('reallocarray') 985*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_REALLOCARRAY' 986*61046927SAndroid Build Coastguard Workerendif 987*61046927SAndroid Build Coastguard Workerif cc.has_function('fmemopen') 988*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_FMEMOPEN' 989*61046927SAndroid Build Coastguard Workerendif 990*61046927SAndroid Build Coastguard Worker 991*61046927SAndroid Build Coastguard Worker# TODO: this is very incomplete 992*61046927SAndroid Build Coastguard Workerif ['linux', 'cygwin', 'gnu', 'freebsd', 'gnu/kfreebsd', 'haiku', 'android', 'managarm'].contains(host_machine.system()) 993*61046927SAndroid Build Coastguard Worker pre_args += '-D_GNU_SOURCE' 994*61046927SAndroid Build Coastguard Workerelif host_machine.system() == 'sunos' 995*61046927SAndroid Build Coastguard Worker pre_args += '-D__EXTENSIONS__' 996*61046927SAndroid Build Coastguard Workerelif host_machine.system() == 'windows' 997*61046927SAndroid Build Coastguard Worker pre_args += [ 998*61046927SAndroid Build Coastguard Worker '-D_WINDOWS', '-D_WIN32_WINNT=0x0A00', '-DWINVER=0x0A00', 999*61046927SAndroid Build Coastguard Worker '-DPIPE_SUBSYSTEM_WINDOWS_USER', 1000*61046927SAndroid Build Coastguard Worker '-D_USE_MATH_DEFINES', # XXX: scons didn't use this for mingw 1001*61046927SAndroid Build Coastguard Worker ] 1002*61046927SAndroid Build Coastguard Worker if cc.get_argument_syntax() == 'msvc' 1003*61046927SAndroid Build Coastguard Worker pre_args += [ 1004*61046927SAndroid Build Coastguard Worker '-DVC_EXTRALEAN', 1005*61046927SAndroid Build Coastguard Worker '-D_CRT_SECURE_NO_WARNINGS', 1006*61046927SAndroid Build Coastguard Worker '-D_CRT_SECURE_NO_DEPRECATE', 1007*61046927SAndroid Build Coastguard Worker '-D_SCL_SECURE_NO_WARNINGS', 1008*61046927SAndroid Build Coastguard Worker '-D_SCL_SECURE_NO_DEPRECATE', 1009*61046927SAndroid Build Coastguard Worker '-D_ALLOW_KEYWORD_MACROS', 1010*61046927SAndroid Build Coastguard Worker '-D_HAS_EXCEPTIONS=0', # Tell C++ STL to not use exceptions 1011*61046927SAndroid Build Coastguard Worker '-DNOMINMAX', 1012*61046927SAndroid Build Coastguard Worker ] 1013*61046927SAndroid Build Coastguard Worker else 1014*61046927SAndroid Build Coastguard Worker # When the target is not mingw/ucrt 1015*61046927SAndroid Build Coastguard Worker # NOTE: clang's stddef.h are conflict with mingw/ucrt's stddef.h 1016*61046927SAndroid Build Coastguard Worker # So do not include headers that defined in clang for detecting 1017*61046927SAndroid Build Coastguard Worker # _UCRT 1018*61046927SAndroid Build Coastguard Worker if cc.compiles(''' 1019*61046927SAndroid Build Coastguard Worker #include <string.h> 1020*61046927SAndroid Build Coastguard Worker #if defined(__MINGW32__) && defined(_UCRT) 1021*61046927SAndroid Build Coastguard Worker #error 1022*61046927SAndroid Build Coastguard Worker #endif 1023*61046927SAndroid Build Coastguard Worker int main(void) { return 0; }''') 1024*61046927SAndroid Build Coastguard Worker pre_args += ['-D__MSVCRT_VERSION__=0x0700'] 1025*61046927SAndroid Build Coastguard Worker endif 1026*61046927SAndroid Build Coastguard Worker endif 1027*61046927SAndroid Build Coastguard Workerelif host_machine.system() == 'openbsd' 1028*61046927SAndroid Build Coastguard Worker pre_args += '-D_ISOC11_SOURCE' 1029*61046927SAndroid Build Coastguard Workerendif 1030*61046927SAndroid Build Coastguard Worker 1031*61046927SAndroid Build Coastguard Worker# Check for generic C arguments 1032*61046927SAndroid Build Coastguard Workerc_msvc_compat_args = [] 1033*61046927SAndroid Build Coastguard Workerno_override_init_args = [] 1034*61046927SAndroid Build Coastguard Workercpp_msvc_compat_args = [] 1035*61046927SAndroid Build Coastguard Workerld_args_gc_sections = [] 1036*61046927SAndroid Build Coastguard Workerif cc.get_argument_syntax() == 'msvc' 1037*61046927SAndroid Build Coastguard Worker _trial = [ 1038*61046927SAndroid Build Coastguard Worker '/wd4018', # signed/unsigned mismatch 1039*61046927SAndroid Build Coastguard Worker '/wd4056', # overflow in floating-point constant arithmetic 1040*61046927SAndroid Build Coastguard Worker '/wd4244', # conversion from 'type1' to 'type2', possible loss of data 1041*61046927SAndroid Build Coastguard Worker '/wd4267', # 'var' : conversion from 'size_t' to 'type', possible loss of data 1042*61046927SAndroid Build Coastguard Worker '/wd4305', # truncation from 'type1' to 'type2' 1043*61046927SAndroid Build Coastguard Worker '/wd4351', # new behavior: elements of array 'array' will be default initialized 1044*61046927SAndroid Build Coastguard Worker '/wd4756', # overflow in constant arithmetic 1045*61046927SAndroid Build Coastguard Worker '/wd4800', # forcing value to bool 'true' or 'false' (performance warning) 1046*61046927SAndroid Build Coastguard Worker '/wd4996', # disabled deprecated POSIX name warnings 1047*61046927SAndroid Build Coastguard Worker '/wd4291', # no matching operator delete found 1048*61046927SAndroid Build Coastguard Worker '/wd4146', # unary minus operator applied to unsigned type, result still unsigned 1049*61046927SAndroid Build Coastguard Worker '/wd4200', # nonstandard extension used: zero-sized array in struct/union 1050*61046927SAndroid Build Coastguard Worker '/wd4624', # destructor was implicitly defined as deleted [from LLVM] 1051*61046927SAndroid Build Coastguard Worker '/wd4309', # 'initializing': truncation of constant value 1052*61046927SAndroid Build Coastguard Worker '/wd4838', # conversion from 'int' to 'const char' requires a narrowing conversion 1053*61046927SAndroid Build Coastguard Worker '/wd5105', # macro expansion producing 'defined' has undefined behavior (winbase.h, need Windows SDK upgrade) 1054*61046927SAndroid Build Coastguard Worker '/we4020', # Error when passing the wrong number of parameters 1055*61046927SAndroid Build Coastguard Worker '/we4024', # Error when passing different type of parameter 1056*61046927SAndroid Build Coastguard Worker '/we4189', # 'identifier' : local variable is initialized but not referenced 1057*61046927SAndroid Build Coastguard Worker '/Zc:__cplusplus', #Set __cplusplus macro to match the /std:c++<version> on the command line 1058*61046927SAndroid Build Coastguard Worker ] 1059*61046927SAndroid Build Coastguard Worker c_args += cc.get_supported_arguments(_trial) 1060*61046927SAndroid Build Coastguard Worker cpp_args += cpp.get_supported_arguments(_trial) 1061*61046927SAndroid Build Coastguard Workerelse 1062*61046927SAndroid Build Coastguard Worker _trial_c = [ 1063*61046927SAndroid Build Coastguard Worker '-Werror=implicit-function-declaration', 1064*61046927SAndroid Build Coastguard Worker '-Werror=missing-prototypes', 1065*61046927SAndroid Build Coastguard Worker '-Werror=return-type', 1066*61046927SAndroid Build Coastguard Worker '-Werror=empty-body', 1067*61046927SAndroid Build Coastguard Worker '-Werror=incompatible-pointer-types', 1068*61046927SAndroid Build Coastguard Worker '-Werror=int-conversion', 1069*61046927SAndroid Build Coastguard Worker '-Wimplicit-fallthrough', 1070*61046927SAndroid Build Coastguard Worker '-Wmisleading-indentation', 1071*61046927SAndroid Build Coastguard Worker '-Wno-missing-field-initializers', 1072*61046927SAndroid Build Coastguard Worker '-Wno-format-truncation', 1073*61046927SAndroid Build Coastguard Worker '-Wno-nonnull-compare', 1074*61046927SAndroid Build Coastguard Worker '-fno-math-errno', 1075*61046927SAndroid Build Coastguard Worker '-fno-trapping-math', 1076*61046927SAndroid Build Coastguard Worker '-Qunused-arguments', 1077*61046927SAndroid Build Coastguard Worker '-fno-common', 1078*61046927SAndroid Build Coastguard Worker '-Wno-unknown-pragmas', 1079*61046927SAndroid Build Coastguard Worker # Clang 1080*61046927SAndroid Build Coastguard Worker '-Wno-microsoft-enum-value', 1081*61046927SAndroid Build Coastguard Worker '-Wno-unused-function', 1082*61046927SAndroid Build Coastguard Worker ] 1083*61046927SAndroid Build Coastguard Worker _trial_cpp = [ 1084*61046927SAndroid Build Coastguard Worker '-Werror=return-type', 1085*61046927SAndroid Build Coastguard Worker '-Werror=empty-body', 1086*61046927SAndroid Build Coastguard Worker '-Wmisleading-indentation', 1087*61046927SAndroid Build Coastguard Worker '-Wno-non-virtual-dtor', 1088*61046927SAndroid Build Coastguard Worker '-Wno-missing-field-initializers', 1089*61046927SAndroid Build Coastguard Worker '-Wno-format-truncation', 1090*61046927SAndroid Build Coastguard Worker '-fno-math-errno', 1091*61046927SAndroid Build Coastguard Worker '-fno-trapping-math', 1092*61046927SAndroid Build Coastguard Worker '-Qunused-arguments', 1093*61046927SAndroid Build Coastguard Worker # Some classes use custom new operator which zeroes memory, however 1094*61046927SAndroid Build Coastguard Worker # gcc does aggressive dead-store elimination which threats all writes 1095*61046927SAndroid Build Coastguard Worker # to the memory before the constructor as "dead stores". 1096*61046927SAndroid Build Coastguard Worker # For now we disable this optimization. 1097*61046927SAndroid Build Coastguard Worker '-flifetime-dse=1', 1098*61046927SAndroid Build Coastguard Worker '-Wno-unknown-pragmas', 1099*61046927SAndroid Build Coastguard Worker # Clang 1100*61046927SAndroid Build Coastguard Worker '-Wno-microsoft-enum-value', 1101*61046927SAndroid Build Coastguard Worker ] 1102*61046927SAndroid Build Coastguard Worker 1103*61046927SAndroid Build Coastguard Worker # MinGW chokes on format specifiers and I can't get it all working 1104*61046927SAndroid Build Coastguard Worker if not (cc.get_argument_syntax() == 'gcc' and host_machine.system() == 'windows') 1105*61046927SAndroid Build Coastguard Worker _trial_c += ['-Werror=format', '-Wformat-security'] 1106*61046927SAndroid Build Coastguard Worker _trial_cpp += ['-Werror=format', '-Wformat-security'] 1107*61046927SAndroid Build Coastguard Worker endif 1108*61046927SAndroid Build Coastguard Worker 1109*61046927SAndroid Build Coastguard Worker # FreeBSD annotated <pthread.h> but Mesa isn't ready 1110*61046927SAndroid Build Coastguard Worker if not (cc.get_id() == 'clang' and host_machine.system() == 'freebsd') 1111*61046927SAndroid Build Coastguard Worker _trial_c += ['-Werror=thread-safety'] 1112*61046927SAndroid Build Coastguard Worker endif 1113*61046927SAndroid Build Coastguard Worker 1114*61046927SAndroid Build Coastguard Worker # If the compiler supports it, put function and data symbols in their 1115*61046927SAndroid Build Coastguard Worker # own sections and GC the sections after linking. This lets drivers 1116*61046927SAndroid Build Coastguard Worker # drop shared code unused by that specific driver (particularly 1117*61046927SAndroid Build Coastguard Worker # relevant for Vulkan drivers). 1118*61046927SAndroid Build Coastguard Worker if cc.links('static char unused() { return 5; } int main() { return 0; }', 1119*61046927SAndroid Build Coastguard Worker args : '-Wl,--gc-sections', name : 'gc-sections') 1120*61046927SAndroid Build Coastguard Worker ld_args_gc_sections += '-Wl,--gc-sections' 1121*61046927SAndroid Build Coastguard Worker _trial_c += ['-ffunction-sections', '-fdata-sections'] 1122*61046927SAndroid Build Coastguard Worker _trial_cpp += ['-ffunction-sections', '-fdata-sections'] 1123*61046927SAndroid Build Coastguard Worker endif 1124*61046927SAndroid Build Coastguard Worker 1125*61046927SAndroid Build Coastguard Worker # Variables that are only used for assertions are considered unused when assertions 1126*61046927SAndroid Build Coastguard Worker # are disabled. Don't treat this as an error, since we build with -Werror even if 1127*61046927SAndroid Build Coastguard Worker # assertions are disabled. 1128*61046927SAndroid Build Coastguard Worker if with_mesa_ndebug 1129*61046927SAndroid Build Coastguard Worker _trial_c += ['-Wno-unused-variable', '-Wno-unused-but-set-variable', '/wd4189'] 1130*61046927SAndroid Build Coastguard Worker _trial_cpp += ['-Wno-unused-variable', '-Wno-unused-but-set-variable', '/wd4189'] 1131*61046927SAndroid Build Coastguard Worker endif 1132*61046927SAndroid Build Coastguard Worker 1133*61046927SAndroid Build Coastguard Worker c_args += cc.get_supported_arguments(_trial_c) 1134*61046927SAndroid Build Coastguard Worker cpp_args += cpp.get_supported_arguments(_trial_cpp) 1135*61046927SAndroid Build Coastguard Worker 1136*61046927SAndroid Build Coastguard Worker no_override_init_args += cc.get_supported_arguments( 1137*61046927SAndroid Build Coastguard Worker ['-Wno-override-init', '-Wno-initializer-overrides'] 1138*61046927SAndroid Build Coastguard Worker ) 1139*61046927SAndroid Build Coastguard Worker 1140*61046927SAndroid Build Coastguard Worker # Check for C and C++ arguments for MSVC compatibility. These are only used 1141*61046927SAndroid Build Coastguard Worker # in parts of the mesa code base that need to compile with MSVC, mainly 1142*61046927SAndroid Build Coastguard Worker # common code 1143*61046927SAndroid Build Coastguard Worker _trial_msvc = ['-Werror=pointer-arith', '-Werror=vla', '-Werror=gnu-empty-initializer'] 1144*61046927SAndroid Build Coastguard Worker c_msvc_compat_args += cc.get_supported_arguments(_trial_msvc) 1145*61046927SAndroid Build Coastguard Worker cpp_msvc_compat_args += cpp.get_supported_arguments(_trial_msvc) 1146*61046927SAndroid Build Coastguard Workerendif 1147*61046927SAndroid Build Coastguard Worker 1148*61046927SAndroid Build Coastguard Worker# set linker arguments 1149*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 1150*61046927SAndroid Build Coastguard Worker if cc.get_argument_syntax() == 'msvc' 1151*61046927SAndroid Build Coastguard Worker add_project_link_arguments( 1152*61046927SAndroid Build Coastguard Worker '/fixed:no', 1153*61046927SAndroid Build Coastguard Worker '/dynamicbase', 1154*61046927SAndroid Build Coastguard Worker '/nxcompat', 1155*61046927SAndroid Build Coastguard Worker language : ['c', 'cpp'], 1156*61046927SAndroid Build Coastguard Worker ) 1157*61046927SAndroid Build Coastguard Worker if get_option('buildtype') != 'debug' 1158*61046927SAndroid Build Coastguard Worker add_project_link_arguments( 1159*61046927SAndroid Build Coastguard Worker '/incremental:no', 1160*61046927SAndroid Build Coastguard Worker language : ['c', 'cpp'], 1161*61046927SAndroid Build Coastguard Worker ) 1162*61046927SAndroid Build Coastguard Worker endif 1163*61046927SAndroid Build Coastguard Worker else 1164*61046927SAndroid Build Coastguard Worker add_project_link_arguments( 1165*61046927SAndroid Build Coastguard Worker cc.get_supported_link_arguments( 1166*61046927SAndroid Build Coastguard Worker '-Wl,--nxcompat', 1167*61046927SAndroid Build Coastguard Worker '-Wl,--dynamicbase', 1168*61046927SAndroid Build Coastguard Worker '-static-libgcc', 1169*61046927SAndroid Build Coastguard Worker '-static-libstdc++', 1170*61046927SAndroid Build Coastguard Worker ), 1171*61046927SAndroid Build Coastguard Worker language : ['c'], 1172*61046927SAndroid Build Coastguard Worker ) 1173*61046927SAndroid Build Coastguard Worker add_project_link_arguments( 1174*61046927SAndroid Build Coastguard Worker cpp.get_supported_link_arguments( 1175*61046927SAndroid Build Coastguard Worker '-Wl,--nxcompat', 1176*61046927SAndroid Build Coastguard Worker '-Wl,--dynamicbase', 1177*61046927SAndroid Build Coastguard Worker '-static-libgcc', 1178*61046927SAndroid Build Coastguard Worker '-static-libstdc++', 1179*61046927SAndroid Build Coastguard Worker ), 1180*61046927SAndroid Build Coastguard Worker language : ['cpp'], 1181*61046927SAndroid Build Coastguard Worker ) 1182*61046927SAndroid Build Coastguard Worker endif 1183*61046927SAndroid Build Coastguard Workerendif 1184*61046927SAndroid Build Coastguard Worker 1185*61046927SAndroid Build Coastguard Workersse2_arg = [] 1186*61046927SAndroid Build Coastguard Workersse2_args = [] 1187*61046927SAndroid Build Coastguard Workersse41_args = [] 1188*61046927SAndroid Build Coastguard Workerwith_sse41 = false 1189*61046927SAndroid Build Coastguard Workerif host_machine.cpu_family().startswith('x86') 1190*61046927SAndroid Build Coastguard Worker pre_args += '-DUSE_SSE41' 1191*61046927SAndroid Build Coastguard Worker with_sse41 = true 1192*61046927SAndroid Build Coastguard Worker 1193*61046927SAndroid Build Coastguard Worker if cc.get_id() != 'msvc' 1194*61046927SAndroid Build Coastguard Worker sse41_args = ['-msse4.1'] 1195*61046927SAndroid Build Coastguard Worker 1196*61046927SAndroid Build Coastguard Worker if host_machine.cpu_family() == 'x86' 1197*61046927SAndroid Build Coastguard Worker # x86_64 have sse2 by default, so sse2 args only for x86 1198*61046927SAndroid Build Coastguard Worker sse2_arg = ['-msse2', '-mfpmath=sse'] 1199*61046927SAndroid Build Coastguard Worker sse2_args = [sse2_arg, '-mstackrealign'] 1200*61046927SAndroid Build Coastguard Worker if get_option('sse2') 1201*61046927SAndroid Build Coastguard Worker # These settings make generated GCC code match MSVC and follow 1202*61046927SAndroid Build Coastguard Worker # GCC advice on https://gcc.gnu.org/wiki/FloatingPointMath#x86note 1203*61046927SAndroid Build Coastguard Worker # 1204*61046927SAndroid Build Coastguard Worker # NOTE: We need to ensure stack is realigned given that we 1205*61046927SAndroid Build Coastguard Worker # produce shared objects, and have no control over the stack 1206*61046927SAndroid Build Coastguard Worker # alignment policy of the application. Therefore we need 1207*61046927SAndroid Build Coastguard Worker # -mstackrealign or -mincoming-stack-boundary=2. 1208*61046927SAndroid Build Coastguard Worker # 1209*61046927SAndroid Build Coastguard Worker # XXX: We could have SSE without -mstackrealign if we always used 1210*61046927SAndroid Build Coastguard Worker # __attribute__((force_align_arg_pointer)), but that's not 1211*61046927SAndroid Build Coastguard Worker # always the case. 1212*61046927SAndroid Build Coastguard Worker c_cpp_args += sse2_args 1213*61046927SAndroid Build Coastguard Worker # sse2_args are adopted into c_cpp_args to avoid duplicated sse2 command line args 1214*61046927SAndroid Build Coastguard Worker sse2_arg = [] 1215*61046927SAndroid Build Coastguard Worker sse2_args = [] 1216*61046927SAndroid Build Coastguard Worker else 1217*61046927SAndroid Build Coastguard Worker # GCC on x86 (not x86_64) with -msse* assumes a 16 byte aligned stack, but 1218*61046927SAndroid Build Coastguard Worker # that's not guaranteed 1219*61046927SAndroid Build Coastguard Worker sse41_args += '-mstackrealign' 1220*61046927SAndroid Build Coastguard Worker endif 1221*61046927SAndroid Build Coastguard Worker endif 1222*61046927SAndroid Build Coastguard Worker endif 1223*61046927SAndroid Build Coastguard Workerendif 1224*61046927SAndroid Build Coastguard Worker 1225*61046927SAndroid Build Coastguard Worker# Detect __builtin_ia32_clflushopt support 1226*61046927SAndroid Build Coastguard Workerif cc.has_function('__builtin_ia32_clflushopt', args : '-mclflushopt') 1227*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE___BUILTIN_IA32_CLFLUSHOPT' 1228*61046927SAndroid Build Coastguard Worker clflushopt_args = ['-mclflushopt'] 1229*61046927SAndroid Build Coastguard Worker with_clflushopt = true 1230*61046927SAndroid Build Coastguard Workerelse 1231*61046927SAndroid Build Coastguard Worker clflushopt_args = [] 1232*61046927SAndroid Build Coastguard Worker with_clflushopt = false 1233*61046927SAndroid Build Coastguard Workerendif 1234*61046927SAndroid Build Coastguard Worker 1235*61046927SAndroid Build Coastguard Worker# Check for GCC style atomics 1236*61046927SAndroid Build Coastguard Workerdep_atomic = null_dep 1237*61046927SAndroid Build Coastguard Worker 1238*61046927SAndroid Build Coastguard Workerif cc.compiles('''#include <stdint.h> 1239*61046927SAndroid Build Coastguard Worker int main() { 1240*61046927SAndroid Build Coastguard Worker struct { 1241*61046927SAndroid Build Coastguard Worker uint64_t *v; 1242*61046927SAndroid Build Coastguard Worker } x; 1243*61046927SAndroid Build Coastguard Worker return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) & 1244*61046927SAndroid Build Coastguard Worker (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL); 1245*61046927SAndroid Build Coastguard Worker 1246*61046927SAndroid Build Coastguard Worker }''', 1247*61046927SAndroid Build Coastguard Worker name : 'GCC atomic builtins') 1248*61046927SAndroid Build Coastguard Worker pre_args += '-DUSE_GCC_ATOMIC_BUILTINS' 1249*61046927SAndroid Build Coastguard Worker 1250*61046927SAndroid Build Coastguard Worker # Not all atomic calls can be turned into lock-free instructions, in which 1251*61046927SAndroid Build Coastguard Worker # GCC will make calls into the libatomic library. Check whether we need to 1252*61046927SAndroid Build Coastguard Worker # link with -latomic. 1253*61046927SAndroid Build Coastguard Worker # 1254*61046927SAndroid Build Coastguard Worker # This can happen for 64-bit atomic operations on 32-bit architectures such 1255*61046927SAndroid Build Coastguard Worker # as ARM. 1256*61046927SAndroid Build Coastguard Worker if not cc.links('''#include <stdint.h> 1257*61046927SAndroid Build Coastguard Worker int main() { 1258*61046927SAndroid Build Coastguard Worker struct { 1259*61046927SAndroid Build Coastguard Worker uint64_t *v; 1260*61046927SAndroid Build Coastguard Worker } x; 1261*61046927SAndroid Build Coastguard Worker return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) & 1262*61046927SAndroid Build Coastguard Worker (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL); 1263*61046927SAndroid Build Coastguard Worker }''', 1264*61046927SAndroid Build Coastguard Worker name : 'GCC atomic builtins required -latomic') 1265*61046927SAndroid Build Coastguard Worker dep_atomic = cc.find_library('atomic') 1266*61046927SAndroid Build Coastguard Worker endif 1267*61046927SAndroid Build Coastguard Workerendif 1268*61046927SAndroid Build Coastguard Workerif not cc.links('''#include <stdint.h> 1269*61046927SAndroid Build Coastguard Worker uint64_t v; 1270*61046927SAndroid Build Coastguard Worker int main() { 1271*61046927SAndroid Build Coastguard Worker return __sync_add_and_fetch(&v, (uint64_t)1); 1272*61046927SAndroid Build Coastguard Worker }''', 1273*61046927SAndroid Build Coastguard Worker dependencies : dep_atomic, 1274*61046927SAndroid Build Coastguard Worker name : 'GCC 64bit atomics') 1275*61046927SAndroid Build Coastguard Worker pre_args += '-DMISSING_64BIT_ATOMICS' 1276*61046927SAndroid Build Coastguard Workerendif 1277*61046927SAndroid Build Coastguard Worker 1278*61046927SAndroid Build Coastguard Workerdep_ws2_32 = cc.find_library('ws2_32', required : with_platform_windows) 1279*61046927SAndroid Build Coastguard Worker 1280*61046927SAndroid Build Coastguard Worker# TODO: shared/static? Is this even worth doing? 1281*61046927SAndroid Build Coastguard Worker 1282*61046927SAndroid Build Coastguard Workerwith_asm_arch = '' 1283*61046927SAndroid Build Coastguard Workerif host_machine.cpu_family() == 'x86' 1284*61046927SAndroid Build Coastguard Worker if system_has_kms_drm or host_machine.system() == 'gnu' 1285*61046927SAndroid Build Coastguard Worker with_asm_arch = 'x86' 1286*61046927SAndroid Build Coastguard Worker pre_args += ['-DUSE_X86_ASM'] 1287*61046927SAndroid Build Coastguard Worker 1288*61046927SAndroid Build Coastguard Worker if with_glx_read_only_text 1289*61046927SAndroid Build Coastguard Worker pre_args += ['-DGLX_X86_READONLY_TEXT'] 1290*61046927SAndroid Build Coastguard Worker endif 1291*61046927SAndroid Build Coastguard Worker endif 1292*61046927SAndroid Build Coastguard Workerelif host_machine.cpu_family() == 'x86_64' 1293*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 1294*61046927SAndroid Build Coastguard Worker with_asm_arch = 'x86_64' 1295*61046927SAndroid Build Coastguard Worker pre_args += ['-DUSE_X86_64_ASM'] 1296*61046927SAndroid Build Coastguard Worker endif 1297*61046927SAndroid Build Coastguard Workerelif host_machine.cpu_family() == 'arm' 1298*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 1299*61046927SAndroid Build Coastguard Worker with_asm_arch = 'arm' 1300*61046927SAndroid Build Coastguard Worker pre_args += ['-DUSE_ARM_ASM'] 1301*61046927SAndroid Build Coastguard Worker endif 1302*61046927SAndroid Build Coastguard Workerelif host_machine.cpu_family() == 'aarch64' 1303*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 1304*61046927SAndroid Build Coastguard Worker with_asm_arch = 'aarch64' 1305*61046927SAndroid Build Coastguard Worker pre_args += ['-DUSE_AARCH64_ASM'] 1306*61046927SAndroid Build Coastguard Worker endif 1307*61046927SAndroid Build Coastguard Workerelif host_machine.cpu_family() == 'sparc64' 1308*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 1309*61046927SAndroid Build Coastguard Worker with_asm_arch = 'sparc' 1310*61046927SAndroid Build Coastguard Worker pre_args += ['-DUSE_SPARC_ASM'] 1311*61046927SAndroid Build Coastguard Worker endif 1312*61046927SAndroid Build Coastguard Workerelif host_machine.cpu_family() == 'ppc64' and host_machine.endian() == 'little' 1313*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 1314*61046927SAndroid Build Coastguard Worker with_asm_arch = 'ppc64le' 1315*61046927SAndroid Build Coastguard Worker pre_args += ['-DUSE_PPC64LE_ASM'] 1316*61046927SAndroid Build Coastguard Worker endif 1317*61046927SAndroid Build Coastguard Workerelif host_machine.cpu_family() == 'mips64' and host_machine.endian() == 'little' 1318*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 1319*61046927SAndroid Build Coastguard Worker with_asm_arch = 'mips64el' 1320*61046927SAndroid Build Coastguard Worker pre_args += ['-DUSE_MIPS64EL_ASM'] 1321*61046927SAndroid Build Coastguard Worker endif 1322*61046927SAndroid Build Coastguard Workerelif host_machine.cpu_family() == 'loongarch64' 1323*61046927SAndroid Build Coastguard Worker if system_has_kms_drm 1324*61046927SAndroid Build Coastguard Worker with_asm_arch = 'loongarch64' 1325*61046927SAndroid Build Coastguard Worker pre_args += ['-DUSE_LOONGARCH64_ASM'] 1326*61046927SAndroid Build Coastguard Worker endif 1327*61046927SAndroid Build Coastguard Workerendif 1328*61046927SAndroid Build Coastguard Worker 1329*61046927SAndroid Build Coastguard Worker# Check for standard headers and functions 1330*61046927SAndroid Build Coastguard Workerif (cc.has_header_symbol('sys/sysmacros.h', 'major') and 1331*61046927SAndroid Build Coastguard Worker cc.has_header_symbol('sys/sysmacros.h', 'minor') and 1332*61046927SAndroid Build Coastguard Worker cc.has_header_symbol('sys/sysmacros.h', 'makedev')) 1333*61046927SAndroid Build Coastguard Worker pre_args += '-DMAJOR_IN_SYSMACROS' 1334*61046927SAndroid Build Coastguard Workerendif 1335*61046927SAndroid Build Coastguard Workerif (cc.has_header_symbol('sys/mkdev.h', 'major') and 1336*61046927SAndroid Build Coastguard Worker cc.has_header_symbol('sys/mkdev.h', 'minor') and 1337*61046927SAndroid Build Coastguard Worker cc.has_header_symbol('sys/mkdev.h', 'makedev')) 1338*61046927SAndroid Build Coastguard Worker pre_args += '-DMAJOR_IN_MKDEV' 1339*61046927SAndroid Build Coastguard Workerendif 1340*61046927SAndroid Build Coastguard Worker 1341*61046927SAndroid Build Coastguard Workerif cc.check_header('sched.h') 1342*61046927SAndroid Build Coastguard Worker pre_args += '-DHAS_SCHED_H' 1343*61046927SAndroid Build Coastguard Worker if cc.has_function('sched_getaffinity') 1344*61046927SAndroid Build Coastguard Worker pre_args += '-DHAS_SCHED_GETAFFINITY' 1345*61046927SAndroid Build Coastguard Worker endif 1346*61046927SAndroid Build Coastguard Workerendif 1347*61046927SAndroid Build Coastguard Worker 1348*61046927SAndroid Build Coastguard Workerif not ['linux'].contains(host_machine.system()) 1349*61046927SAndroid Build Coastguard Worker # Deprecated on Linux and requires <sys/types.h> on FreeBSD and OpenBSD 1350*61046927SAndroid Build Coastguard Worker if cc.check_header('sys/sysctl.h', prefix : '#include <sys/types.h>') 1351*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_SYS_SYSCTL_H' 1352*61046927SAndroid Build Coastguard Worker endif 1353*61046927SAndroid Build Coastguard Workerendif 1354*61046927SAndroid Build Coastguard Worker 1355*61046927SAndroid Build Coastguard Workerforeach h : ['xlocale.h', 'linux/futex.h', 'endian.h', 'dlfcn.h', 'sys/shm.h', 1356*61046927SAndroid Build Coastguard Worker 'cet.h', 'pthread_np.h', 'sys/inotify.h', 'linux/udmabuf.h'] 1357*61046927SAndroid Build Coastguard Worker if cc.check_header(h) 1358*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_@0@'.format(h.to_upper().underscorify()) 1359*61046927SAndroid Build Coastguard Worker endif 1360*61046927SAndroid Build Coastguard Workerendforeach 1361*61046927SAndroid Build Coastguard Worker 1362*61046927SAndroid Build Coastguard Workerfunctions_to_detect = { 1363*61046927SAndroid Build Coastguard Worker 'strtof': '', 1364*61046927SAndroid Build Coastguard Worker 'mkostemp': '', 1365*61046927SAndroid Build Coastguard Worker 'memfd_create': '', 1366*61046927SAndroid Build Coastguard Worker 'random_r': '', 1367*61046927SAndroid Build Coastguard Worker 'flock': '', 1368*61046927SAndroid Build Coastguard Worker 'strtok_r': '', 1369*61046927SAndroid Build Coastguard Worker 'getrandom': '', 1370*61046927SAndroid Build Coastguard Worker 'qsort_s': '', 1371*61046927SAndroid Build Coastguard Worker 'posix_fallocate': '', 1372*61046927SAndroid Build Coastguard Worker 'secure_getenv': '', 1373*61046927SAndroid Build Coastguard Worker} 1374*61046927SAndroid Build Coastguard Worker 1375*61046927SAndroid Build Coastguard Workerforeach f, prefix: functions_to_detect 1376*61046927SAndroid Build Coastguard Worker if cc.has_function(f, prefix: prefix) 1377*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_@0@'.format(f.to_upper()) 1378*61046927SAndroid Build Coastguard Worker endif 1379*61046927SAndroid Build Coastguard Workerendforeach 1380*61046927SAndroid Build Coastguard Worker 1381*61046927SAndroid Build Coastguard Workerif cpp.links(''' 1382*61046927SAndroid Build Coastguard Worker #define _GNU_SOURCE 1383*61046927SAndroid Build Coastguard Worker #include <stdlib.h> 1384*61046927SAndroid Build Coastguard Worker 1385*61046927SAndroid Build Coastguard Worker static int dcomp(const void *l, const void *r, void *t) { return 0; } 1386*61046927SAndroid Build Coastguard Worker 1387*61046927SAndroid Build Coastguard Worker int main(int ac, char **av) { 1388*61046927SAndroid Build Coastguard Worker int arr[] = { 1 }; 1389*61046927SAndroid Build Coastguard Worker void *t = NULL; 1390*61046927SAndroid Build Coastguard Worker qsort_r((void*)&arr[0], 1, 1, dcomp, t); 1391*61046927SAndroid Build Coastguard Worker return (0); 1392*61046927SAndroid Build Coastguard Worker }''', 1393*61046927SAndroid Build Coastguard Worker args : pre_args, 1394*61046927SAndroid Build Coastguard Worker name : 'GNU qsort_r') 1395*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_GNU_QSORT_R' 1396*61046927SAndroid Build Coastguard Workerelif cpp.links(''' 1397*61046927SAndroid Build Coastguard Worker #include <stdlib.h> 1398*61046927SAndroid Build Coastguard Worker 1399*61046927SAndroid Build Coastguard Worker static int dcomp(void *t, const void *l, const void *r) { return 0; } 1400*61046927SAndroid Build Coastguard Worker 1401*61046927SAndroid Build Coastguard Worker int main(int ac, char **av) { 1402*61046927SAndroid Build Coastguard Worker int arr[] = { 1 }; 1403*61046927SAndroid Build Coastguard Worker void *t = NULL; 1404*61046927SAndroid Build Coastguard Worker qsort_r((void*)&arr[0], 1, 1, t, dcomp); 1405*61046927SAndroid Build Coastguard Worker return (0); 1406*61046927SAndroid Build Coastguard Worker }''', 1407*61046927SAndroid Build Coastguard Worker args : pre_args, 1408*61046927SAndroid Build Coastguard Worker name : 'BSD qsort_r') 1409*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_BSD_QSORT_R' 1410*61046927SAndroid Build Coastguard Workerendif 1411*61046927SAndroid Build Coastguard Worker 1412*61046927SAndroid Build Coastguard Workerif cc.has_header_symbol('time.h', 'struct timespec') 1413*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_STRUCT_TIMESPEC' 1414*61046927SAndroid Build Coastguard Workerendif 1415*61046927SAndroid Build Coastguard Worker 1416*61046927SAndroid Build Coastguard Workerwith_c11_threads = false 1417*61046927SAndroid Build Coastguard Workerif cc.has_function('thrd_create', prefix: '#include <threads.h>') 1418*61046927SAndroid Build Coastguard Worker if with_platform_android 1419*61046927SAndroid Build Coastguard Worker # Current only Android's c11 <threads.h> are verified 1420*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_THRD_CREATE' 1421*61046927SAndroid Build Coastguard Worker with_c11_threads = true 1422*61046927SAndroid Build Coastguard Worker endif 1423*61046927SAndroid Build Coastguard Workerendif 1424*61046927SAndroid Build Coastguard Worker 1425*61046927SAndroid Build Coastguard Workerif cc.has_header_symbol('errno.h', 'program_invocation_name', 1426*61046927SAndroid Build Coastguard Worker args : '-D_GNU_SOURCE') 1427*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_PROGRAM_INVOCATION_NAME' 1428*61046927SAndroid Build Coastguard Workerelif with_tools.contains('intel') 1429*61046927SAndroid Build Coastguard Worker error('Intel tools require the program_invocation_name variable') 1430*61046927SAndroid Build Coastguard Workerendif 1431*61046927SAndroid Build Coastguard Worker 1432*61046927SAndroid Build Coastguard Workerif cc.has_header_symbol('math.h', 'issignaling', 1433*61046927SAndroid Build Coastguard Worker args : '-D_GNU_SOURCE') 1434*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_ISSIGNALING' 1435*61046927SAndroid Build Coastguard Workerendif 1436*61046927SAndroid Build Coastguard Worker 1437*61046927SAndroid Build Coastguard Worker# MinGW provides a __builtin_posix_memalign function, but not a posix_memalign. 1438*61046927SAndroid Build Coastguard Worker# This means that this check will succeed, but then compilation will later 1439*61046927SAndroid Build Coastguard Worker# fail. MSVC doesn't have this function at all, so only check for it on 1440*61046927SAndroid Build Coastguard Worker# non-windows platforms. 1441*61046927SAndroid Build Coastguard Workerif host_machine.system() != 'windows' 1442*61046927SAndroid Build Coastguard Worker if cc.has_function('posix_memalign') 1443*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_POSIX_MEMALIGN' 1444*61046927SAndroid Build Coastguard Worker endif 1445*61046927SAndroid Build Coastguard Workerendif 1446*61046927SAndroid Build Coastguard Worker 1447*61046927SAndroid Build Coastguard Workerif cc.has_member('struct dirent', 'd_type', prefix: '''#include <sys/types.h> 1448*61046927SAndroid Build Coastguard Worker #include <dirent.h>''') 1449*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_DIRENT_D_TYPE' 1450*61046927SAndroid Build Coastguard Workerendif 1451*61046927SAndroid Build Coastguard Worker 1452*61046927SAndroid Build Coastguard Worker# strtod locale support 1453*61046927SAndroid Build Coastguard Workerif cc.links(''' 1454*61046927SAndroid Build Coastguard Worker #define _GNU_SOURCE 1455*61046927SAndroid Build Coastguard Worker #include <stdlib.h> 1456*61046927SAndroid Build Coastguard Worker #include <locale.h> 1457*61046927SAndroid Build Coastguard Worker #ifdef HAVE_XLOCALE_H 1458*61046927SAndroid Build Coastguard Worker #include <xlocale.h> 1459*61046927SAndroid Build Coastguard Worker #endif 1460*61046927SAndroid Build Coastguard Worker int main() { 1461*61046927SAndroid Build Coastguard Worker locale_t loc = newlocale(LC_CTYPE_MASK, "C", NULL); 1462*61046927SAndroid Build Coastguard Worker const char *s = "1.0"; 1463*61046927SAndroid Build Coastguard Worker char *end; 1464*61046927SAndroid Build Coastguard Worker double d = strtod_l(s, &end, loc); 1465*61046927SAndroid Build Coastguard Worker float f = strtof_l(s, &end, loc); 1466*61046927SAndroid Build Coastguard Worker freelocale(loc); 1467*61046927SAndroid Build Coastguard Worker return 0; 1468*61046927SAndroid Build Coastguard Worker }''', 1469*61046927SAndroid Build Coastguard Worker args : pre_args, 1470*61046927SAndroid Build Coastguard Worker name : 'strtod has locale support') 1471*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_STRTOD_L' 1472*61046927SAndroid Build Coastguard Workerendif 1473*61046927SAndroid Build Coastguard Worker 1474*61046927SAndroid Build Coastguard Worker# Check for some linker flags 1475*61046927SAndroid Build Coastguard Workerld_args_bsymbolic = [] 1476*61046927SAndroid Build Coastguard Workerif cc.links('int main() { return 0; }', args : '-Wl,-Bsymbolic', name : 'Bsymbolic') 1477*61046927SAndroid Build Coastguard Worker ld_args_bsymbolic += '-Wl,-Bsymbolic' 1478*61046927SAndroid Build Coastguard Workerendif 1479*61046927SAndroid Build Coastguard Workerwith_ld_version_script = false 1480*61046927SAndroid Build Coastguard Workerif cc.links('int main() { return 0; }', 1481*61046927SAndroid Build Coastguard Worker args : '-Wl,--version-script=@0@'.format( 1482*61046927SAndroid Build Coastguard Worker join_paths(meson.current_source_dir(), 'build-support/conftest.map')), 1483*61046927SAndroid Build Coastguard Worker name : 'version-script') 1484*61046927SAndroid Build Coastguard Worker with_ld_version_script = true 1485*61046927SAndroid Build Coastguard Workerendif 1486*61046927SAndroid Build Coastguard Workerwith_ld_dynamic_list = false 1487*61046927SAndroid Build Coastguard Workerif cc.links('int main() { return 0; }', 1488*61046927SAndroid Build Coastguard Worker args : '-Wl,--dynamic-list=@0@'.format( 1489*61046927SAndroid Build Coastguard Worker join_paths(meson.current_source_dir(), 'build-support/conftest.dyn')), 1490*61046927SAndroid Build Coastguard Worker name : 'dynamic-list') 1491*61046927SAndroid Build Coastguard Worker with_ld_dynamic_list = true 1492*61046927SAndroid Build Coastguard Workerendif 1493*61046927SAndroid Build Coastguard Worker 1494*61046927SAndroid Build Coastguard Workerld_args_build_id = cc.get_supported_link_arguments('-Wl,--build-id=sha1') 1495*61046927SAndroid Build Coastguard Worker 1496*61046927SAndroid Build Coastguard Worker# check for dl support 1497*61046927SAndroid Build Coastguard Workerdep_dl = null_dep 1498*61046927SAndroid Build Coastguard Workerif host_machine.system() != 'windows' 1499*61046927SAndroid Build Coastguard Worker if not cc.has_function('dlopen') 1500*61046927SAndroid Build Coastguard Worker dep_dl = cc.find_library('dl', required : true) 1501*61046927SAndroid Build Coastguard Worker endif 1502*61046927SAndroid Build Coastguard Worker if cc.has_function('dladdr', dependencies : dep_dl) 1503*61046927SAndroid Build Coastguard Worker # This is really only required for util/disk_cache.h 1504*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_DLADDR' 1505*61046927SAndroid Build Coastguard Worker endif 1506*61046927SAndroid Build Coastguard Workerendif 1507*61046927SAndroid Build Coastguard Worker 1508*61046927SAndroid Build Coastguard Workerif cc.has_function('dl_iterate_phdr') 1509*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_DL_ITERATE_PHDR' 1510*61046927SAndroid Build Coastguard Workerelif with_intel_vk or with_intel_hasvk 1511*61046927SAndroid Build Coastguard Worker error('Intel "Anvil" Vulkan driver requires the dl_iterate_phdr function') 1512*61046927SAndroid Build Coastguard Workerendif 1513*61046927SAndroid Build Coastguard Worker 1514*61046927SAndroid Build Coastguard Workerif with_any_intel and ['x86', 'x86_64'].contains(host_machine.cpu_family()) 1515*61046927SAndroid Build Coastguard Worker pre_args += '-DSUPPORT_INTEL_INTEGRATED_GPUS' 1516*61046927SAndroid Build Coastguard Workerendif 1517*61046927SAndroid Build Coastguard Worker 1518*61046927SAndroid Build Coastguard Workerif with_gallium_i915 and host_machine.cpu_family().startswith('x86') == false 1519*61046927SAndroid Build Coastguard Worker error('Intel "i915" Gallium driver requires x86 or x86_64 CPU family') 1520*61046927SAndroid Build Coastguard Workerendif 1521*61046927SAndroid Build Coastguard Worker 1522*61046927SAndroid Build Coastguard Worker# Determine whether or not the rt library is needed for time functions 1523*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'windows' or cc.has_function('clock_gettime') 1524*61046927SAndroid Build Coastguard Worker dep_clock = null_dep 1525*61046927SAndroid Build Coastguard Workerelse 1526*61046927SAndroid Build Coastguard Worker dep_clock = cc.find_library('rt') 1527*61046927SAndroid Build Coastguard Workerendif 1528*61046927SAndroid Build Coastguard Worker 1529*61046927SAndroid Build Coastguard Worker# IMPORTANT: We can't upgrade Zlib beyond 1.2.5 because it would break Viewperf. 1530*61046927SAndroid Build Coastguard Workerdep_zlib = dependency('zlib', version : '>= 1.2.3', 1531*61046927SAndroid Build Coastguard Worker allow_fallback: true, 1532*61046927SAndroid Build Coastguard Worker required : get_option('zlib')) 1533*61046927SAndroid Build Coastguard Workerif dep_zlib.found() 1534*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_ZLIB' 1535*61046927SAndroid Build Coastguard Workerendif 1536*61046927SAndroid Build Coastguard Worker 1537*61046927SAndroid Build Coastguard Workerdep_zstd = dependency('libzstd', required : get_option('zstd')) 1538*61046927SAndroid Build Coastguard Workerif dep_zstd.found() 1539*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_ZSTD' 1540*61046927SAndroid Build Coastguard Workerendif 1541*61046927SAndroid Build Coastguard Worker 1542*61046927SAndroid Build Coastguard Workerwith_compression = dep_zlib.found() or dep_zstd.found() 1543*61046927SAndroid Build Coastguard Workerif with_compression 1544*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_COMPRESSION' 1545*61046927SAndroid Build Coastguard Workerelif with_shader_cache 1546*61046927SAndroid Build Coastguard Worker error('Shader Cache requires compression') 1547*61046927SAndroid Build Coastguard Workerendif 1548*61046927SAndroid Build Coastguard Worker 1549*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 1550*61046927SAndroid Build Coastguard Worker # For MSVC and MinGW we aren't using pthreads, and dependency('threads') will add linkage 1551*61046927SAndroid Build Coastguard Worker # to pthread for MinGW, so leave the dependency null_dep for Windows. For Windows linking to 1552*61046927SAndroid Build Coastguard Worker # kernel32 is enough for c11/threads.h and it's already linked by meson by default 1553*61046927SAndroid Build Coastguard Worker dep_thread = null_dep 1554*61046927SAndroid Build Coastguard Workerelse 1555*61046927SAndroid Build Coastguard Worker dep_thread = dependency('threads') 1556*61046927SAndroid Build Coastguard Workerendif 1557*61046927SAndroid Build Coastguard Workerif dep_thread.found() 1558*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_PTHREAD' 1559*61046927SAndroid Build Coastguard Worker if host_machine.system() != 'netbsd' and cc.has_function( 1560*61046927SAndroid Build Coastguard Worker 'pthread_setaffinity_np', 1561*61046927SAndroid Build Coastguard Worker dependencies : dep_thread, 1562*61046927SAndroid Build Coastguard Worker prefix : '#include <pthread.h>', 1563*61046927SAndroid Build Coastguard Worker args : '-D_GNU_SOURCE') 1564*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_PTHREAD_SETAFFINITY' 1565*61046927SAndroid Build Coastguard Worker endif 1566*61046927SAndroid Build Coastguard Workerendif 1567*61046927SAndroid Build Coastguard Worker 1568*61046927SAndroid Build Coastguard Workerwith_expat = get_option('expat') \ 1569*61046927SAndroid Build Coastguard Worker .disable_auto_if(with_platform_android or with_platform_windows) 1570*61046927SAndroid Build Coastguard Worker 1571*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'darwin' 1572*61046927SAndroid Build Coastguard Worker dep_expat = meson.get_compiler('c').find_library('expat', required : with_expat) 1573*61046927SAndroid Build Coastguard Workerelse 1574*61046927SAndroid Build Coastguard Worker dep_expat = dependency('expat', allow_fallback: true, 1575*61046927SAndroid Build Coastguard Worker required : with_expat) 1576*61046927SAndroid Build Coastguard Workerendif 1577*61046927SAndroid Build Coastguard Worker 1578*61046927SAndroid Build Coastguard Worker# TODO: with Meson 1.1.0 this can be replaced with with_expat.enable_if(with_intel_tools) 1579*61046927SAndroid Build Coastguard Workerif with_intel_tools and not dep_expat.found() 1580*61046927SAndroid Build Coastguard Worker error('Intel tools require expat') 1581*61046927SAndroid Build Coastguard Workerendif 1582*61046927SAndroid Build Coastguard Worker 1583*61046927SAndroid Build Coastguard Worker# We don't require expat on Android or Windows 1584*61046927SAndroid Build Coastguard Workeruse_xmlconfig = get_option('xmlconfig') \ 1585*61046927SAndroid Build Coastguard Worker .require(not (with_platform_android or with_platform_windows), 1586*61046927SAndroid Build Coastguard Worker error_message : 'xmlconfig not available on Android or Windows') \ 1587*61046927SAndroid Build Coastguard Worker .require(dep_expat.found(), 1588*61046927SAndroid Build Coastguard Worker error_message : 'requires expat') \ 1589*61046927SAndroid Build Coastguard Worker .allowed() 1590*61046927SAndroid Build Coastguard Worker 1591*61046927SAndroid Build Coastguard Worker# Predefined macros for windows 1592*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 1593*61046927SAndroid Build Coastguard Worker pre_args += '-DWIN32_LEAN_AND_MEAN' # http://msdn2.microsoft.com/en-us/library/6dwk3a1z.aspx 1594*61046927SAndroid Build Coastguard Workerendif 1595*61046927SAndroid Build Coastguard Worker# this only exists on linux so either this is linux and it will be found, or 1596*61046927SAndroid Build Coastguard Worker# it's not linux and wont 1597*61046927SAndroid Build Coastguard Workerdep_m = cc.find_library('m', required : false) 1598*61046927SAndroid Build Coastguard Worker 1599*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 1600*61046927SAndroid Build Coastguard Worker dep_regex = meson.get_compiler('c').find_library('regex', required : false) 1601*61046927SAndroid Build Coastguard Worker if not dep_regex.found() 1602*61046927SAndroid Build Coastguard Worker dep_regex = declare_dependency(compile_args : ['-DNO_REGEX']) 1603*61046927SAndroid Build Coastguard Worker endif 1604*61046927SAndroid Build Coastguard Workerelse 1605*61046927SAndroid Build Coastguard Worker dep_regex = null_dep 1606*61046927SAndroid Build Coastguard Workerendif 1607*61046927SAndroid Build Coastguard Worker 1608*61046927SAndroid Build Coastguard Workerif with_platform_haiku 1609*61046927SAndroid Build Coastguard Worker dep_network = cc.find_library('network') 1610*61046927SAndroid Build Coastguard Workerendif 1611*61046927SAndroid Build Coastguard Worker 1612*61046927SAndroid Build Coastguard Workerdep_futex = null_dep 1613*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 1614*61046927SAndroid Build Coastguard Worker if (get_option('min-windows-version') < 8) 1615*61046927SAndroid Build Coastguard Worker pre_args += '-DWINDOWS_NO_FUTEX' 1616*61046927SAndroid Build Coastguard Worker else 1617*61046927SAndroid Build Coastguard Worker dep_futex = cc.find_library('synchronization', required : true) 1618*61046927SAndroid Build Coastguard Worker endif 1619*61046927SAndroid Build Coastguard Workerendif 1620*61046927SAndroid Build Coastguard Worker 1621*61046927SAndroid Build Coastguard Worker# Check for libdrm. Various drivers have different libdrm version requirements, 1622*61046927SAndroid Build Coastguard Worker# but we always want to use the same version for all libdrm modules. That means 1623*61046927SAndroid Build Coastguard Worker# even if driver foo requires 2.4.0 and driver bar requires 2.4.3, if foo and 1624*61046927SAndroid Build Coastguard Worker# bar are both on use 2.4.3 for both of them 1625*61046927SAndroid Build Coastguard Workerdep_libdrm_amdgpu = null_dep 1626*61046927SAndroid Build Coastguard Workerdep_libdrm_radeon = null_dep 1627*61046927SAndroid Build Coastguard Workerdep_libdrm_intel = null_dep 1628*61046927SAndroid Build Coastguard Worker 1629*61046927SAndroid Build Coastguard Worker_drm_amdgpu_ver = '2.4.121' 1630*61046927SAndroid Build Coastguard Worker_drm_radeon_ver = '2.4.71' 1631*61046927SAndroid Build Coastguard Worker_drm_intel_ver = '2.4.75' 1632*61046927SAndroid Build Coastguard Worker_drm_ver = '2.4.109' 1633*61046927SAndroid Build Coastguard Worker 1634*61046927SAndroid Build Coastguard Worker_libdrm_checks = [ 1635*61046927SAndroid Build Coastguard Worker ['intel', with_gallium_i915], 1636*61046927SAndroid Build Coastguard Worker ['amdgpu', (with_amd_vk and not with_platform_windows) or with_gallium_radeonsi], 1637*61046927SAndroid Build Coastguard Worker ['radeon', (with_gallium_radeonsi or with_gallium_r300 or with_gallium_r600)], 1638*61046927SAndroid Build Coastguard Worker] 1639*61046927SAndroid Build Coastguard Worker 1640*61046927SAndroid Build Coastguard Worker# Loop over the enables versions and get the highest libdrm requirement for all 1641*61046927SAndroid Build Coastguard Worker# active drivers. 1642*61046927SAndroid Build Coastguard Worker_drm_blame = '' 1643*61046927SAndroid Build Coastguard Workerforeach d : _libdrm_checks 1644*61046927SAndroid Build Coastguard Worker ver = get_variable('_drm_@0@_ver'.format(d[0])) 1645*61046927SAndroid Build Coastguard Worker if d[1] and ver.version_compare('>' + _drm_ver) 1646*61046927SAndroid Build Coastguard Worker _drm_ver = ver 1647*61046927SAndroid Build Coastguard Worker _drm_blame = d[0] 1648*61046927SAndroid Build Coastguard Worker endif 1649*61046927SAndroid Build Coastguard Workerendforeach 1650*61046927SAndroid Build Coastguard Workerif _drm_blame != '' 1651*61046927SAndroid Build Coastguard Worker message('libdrm @0@ needed because @1@ has the highest requirement'.format(_drm_ver, _drm_blame)) 1652*61046927SAndroid Build Coastguard Workerendif 1653*61046927SAndroid Build Coastguard Worker 1654*61046927SAndroid Build Coastguard Worker# Then get each libdrm module 1655*61046927SAndroid Build Coastguard Workerforeach d : _libdrm_checks 1656*61046927SAndroid Build Coastguard Worker if d[1] 1657*61046927SAndroid Build Coastguard Worker set_variable( 1658*61046927SAndroid Build Coastguard Worker 'dep_libdrm_' + d[0], 1659*61046927SAndroid Build Coastguard Worker dependency('libdrm_' + d[0], version : '>=' + _drm_ver) 1660*61046927SAndroid Build Coastguard Worker ) 1661*61046927SAndroid Build Coastguard Worker endif 1662*61046927SAndroid Build Coastguard Workerendforeach 1663*61046927SAndroid Build Coastguard Worker 1664*61046927SAndroid Build Coastguard Workerwith_gallium_drisw_kms = false 1665*61046927SAndroid Build Coastguard Workerif system_has_kms_drm 1666*61046927SAndroid Build Coastguard Worker dep_libdrm = dependency( 1667*61046927SAndroid Build Coastguard Worker 'libdrm', version : '>=' + _drm_ver, 1668*61046927SAndroid Build Coastguard Worker required : with_dri2 or with_dri or with_gbm 1669*61046927SAndroid Build Coastguard Worker ) 1670*61046927SAndroid Build Coastguard Workerelse 1671*61046927SAndroid Build Coastguard Worker # We should prevent libdrm from being available when the target doesn't have it to avoid transitive 1672*61046927SAndroid Build Coastguard Worker # dependencies (such as vk-runtime) linking to it 1673*61046927SAndroid Build Coastguard Worker dep_libdrm = null_dep 1674*61046927SAndroid Build Coastguard Workerendif 1675*61046927SAndroid Build Coastguard Workerif dep_libdrm.found() 1676*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_LIBDRM' 1677*61046927SAndroid Build Coastguard Worker if with_dri_platform == 'drm' and with_dri 1678*61046927SAndroid Build Coastguard Worker with_gallium_drisw_kms = true 1679*61046927SAndroid Build Coastguard Worker endif 1680*61046927SAndroid Build Coastguard Workerendif 1681*61046927SAndroid Build Coastguard Worker 1682*61046927SAndroid Build Coastguard Workerdep_libudev = dependency('libudev', required : false) 1683*61046927SAndroid Build Coastguard Workerif dep_libudev.found() 1684*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_LIBUDEV' 1685*61046927SAndroid Build Coastguard Workerendif 1686*61046927SAndroid Build Coastguard Worker 1687*61046927SAndroid Build Coastguard Workerllvm_modules = ['bitwriter', 'engine', 'mcdisassembler', 'mcjit', 'core', 'executionengine', 'scalaropts', 'transformutils', 'instcombine'] 1688*61046927SAndroid Build Coastguard Workerllvm_optional_modules = ['coroutines'] 1689*61046927SAndroid Build Coastguard Workerif with_amd_vk or with_gallium_radeonsi or with_gallium_r600 1690*61046927SAndroid Build Coastguard Worker llvm_modules += ['amdgpu', 'bitreader', 'ipo'] 1691*61046927SAndroid Build Coastguard Worker if with_gallium_r600 1692*61046927SAndroid Build Coastguard Worker llvm_modules += 'asmparser' 1693*61046927SAndroid Build Coastguard Worker endif 1694*61046927SAndroid Build Coastguard Workerendif 1695*61046927SAndroid Build Coastguard Workerif with_gallium_clover 1696*61046927SAndroid Build Coastguard Worker llvm_modules += [ 1697*61046927SAndroid Build Coastguard Worker 'linker', 'coverage', 'instrumentation', 'ipo', 'irreader', 1698*61046927SAndroid Build Coastguard Worker 'lto', 'option', 'objcarcopts', 'profiledata' 1699*61046927SAndroid Build Coastguard Worker ] 1700*61046927SAndroid Build Coastguard Worker # all-targets is needed to support static linking LLVM build with multiple targets 1701*61046927SAndroid Build Coastguard Worker # windowsdriver is needded with LLVM>=15, but we don't know what LLVM verrsion we are using yet 1702*61046927SAndroid Build Coastguard Worker llvm_optional_modules += ['all-targets', 'frontendopenmp', 'windowsdriver'] 1703*61046927SAndroid Build Coastguard Workerendif 1704*61046927SAndroid Build Coastguard Workerif with_clc 1705*61046927SAndroid Build Coastguard Worker llvm_modules += ['coverage', 'target', 'linker', 'irreader', 'option', 'libdriver', 'lto'] 1706*61046927SAndroid Build Coastguard Worker # all-targets is needed to support static linking LLVM build with multiple targets. 1707*61046927SAndroid Build Coastguard Worker # windowsdriver is needded with LLVM>=15 and frontendhlsl is needed with LLVM>=16, 1708*61046927SAndroid Build Coastguard Worker # but we don't know what LLVM version we are using yet 1709*61046927SAndroid Build Coastguard Worker llvm_optional_modules += ['all-targets', 'windowsdriver', 'frontendhlsl', 'frontenddriver'] 1710*61046927SAndroid Build Coastguard Workerendif 1711*61046927SAndroid Build Coastguard Workerdraw_with_llvm = get_option('draw-use-llvm') 1712*61046927SAndroid Build Coastguard Workerif draw_with_llvm 1713*61046927SAndroid Build Coastguard Worker llvm_modules += 'native' 1714*61046927SAndroid Build Coastguard Worker # lto is needded with LLVM>=15, but we don't know what LLVM verrsion we are using yet 1715*61046927SAndroid Build Coastguard Worker llvm_optional_modules += ['lto'] 1716*61046927SAndroid Build Coastguard Workerendif 1717*61046927SAndroid Build Coastguard Workeramd_with_llvm = get_option('amd-use-llvm') 1718*61046927SAndroid Build Coastguard Worker 1719*61046927SAndroid Build Coastguard Worker# MCJIT is deprecated in LLVM and will not accept new architecture ports, 1720*61046927SAndroid Build Coastguard Worker# so any architecture not in the exhaustive list will have to rely on LLVM 1721*61046927SAndroid Build Coastguard Worker# ORCJIT for llvmpipe functionality. 1722*61046927SAndroid Build Coastguard Workerllvm_has_mcjit = host_machine.cpu_family() in ['aarch64', 'arm', 'ppc', 'ppc64', 's390x', 'x86', 'x86_64'] 1723*61046927SAndroid Build Coastguard Workerllvm_with_orcjit = get_option('llvm-orcjit') or not llvm_has_mcjit 1724*61046927SAndroid Build Coastguard Worker 1725*61046927SAndroid Build Coastguard Workerif with_amd_vk or with_gallium_radeonsi or with_clc or llvm_with_orcjit 1726*61046927SAndroid Build Coastguard Worker _llvm_version = '>= 15.0.0' 1727*61046927SAndroid Build Coastguard Workerelif with_gallium_clover 1728*61046927SAndroid Build Coastguard Worker _llvm_version = '>= 11.0.0' 1729*61046927SAndroid Build Coastguard Workerelse 1730*61046927SAndroid Build Coastguard Worker _llvm_version = '>= 5.0.0' 1731*61046927SAndroid Build Coastguard Workerendif 1732*61046927SAndroid Build Coastguard Worker 1733*61046927SAndroid Build Coastguard Worker_shared_llvm = get_option('shared-llvm') \ 1734*61046927SAndroid Build Coastguard Worker .disable_auto_if(host_machine.system() == 'windows') \ 1735*61046927SAndroid Build Coastguard Worker .allowed() 1736*61046927SAndroid Build Coastguard Worker 1737*61046927SAndroid Build Coastguard Worker_llvm = get_option('llvm') 1738*61046927SAndroid Build Coastguard Workerdep_llvm = null_dep 1739*61046927SAndroid Build Coastguard Workerwith_llvm = false 1740*61046927SAndroid Build Coastguard Workerif _llvm.allowed() 1741*61046927SAndroid Build Coastguard Worker dep_llvm = dependency( 1742*61046927SAndroid Build Coastguard Worker 'llvm', 1743*61046927SAndroid Build Coastguard Worker method : host_machine.system() == 'windows' ? 'auto' : 'config-tool', 1744*61046927SAndroid Build Coastguard Worker version : _llvm_version, 1745*61046927SAndroid Build Coastguard Worker modules : llvm_modules, 1746*61046927SAndroid Build Coastguard Worker optional_modules : llvm_optional_modules, 1747*61046927SAndroid Build Coastguard Worker required : ( 1748*61046927SAndroid Build Coastguard Worker with_amd_vk or with_gallium_radeonsi or with_gallium_clover or with_clc 1749*61046927SAndroid Build Coastguard Worker or _llvm.enabled() 1750*61046927SAndroid Build Coastguard Worker ), 1751*61046927SAndroid Build Coastguard Worker static : not _shared_llvm, 1752*61046927SAndroid Build Coastguard Worker fallback : ['llvm', 'dep_llvm'], 1753*61046927SAndroid Build Coastguard Worker include_type : 'system', 1754*61046927SAndroid Build Coastguard Worker ) 1755*61046927SAndroid Build Coastguard Worker with_llvm = dep_llvm.found() 1756*61046927SAndroid Build Coastguard Workerendif 1757*61046927SAndroid Build Coastguard Workerif with_llvm 1758*61046927SAndroid Build Coastguard Worker pre_args += '-DMESA_LLVM_VERSION_STRING="@0@"'.format(dep_llvm.version()) 1759*61046927SAndroid Build Coastguard Worker pre_args += '-DLLVM_IS_SHARED=@0@'.format(_shared_llvm.to_int()) 1760*61046927SAndroid Build Coastguard Worker 1761*61046927SAndroid Build Coastguard Worker if (with_swrast_vk or with_gallium_llvmpipe) and not draw_with_llvm 1762*61046927SAndroid Build Coastguard Worker error('Lavapipe and llvmpipe require LLVM draw support.') 1763*61046927SAndroid Build Coastguard Worker endif 1764*61046927SAndroid Build Coastguard Worker 1765*61046927SAndroid Build Coastguard Worker if with_gallium_r600 and not amd_with_llvm 1766*61046927SAndroid Build Coastguard Worker error('R600 requires LLVM AMD support.') 1767*61046927SAndroid Build Coastguard Worker endif 1768*61046927SAndroid Build Coastguard Worker 1769*61046927SAndroid Build Coastguard Worker if host_machine.system() != 'windows' 1770*61046927SAndroid Build Coastguard Worker # LLVM can be built without rtti, turning off rtti changes the ABI of C++ 1771*61046927SAndroid Build Coastguard Worker # programs, so we need to build all C++ code in mesa without rtti as well to 1772*61046927SAndroid Build Coastguard Worker # ensure that linking works. Note that Win32 compilers does handle mismatching RTTI 1773*61046927SAndroid Build Coastguard Worker # without issues, so only apply this for other compilers. 1774*61046927SAndroid Build Coastguard Worker if dep_llvm.type_name() == 'internal' 1775*61046927SAndroid Build Coastguard Worker _llvm_rtti = subproject('llvm').get_variable('has_rtti', true) 1776*61046927SAndroid Build Coastguard Worker else 1777*61046927SAndroid Build Coastguard Worker # The CMake finder will return 'ON', the llvm-config will return 'YES' 1778*61046927SAndroid Build Coastguard Worker _llvm_rtti = ['ON', 'YES'].contains(dep_llvm.get_variable(cmake : 'LLVM_ENABLE_RTTI', configtool: 'has-rtti')) 1779*61046927SAndroid Build Coastguard Worker endif 1780*61046927SAndroid Build Coastguard Worker if _rtti != _llvm_rtti 1781*61046927SAndroid Build Coastguard Worker if _llvm_rtti 1782*61046927SAndroid Build Coastguard Worker error('LLVM was built with RTTI, cannot build Mesa with RTTI disabled. Remove cpp_rtti disable switch or use LLVM built without LLVM_ENABLE_RTTI.') 1783*61046927SAndroid Build Coastguard Worker else 1784*61046927SAndroid Build Coastguard Worker error('LLVM was built without RTTI, so Mesa must also disable RTTI. Use an LLVM built with LLVM_ENABLE_RTTI or add cpp_rtti=false.') 1785*61046927SAndroid Build Coastguard Worker endif 1786*61046927SAndroid Build Coastguard Worker endif 1787*61046927SAndroid Build Coastguard Worker endif 1788*61046927SAndroid Build Coastguard Worker 1789*61046927SAndroid Build Coastguard Worker if cc.get_argument_syntax() == 'msvc' 1790*61046927SAndroid Build Coastguard Worker # Suppress "/DELAYLOAD:ole32.dll/shell32.dll ignored" warnings that LLVM adds 1791*61046927SAndroid Build Coastguard Worker add_project_link_arguments( 1792*61046927SAndroid Build Coastguard Worker '/ignore:4199', 1793*61046927SAndroid Build Coastguard Worker language : ['c', 'cpp'], 1794*61046927SAndroid Build Coastguard Worker ) 1795*61046927SAndroid Build Coastguard Worker endif 1796*61046927SAndroid Build Coastguard Workerelif with_amd_vk and with_aco_tests 1797*61046927SAndroid Build Coastguard Worker error('ACO tests require LLVM, but LLVM is disabled.') 1798*61046927SAndroid Build Coastguard Workerelif with_swrast_vk 1799*61046927SAndroid Build Coastguard Worker error('lavapipe requires LLVM and is enabled, but LLVM is disabled.') 1800*61046927SAndroid Build Coastguard Workerelif with_any_llvmpipe 1801*61046927SAndroid Build Coastguard Worker error('llvmpipe requires LLVM and is enabled, but LLVM is disabled.') 1802*61046927SAndroid Build Coastguard Workerelif with_gallium_clover 1803*61046927SAndroid Build Coastguard Worker error('The OpenCL "Clover" state tracker requires LLVM, but LLVM is disabled.') 1804*61046927SAndroid Build Coastguard Workerelif with_clc 1805*61046927SAndroid Build Coastguard Worker error('The CLC compiler requires LLVM, but LLVM is disabled.') 1806*61046927SAndroid Build Coastguard Workerelse 1807*61046927SAndroid Build Coastguard Worker draw_with_llvm = false 1808*61046927SAndroid Build Coastguard Workerendif 1809*61046927SAndroid Build Coastguard Workeramd_with_llvm = amd_with_llvm and with_llvm 1810*61046927SAndroid Build Coastguard Workerpre_args += '-DLLVM_AVAILABLE=@0@'.format(with_llvm.to_int()) 1811*61046927SAndroid Build Coastguard Workerpre_args += '-DDRAW_LLVM_AVAILABLE=@0@'.format((with_llvm and draw_with_llvm).to_int()) 1812*61046927SAndroid Build Coastguard Workerpre_args += '-DAMD_LLVM_AVAILABLE=@0@'.format(amd_with_llvm.to_int()) 1813*61046927SAndroid Build Coastguard Workerpre_args += '-DGALLIVM_USE_ORCJIT=@0@'.format((with_llvm and llvm_with_orcjit).to_int()) 1814*61046927SAndroid Build Coastguard Worker 1815*61046927SAndroid Build Coastguard Workerif with_clover_spirv or with_clc 1816*61046927SAndroid Build Coastguard Worker chosen_llvm_version_array = dep_llvm.version().split('.') 1817*61046927SAndroid Build Coastguard Worker chosen_llvm_version_major = chosen_llvm_version_array[0].to_int() 1818*61046927SAndroid Build Coastguard Worker chosen_llvm_version_minor = chosen_llvm_version_array[1].to_int() 1819*61046927SAndroid Build Coastguard Worker 1820*61046927SAndroid Build Coastguard Worker # Require an SPIRV-LLVM-Translator version compatible with the chosen LLVM 1821*61046927SAndroid Build Coastguard Worker # one. 1822*61046927SAndroid Build Coastguard Worker 1823*61046927SAndroid Build Coastguard Worker # This first version check is still needed as maybe LLVM 8.0 was picked but 1824*61046927SAndroid Build Coastguard Worker # we do not want to accept SPIRV-LLVM-Translator 8.0.0.1 as that version 1825*61046927SAndroid Build Coastguard Worker # does not have the required API and those are only available starting from 1826*61046927SAndroid Build Coastguard Worker # 8.0.1.3. 1827*61046927SAndroid Build Coastguard Worker _llvmspirvlib_min_version = '>= 8.0.1.3' 1828*61046927SAndroid Build Coastguard Worker if with_clc 1829*61046927SAndroid Build Coastguard Worker _llvmspirvlib_min_version = '>= 15.0.0.0' 1830*61046927SAndroid Build Coastguard Worker endif 1831*61046927SAndroid Build Coastguard Worker 1832*61046927SAndroid Build Coastguard Worker _llvmspirvlib_version = [ 1833*61046927SAndroid Build Coastguard Worker _llvmspirvlib_min_version, 1834*61046927SAndroid Build Coastguard Worker '>= @0@.@1@'.format(chosen_llvm_version_major, chosen_llvm_version_minor), 1835*61046927SAndroid Build Coastguard Worker '< @0@.@1@'.format(chosen_llvm_version_major, chosen_llvm_version_minor + 1) ] 1836*61046927SAndroid Build Coastguard Worker 1837*61046927SAndroid Build Coastguard Worker # LLVMSPIRVLib is available at https://github.com/KhronosGroup/SPIRV-LLVM-Translator 1838*61046927SAndroid Build Coastguard Worker dep_llvmspirvlib = dependency('LLVMSPIRVLib', required : true, version : _llvmspirvlib_version) 1839*61046927SAndroid Build Coastguard Workerelse 1840*61046927SAndroid Build Coastguard Worker dep_llvmspirvlib = null_dep 1841*61046927SAndroid Build Coastguard Workerendif 1842*61046927SAndroid Build Coastguard Worker 1843*61046927SAndroid Build Coastguard Workerdep_spirv_tools = dependency( 1844*61046927SAndroid Build Coastguard Worker 'SPIRV-Tools', 1845*61046927SAndroid Build Coastguard Worker required : with_clover_spirv or with_clc, 1846*61046927SAndroid Build Coastguard Worker version : '>= 2018.0' 1847*61046927SAndroid Build Coastguard Worker) 1848*61046927SAndroid Build Coastguard Workerif dep_spirv_tools.found() 1849*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_SPIRV_TOOLS' 1850*61046927SAndroid Build Coastguard Workerendif 1851*61046927SAndroid Build Coastguard Worker 1852*61046927SAndroid Build Coastguard Workerdep_clang = null_dep 1853*61046927SAndroid Build Coastguard Workerif with_clc 1854*61046927SAndroid Build Coastguard Worker llvm_libdir = dep_llvm.get_variable(cmake : 'LLVM_LIBRARY_DIR', configtool: 'libdir') 1855*61046927SAndroid Build Coastguard Worker 1856*61046927SAndroid Build Coastguard Worker dep_clang = cpp.find_library('clang-cpp', dirs : llvm_libdir, required : false) 1857*61046927SAndroid Build Coastguard Worker 1858*61046927SAndroid Build Coastguard Worker if not dep_clang.found() or not _shared_llvm 1859*61046927SAndroid Build Coastguard Worker clang_modules = [ 1860*61046927SAndroid Build Coastguard Worker 'clangBasic', 'clangAST', 'clangCodeGen', 'clangLex', 1861*61046927SAndroid Build Coastguard Worker 'clangDriver', 'clangFrontend', 'clangFrontendTool', 1862*61046927SAndroid Build Coastguard Worker 'clangHandleCXX', 'clangHandleLLVM', 'clangSerialization', 1863*61046927SAndroid Build Coastguard Worker 'clangSema', 'clangParse', 'clangEdit', 'clangAnalysis' 1864*61046927SAndroid Build Coastguard Worker ] 1865*61046927SAndroid Build Coastguard Worker if dep_llvm.version().version_compare('>= 15.0') 1866*61046927SAndroid Build Coastguard Worker clang_modules += 'clangSupport' 1867*61046927SAndroid Build Coastguard Worker endif 1868*61046927SAndroid Build Coastguard Worker if dep_llvm.version().version_compare('>= 16.0') 1869*61046927SAndroid Build Coastguard Worker clang_modules += 'clangASTMatchers' 1870*61046927SAndroid Build Coastguard Worker endif 1871*61046927SAndroid Build Coastguard Worker if dep_llvm.version().version_compare('>= 18.0') 1872*61046927SAndroid Build Coastguard Worker clang_modules += 'clangAPINotes' 1873*61046927SAndroid Build Coastguard Worker endif 1874*61046927SAndroid Build Coastguard Worker 1875*61046927SAndroid Build Coastguard Worker dep_clang = [] 1876*61046927SAndroid Build Coastguard Worker foreach m : clang_modules 1877*61046927SAndroid Build Coastguard Worker dep_clang += cpp.find_library(m, dirs : llvm_libdir, required : true) 1878*61046927SAndroid Build Coastguard Worker endforeach 1879*61046927SAndroid Build Coastguard Worker endif 1880*61046927SAndroid Build Coastguard Workerendif 1881*61046927SAndroid Build Coastguard Worker 1882*61046927SAndroid Build Coastguard Workerdep_lua = dependency('lua54', 'lua5.4', 'lua-5.4', 1883*61046927SAndroid Build Coastguard Worker 'lua53', 'lua5.3', 'lua-5.3', 1884*61046927SAndroid Build Coastguard Worker 'lua', required: false, 1885*61046927SAndroid Build Coastguard Worker allow_fallback: with_tools.contains('freedreno'), 1886*61046927SAndroid Build Coastguard Worker version: '>=5.3') 1887*61046927SAndroid Build Coastguard Worker 1888*61046927SAndroid Build Coastguard Worker# Be explicit about only using this lib on Windows, to avoid picking 1889*61046927SAndroid Build Coastguard Worker# up random libs with the generic name 'libversion' 1890*61046927SAndroid Build Coastguard Workerdep_version = null_dep 1891*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 1892*61046927SAndroid Build Coastguard Worker dep_version = cpp.find_library('version') 1893*61046927SAndroid Build Coastguard Workerendif 1894*61046927SAndroid Build Coastguard Worker 1895*61046927SAndroid Build Coastguard Workerdep_elf = dependency('libelf', required : false) 1896*61046927SAndroid Build Coastguard Workerif not with_platform_windows and not dep_elf.found() 1897*61046927SAndroid Build Coastguard Worker dep_elf = cc.find_library('elf', required : false) 1898*61046927SAndroid Build Coastguard Workerendif 1899*61046927SAndroid Build Coastguard Workerif dep_elf.found() 1900*61046927SAndroid Build Coastguard Worker pre_args += '-DUSE_LIBELF' 1901*61046927SAndroid Build Coastguard Workerelif with_gallium_radeonsi 1902*61046927SAndroid Build Coastguard Worker error('Gallium driver radeonsi requires libelf') 1903*61046927SAndroid Build Coastguard Workerendif 1904*61046927SAndroid Build Coastguard Worker 1905*61046927SAndroid Build Coastguard Workerdep_valgrind = dependency('valgrind', required : get_option('valgrind')) 1906*61046927SAndroid Build Coastguard Workerif dep_valgrind.found() 1907*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_VALGRIND' 1908*61046927SAndroid Build Coastguard Workerendif 1909*61046927SAndroid Build Coastguard Worker 1910*61046927SAndroid Build Coastguard Worker# AddressSanitizer's leak reports need all the symbols to be present at exit to 1911*61046927SAndroid Build Coastguard Worker# decode well, which runs afoul of our dlopen()/dlclose()ing of the DRI drivers. 1912*61046927SAndroid Build Coastguard Worker# Set a flag so we can skip the dlclose for asan builds. 1913*61046927SAndroid Build Coastguard Workerif ['address', 'address,undefined'].contains(get_option('b_sanitize')) 1914*61046927SAndroid Build Coastguard Worker asan_c_args = ['-DBUILT_WITH_ASAN=1'] 1915*61046927SAndroid Build Coastguard Workerelse 1916*61046927SAndroid Build Coastguard Worker asan_c_args = ['-DBUILT_WITH_ASAN=0'] 1917*61046927SAndroid Build Coastguard Workerendif 1918*61046927SAndroid Build Coastguard Worker 1919*61046927SAndroid Build Coastguard Worker# ThreadSanitizer can't deal with futexes, and reports races for cases we don't care about 1920*61046927SAndroid Build Coastguard Worker# so add a define to work silence these issues. 1921*61046927SAndroid Build Coastguard Workerif get_option('b_sanitize') == 'thread' 1922*61046927SAndroid Build Coastguard Worker pre_args += '-DTHREAD_SANITIZER=1' 1923*61046927SAndroid Build Coastguard Worker # meson versions prior to 1.4 will warn "Consider using the built-in option for sanitizers ..." 1924*61046927SAndroid Build Coastguard Worker # later on because it only checks whether the option starts with "-fsanitize", 1925*61046927SAndroid Build Coastguard Worker # but there is no built-in option for adding a blacklist 1926*61046927SAndroid Build Coastguard Worker tsan_blacklist = '-fsanitize-blacklist=@0@'.format(join_paths(meson.project_source_root(), 'build-support', 'tsan-blacklist.txt')) 1927*61046927SAndroid Build Coastguard Worker if cc.has_argument(tsan_blacklist) 1928*61046927SAndroid Build Coastguard Worker pre_args += tsan_blacklist 1929*61046927SAndroid Build Coastguard Worker else 1930*61046927SAndroid Build Coastguard Worker warning('Compiler does not support "-fsanitize-blacklist", expected race conditions will not be surpressed') 1931*61046927SAndroid Build Coastguard Worker endif 1932*61046927SAndroid Build Coastguard Workerelse 1933*61046927SAndroid Build Coastguard Worker pre_args += '-DTHREAD_SANITIZER=0' 1934*61046927SAndroid Build Coastguard Workerendif 1935*61046927SAndroid Build Coastguard Worker 1936*61046927SAndroid Build Coastguard Workeryacc_is_bison = true 1937*61046927SAndroid Build Coastguard Workerneeds_flex_bison = with_any_opengl or with_freedreno_vk or with_intel_tools or with_gallium 1938*61046927SAndroid Build Coastguard Worker 1939*61046927SAndroid Build Coastguard Workerif build_machine.system() == 'windows' 1940*61046927SAndroid Build Coastguard Worker # Prefer the winflexbison versions, they're much easier to install and have 1941*61046927SAndroid Build Coastguard Worker # better windows support. 1942*61046927SAndroid Build Coastguard Worker 1943*61046927SAndroid Build Coastguard Worker prog_flex = find_program('win_flex', required : false) 1944*61046927SAndroid Build Coastguard Worker if prog_flex.found() 1945*61046927SAndroid Build Coastguard Worker # windows compatibility (uses <io.h> instead of <unistd.h> and _isatty, 1946*61046927SAndroid Build Coastguard Worker # _fileno functions) 1947*61046927SAndroid Build Coastguard Worker prog_flex = [prog_flex, '--wincompat'] 1948*61046927SAndroid Build Coastguard Worker else 1949*61046927SAndroid Build Coastguard Worker prog_flex = [find_program('flex', 'lex', required : needs_flex_bison, disabler : true)] 1950*61046927SAndroid Build Coastguard Worker endif 1951*61046927SAndroid Build Coastguard Worker # Force flex to use const keyword in prototypes, as relies on __cplusplus or 1952*61046927SAndroid Build Coastguard Worker # __STDC__ macro to determine whether it's safe to use const keyword 1953*61046927SAndroid Build Coastguard Worker prog_flex += '-DYY_USE_CONST=' 1954*61046927SAndroid Build Coastguard Worker 1955*61046927SAndroid Build Coastguard Worker prog_flex_cpp = prog_flex 1956*61046927SAndroid Build Coastguard Worker # Convince win_flex to use <inttypes.h> for C++ files 1957*61046927SAndroid Build Coastguard Worker # Note that we are using a C99 version here rather than C11, 1958*61046927SAndroid Build Coastguard Worker # because using a C11 version can cause the MSVC CRT headers to define 1959*61046927SAndroid Build Coastguard Worker # static_assert to _Static_assert, which breaks other parts of the CRT 1960*61046927SAndroid Build Coastguard Worker prog_flex_cpp += '-D__STDC_VERSION__=199901' 1961*61046927SAndroid Build Coastguard Worker 1962*61046927SAndroid Build Coastguard Worker prog_bison = find_program('win_bison', required : false) 1963*61046927SAndroid Build Coastguard Worker if not prog_bison.found() 1964*61046927SAndroid Build Coastguard Worker prog_bison = find_program('bison', 'yacc', required : needs_flex_bison, disabler : true) 1965*61046927SAndroid Build Coastguard Worker endif 1966*61046927SAndroid Build Coastguard Workerelse 1967*61046927SAndroid Build Coastguard Worker prog_bison = find_program('bison', required : false) 1968*61046927SAndroid Build Coastguard Worker 1969*61046927SAndroid Build Coastguard Worker if not prog_bison.found() 1970*61046927SAndroid Build Coastguard Worker prog_bison = find_program('byacc', required : needs_flex_bison, disabler : true) 1971*61046927SAndroid Build Coastguard Worker yacc_is_bison = false 1972*61046927SAndroid Build Coastguard Worker endif 1973*61046927SAndroid Build Coastguard Worker 1974*61046927SAndroid Build Coastguard Worker # Disable deprecated keyword warnings, since we have to use them for 1975*61046927SAndroid Build Coastguard Worker # old-bison compat. See discussion in 1976*61046927SAndroid Build Coastguard Worker # https://gitlab.freedesktop.org/mesa/mesa/merge_requests/2161 1977*61046927SAndroid Build Coastguard Worker if find_program('bison', required : false, version : '> 2.3').found() 1978*61046927SAndroid Build Coastguard Worker prog_bison = [prog_bison, '-Wno-deprecated'] 1979*61046927SAndroid Build Coastguard Worker endif 1980*61046927SAndroid Build Coastguard Worker 1981*61046927SAndroid Build Coastguard Worker prog_flex = find_program('flex', required : needs_flex_bison, disabler : true) 1982*61046927SAndroid Build Coastguard Worker prog_flex_cpp = prog_flex 1983*61046927SAndroid Build Coastguard Workerendif 1984*61046927SAndroid Build Coastguard Worker 1985*61046927SAndroid Build Coastguard Workerdep_selinux = null_dep 1986*61046927SAndroid Build Coastguard Workerif get_option('selinux') 1987*61046927SAndroid Build Coastguard Worker dep_selinux = dependency('libselinux') 1988*61046927SAndroid Build Coastguard Worker pre_args += '-DMESA_SELINUX' 1989*61046927SAndroid Build Coastguard Workerendif 1990*61046927SAndroid Build Coastguard Worker 1991*61046927SAndroid Build Coastguard Worker_libunwind = get_option('libunwind') \ 1992*61046927SAndroid Build Coastguard Worker .require(not with_platform_android, error_message : 'Android requires the use of the backtrace library, not libunwind') 1993*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'darwin' 1994*61046927SAndroid Build Coastguard Worker dep_unwind = meson.get_compiler('c').find_library('System', required : _libunwind) 1995*61046927SAndroid Build Coastguard Workerelse 1996*61046927SAndroid Build Coastguard Worker dep_unwind = dependency('libunwind', required : _libunwind) 1997*61046927SAndroid Build Coastguard Workerendif 1998*61046927SAndroid Build Coastguard Workerif dep_unwind.found() 1999*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_LIBUNWIND' 2000*61046927SAndroid Build Coastguard Workerendif 2001*61046927SAndroid Build Coastguard Worker 2002*61046927SAndroid Build Coastguard Workerif with_osmesa 2003*61046927SAndroid Build Coastguard Worker if not with_gallium_swrast 2004*61046927SAndroid Build Coastguard Worker error('OSMesa gallium requires gallium softpipe or llvmpipe.') 2005*61046927SAndroid Build Coastguard Worker endif 2006*61046927SAndroid Build Coastguard Worker if host_machine.system() == 'windows' 2007*61046927SAndroid Build Coastguard Worker osmesa_lib_name = 'osmesa' 2008*61046927SAndroid Build Coastguard Worker else 2009*61046927SAndroid Build Coastguard Worker osmesa_lib_name = 'OSMesa' 2010*61046927SAndroid Build Coastguard Worker endif 2011*61046927SAndroid Build Coastguard Workerendif 2012*61046927SAndroid Build Coastguard Worker 2013*61046927SAndroid Build Coastguard Worker# TODO: symbol mangling 2014*61046927SAndroid Build Coastguard Worker 2015*61046927SAndroid Build Coastguard Workerif with_platform_wayland 2016*61046927SAndroid Build Coastguard Worker dep_wl_scanner = dependency('wayland-scanner', native: true) 2017*61046927SAndroid Build Coastguard Worker prog_wl_scanner = find_program(dep_wl_scanner.get_variable(pkgconfig : 'wayland_scanner')) 2018*61046927SAndroid Build Coastguard Worker if dep_wl_scanner.version().version_compare('>= 1.15') 2019*61046927SAndroid Build Coastguard Worker wl_scanner_arg = 'private-code' 2020*61046927SAndroid Build Coastguard Worker else 2021*61046927SAndroid Build Coastguard Worker wl_scanner_arg = 'code' 2022*61046927SAndroid Build Coastguard Worker endif 2023*61046927SAndroid Build Coastguard Worker dep_wl_protocols = dependency('wayland-protocols', version : '>= 1.34') 2024*61046927SAndroid Build Coastguard Worker dep_wayland_client = dependency('wayland-client', version : '>=1.18') 2025*61046927SAndroid Build Coastguard Worker dep_wayland_server = dependency('wayland-server', version : '>=1.18') 2026*61046927SAndroid Build Coastguard Worker if with_egl 2027*61046927SAndroid Build Coastguard Worker dep_wayland_egl = dependency('wayland-egl-backend', version : '>= 3') 2028*61046927SAndroid Build Coastguard Worker dep_wayland_egl_headers = dep_wayland_egl.partial_dependency(compile_args : true) 2029*61046927SAndroid Build Coastguard Worker endif 2030*61046927SAndroid Build Coastguard Worker pre_args += '-DWL_HIDE_DEPRECATED' 2031*61046927SAndroid Build Coastguard Worker if cc.has_function( 2032*61046927SAndroid Build Coastguard Worker 'wl_display_dispatch_queue_timeout', 2033*61046927SAndroid Build Coastguard Worker prefix : '#include <wayland-client.h>', 2034*61046927SAndroid Build Coastguard Worker dependencies: dep_wayland_client) 2035*61046927SAndroid Build Coastguard Worker pre_args += ['-DHAVE_WL_DISPATCH_QUEUE_TIMEOUT'] 2036*61046927SAndroid Build Coastguard Worker endif 2037*61046927SAndroid Build Coastguard Worker if cc.has_function( 2038*61046927SAndroid Build Coastguard Worker 'wl_display_create_queue_with_name', 2039*61046927SAndroid Build Coastguard Worker prefix : '#include <wayland-client.h>', 2040*61046927SAndroid Build Coastguard Worker dependencies: dep_wayland_client) 2041*61046927SAndroid Build Coastguard Worker pre_args += ['-DHAVE_WL_CREATE_QUEUE_WITH_NAME'] 2042*61046927SAndroid Build Coastguard Worker endif 2043*61046927SAndroid Build Coastguard Workerendif 2044*61046927SAndroid Build Coastguard Worker 2045*61046927SAndroid Build Coastguard Workerdep_x11 = null_dep 2046*61046927SAndroid Build Coastguard Workerdep_xext = null_dep 2047*61046927SAndroid Build Coastguard Workerdep_xfixes = null_dep 2048*61046927SAndroid Build Coastguard Workerdep_x11_xcb = null_dep 2049*61046927SAndroid Build Coastguard Workerdep_xcb = null_dep 2050*61046927SAndroid Build Coastguard Workerdep_xcb_keysyms = null_dep 2051*61046927SAndroid Build Coastguard Workerdep_xcb_glx = null_dep 2052*61046927SAndroid Build Coastguard Workerdep_xcb_dri2 = null_dep 2053*61046927SAndroid Build Coastguard Workerdep_xcb_dri3 = null_dep 2054*61046927SAndroid Build Coastguard Workerdep_dri2proto = null_dep 2055*61046927SAndroid Build Coastguard Workerdep_glproto = null_dep 2056*61046927SAndroid Build Coastguard Workerdep_xxf86vm = null_dep 2057*61046927SAndroid Build Coastguard Workerdep_xcb_dri3 = null_dep 2058*61046927SAndroid Build Coastguard Workerdep_xcb_present = null_dep 2059*61046927SAndroid Build Coastguard Workerdep_xcb_sync = null_dep 2060*61046927SAndroid Build Coastguard Workerdep_xcb_xfixes = null_dep 2061*61046927SAndroid Build Coastguard Workerdep_xshmfence = null_dep 2062*61046927SAndroid Build Coastguard Workerdep_xcb_xrandr = null_dep 2063*61046927SAndroid Build Coastguard Workerdep_xcb_shm = null_dep 2064*61046927SAndroid Build Coastguard Workerdep_xlib_xrandr = null_dep 2065*61046927SAndroid Build Coastguard Workerdep_openmp = null_dep 2066*61046927SAndroid Build Coastguard Worker 2067*61046927SAndroid Build Coastguard Worker# Even if we find OpenMP, Gitlab CI fails to link with gcc/i386 and clang/anyarch. 2068*61046927SAndroid Build Coastguard Workerif host_machine.cpu_family() == 'x86_64' and cc.get_id() == 'gcc' 2069*61046927SAndroid Build Coastguard Worker dep_openmp = dependency('openmp', required : false) 2070*61046927SAndroid Build Coastguard Worker if dep_openmp.found() 2071*61046927SAndroid Build Coastguard Worker pre_args += ['-DHAVE_OPENMP'] 2072*61046927SAndroid Build Coastguard Worker endif 2073*61046927SAndroid Build Coastguard Workerendif 2074*61046927SAndroid Build Coastguard Worker 2075*61046927SAndroid Build Coastguard Workerwith_dri3_explicit_sync = false 2076*61046927SAndroid Build Coastguard Workerwith_xcb_keysyms = false 2077*61046927SAndroid Build Coastguard Workerif with_platform_x11 2078*61046927SAndroid Build Coastguard Worker dep_xcb = dependency('xcb') 2079*61046927SAndroid Build Coastguard Worker dep_xcb_xrandr = dependency('xcb-randr') 2080*61046927SAndroid Build Coastguard Worker if with_glx == 'xlib' 2081*61046927SAndroid Build Coastguard Worker dep_x11 = dependency('x11') 2082*61046927SAndroid Build Coastguard Worker dep_xext = dependency('xext') 2083*61046927SAndroid Build Coastguard Worker elif with_glx == 'dri' 2084*61046927SAndroid Build Coastguard Worker dep_x11 = dependency('x11') 2085*61046927SAndroid Build Coastguard Worker dep_xext = dependency('xext') 2086*61046927SAndroid Build Coastguard Worker dep_xfixes = dependency('xfixes', version : '>= 2.0') 2087*61046927SAndroid Build Coastguard Worker dep_xcb_glx = dependency('xcb-glx', version : '>= 1.8.1') 2088*61046927SAndroid Build Coastguard Worker dep_xcb_shm = dependency('xcb-shm') 2089*61046927SAndroid Build Coastguard Worker elif with_gallium_rusticl 2090*61046927SAndroid Build Coastguard Worker # needed for GL sharing extension 2091*61046927SAndroid Build Coastguard Worker dep_x11 = dependency('x11') 2092*61046927SAndroid Build Coastguard Worker endif 2093*61046927SAndroid Build Coastguard Worker if (with_any_vk or with_glx == 'dri' or with_egl or 2094*61046927SAndroid Build Coastguard Worker (with_gallium_vdpau or with_gallium_va)) 2095*61046927SAndroid Build Coastguard Worker dep_xcb = dependency('xcb') 2096*61046927SAndroid Build Coastguard Worker dep_xcb_keysyms = dependency('xcb-keysyms', required : false) 2097*61046927SAndroid Build Coastguard Worker with_xcb_keysyms = dep_xcb_keysyms.found() 2098*61046927SAndroid Build Coastguard Worker if with_xcb_keysyms 2099*61046927SAndroid Build Coastguard Worker pre_args += '-DXCB_KEYSYMS_AVAILABLE' 2100*61046927SAndroid Build Coastguard Worker endif 2101*61046927SAndroid Build Coastguard Worker dep_x11_xcb = dependency('x11-xcb') 2102*61046927SAndroid Build Coastguard Worker dep_xcb_dri2 = dependency('xcb-dri2', version : '>= 1.8', required : with_x11_dri2) 2103*61046927SAndroid Build Coastguard Worker if with_dri_platform == 'drm' and not dep_libdrm.found() 2104*61046927SAndroid Build Coastguard Worker error('libdrm required for gallium video statetrackers when using x11') 2105*61046927SAndroid Build Coastguard Worker endif 2106*61046927SAndroid Build Coastguard Worker endif 2107*61046927SAndroid Build Coastguard Worker if with_dri_platform == 'drm' 2108*61046927SAndroid Build Coastguard Worker dep_xcb_dri2 = dependency('xcb-dri2', version : '>= 1.8', required : with_x11_dri2) 2109*61046927SAndroid Build Coastguard Worker 2110*61046927SAndroid Build Coastguard Worker dep_xcb_dri3 = dependency('xcb-dri3', version : '>= 1.13') 2111*61046927SAndroid Build Coastguard Worker dep_xcb_present = dependency('xcb-present', version : '>= 1.13') 2112*61046927SAndroid Build Coastguard Worker if (dep_xcb_dri3.version().version_compare('>= 1.17') and 2113*61046927SAndroid Build Coastguard Worker dep_xcb_present.version().version_compare('>= 1.17')) 2114*61046927SAndroid Build Coastguard Worker with_dri3_explicit_sync = true 2115*61046927SAndroid Build Coastguard Worker endif 2116*61046927SAndroid Build Coastguard Worker dep_xcb_shm = dependency('xcb-shm') 2117*61046927SAndroid Build Coastguard Worker dep_xcb_sync = dependency('xcb-sync') 2118*61046927SAndroid Build Coastguard Worker dep_xshmfence = dependency('xshmfence', version : '>= 1.1') 2119*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_X11_DRM' 2120*61046927SAndroid Build Coastguard Worker endif 2121*61046927SAndroid Build Coastguard Worker if with_glx == 'dri' or with_glx == 'xlib' 2122*61046927SAndroid Build Coastguard Worker dep_glproto = dependency('glproto', version : '>= 1.4.14') 2123*61046927SAndroid Build Coastguard Worker endif 2124*61046927SAndroid Build Coastguard Worker if with_glx == 'dri' 2125*61046927SAndroid Build Coastguard Worker if with_dri_platform == 'drm' 2126*61046927SAndroid Build Coastguard Worker dep_dri2proto = dependency('dri2proto', version : '>= 2.8') 2127*61046927SAndroid Build Coastguard Worker if with_glx_direct 2128*61046927SAndroid Build Coastguard Worker dep_xxf86vm = dependency('xxf86vm') 2129*61046927SAndroid Build Coastguard Worker endif 2130*61046927SAndroid Build Coastguard Worker endif 2131*61046927SAndroid Build Coastguard Worker endif 2132*61046927SAndroid Build Coastguard Worker if (with_egl or 2133*61046927SAndroid Build Coastguard Worker with_dri or 2134*61046927SAndroid Build Coastguard Worker with_any_vk or 2135*61046927SAndroid Build Coastguard Worker with_gallium_vdpau or with_gallium_xa) 2136*61046927SAndroid Build Coastguard Worker dep_xcb_xfixes = dependency('xcb-xfixes') 2137*61046927SAndroid Build Coastguard Worker endif 2138*61046927SAndroid Build Coastguard Worker if with_xlib_lease or with_any_vk 2139*61046927SAndroid Build Coastguard Worker dep_xcb_xrandr = dependency('xcb-randr') 2140*61046927SAndroid Build Coastguard Worker endif 2141*61046927SAndroid Build Coastguard Worker if with_xlib_lease 2142*61046927SAndroid Build Coastguard Worker dep_xlib_xrandr = dependency('xrandr', version : '>= 1.3') 2143*61046927SAndroid Build Coastguard Worker endif 2144*61046927SAndroid Build Coastguard Workerendif 2145*61046927SAndroid Build Coastguard Worker 2146*61046927SAndroid Build Coastguard Workerif with_dri 2147*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_DRI' 2148*61046927SAndroid Build Coastguard Workerendif 2149*61046927SAndroid Build Coastguard Workerif with_dri2 2150*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_DRI2' 2151*61046927SAndroid Build Coastguard Workerendif 2152*61046927SAndroid Build Coastguard Workerif with_x11_dri2 2153*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_X11_DRI2' 2154*61046927SAndroid Build Coastguard Workerendif 2155*61046927SAndroid Build Coastguard Workerif with_dri3_explicit_sync 2156*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_DRI3_EXPLICIT_SYNC' 2157*61046927SAndroid Build Coastguard Workerendif 2158*61046927SAndroid Build Coastguard Workerif with_gallium_drisw_kms 2159*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_DRISW_KMS' 2160*61046927SAndroid Build Coastguard Workerendif 2161*61046927SAndroid Build Coastguard Worker 2162*61046927SAndroid Build Coastguard Workerif get_option('gallium-extra-hud') 2163*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_GALLIUM_EXTRA_HUD=1' 2164*61046927SAndroid Build Coastguard Workerendif 2165*61046927SAndroid Build Coastguard Worker 2166*61046927SAndroid Build Coastguard Workerdep_lmsensors = cc.find_library('sensors', required : get_option('lmsensors')) 2167*61046927SAndroid Build Coastguard Workerif dep_lmsensors.found() 2168*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_LIBSENSORS=1' 2169*61046927SAndroid Build Coastguard Workerendif 2170*61046927SAndroid Build Coastguard Worker 2171*61046927SAndroid Build Coastguard Worker_shader_replacement = get_option('custom-shader-replacement') 2172*61046927SAndroid Build Coastguard Workerif _shader_replacement == '' 2173*61046927SAndroid Build Coastguard Workerelse 2174*61046927SAndroid Build Coastguard Worker pre_args += '-DCUSTOM_SHADER_REPLACEMENT' 2175*61046927SAndroid Build Coastguard Workerendif 2176*61046927SAndroid Build Coastguard Worker 2177*61046927SAndroid Build Coastguard Workerwith_perfetto = get_option('perfetto') 2178*61046927SAndroid Build Coastguard Workerwith_datasources = get_option('datasources') 2179*61046927SAndroid Build Coastguard Workerwith_any_datasource = with_datasources.length() != 0 2180*61046927SAndroid Build Coastguard Workerif with_perfetto 2181*61046927SAndroid Build Coastguard Worker dep_perfetto = dependency('perfetto', fallback: ['perfetto', 'dep_perfetto']) 2182*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_PERFETTO' 2183*61046927SAndroid Build Coastguard Workerendif 2184*61046927SAndroid Build Coastguard Worker 2185*61046927SAndroid Build Coastguard Workerwith_teflon = get_option('teflon') 2186*61046927SAndroid Build Coastguard Workerif with_teflon and with_tests 2187*61046927SAndroid Build Coastguard Worker dep_xtensor = dependency('xtensor') 2188*61046927SAndroid Build Coastguard Worker dep_flatbuffers = dependency('flatbuffers') 2189*61046927SAndroid Build Coastguard Worker prog_flatc = find_program('flatc') 2190*61046927SAndroid Build Coastguard Workerendif 2191*61046927SAndroid Build Coastguard Worker 2192*61046927SAndroid Build Coastguard Workerwith_gpuvis = get_option('gpuvis') 2193*61046927SAndroid Build Coastguard Workerif with_gpuvis 2194*61046927SAndroid Build Coastguard Worker pre_args += '-DHAVE_GPUVIS' 2195*61046927SAndroid Build Coastguard Workerendif 2196*61046927SAndroid Build Coastguard Worker 2197*61046927SAndroid Build Coastguard Workeradd_project_arguments(pre_args, language : ['c', 'cpp']) 2198*61046927SAndroid Build Coastguard Workeradd_project_arguments(c_cpp_args, language : ['c', 'cpp']) 2199*61046927SAndroid Build Coastguard Worker 2200*61046927SAndroid Build Coastguard Workeradd_project_arguments(c_args, language : ['c']) 2201*61046927SAndroid Build Coastguard Workeradd_project_arguments(cpp_args, language : ['cpp']) 2202*61046927SAndroid Build Coastguard Worker 2203*61046927SAndroid Build Coastguard Workergl_priv_reqs = [] 2204*61046927SAndroid Build Coastguard Worker 2205*61046927SAndroid Build Coastguard Workerif with_glx == 'xlib' 2206*61046927SAndroid Build Coastguard Worker gl_priv_reqs += ['x11', 'xext', 'xcb'] 2207*61046927SAndroid Build Coastguard Workerelif with_glx == 'dri' 2208*61046927SAndroid Build Coastguard Worker gl_priv_reqs += [ 2209*61046927SAndroid Build Coastguard Worker 'x11', 'xext', 'xfixes', 'x11-xcb', 'xcb', 2210*61046927SAndroid Build Coastguard Worker 'xcb-glx >= 1.8.1'] 2211*61046927SAndroid Build Coastguard Worker if with_dri_platform == 'drm' 2212*61046927SAndroid Build Coastguard Worker gl_priv_reqs += 'xcb-dri2 >= 1.8' 2213*61046927SAndroid Build Coastguard Worker if with_glx_direct 2214*61046927SAndroid Build Coastguard Worker gl_priv_reqs += 'xxf86vm' 2215*61046927SAndroid Build Coastguard Worker endif 2216*61046927SAndroid Build Coastguard Worker endif 2217*61046927SAndroid Build Coastguard Workerendif 2218*61046927SAndroid Build Coastguard Workerif dep_libdrm.found() 2219*61046927SAndroid Build Coastguard Worker gl_priv_reqs += 'libdrm >= 2.4.75' 2220*61046927SAndroid Build Coastguard Workerendif 2221*61046927SAndroid Build Coastguard Worker 2222*61046927SAndroid Build Coastguard Workergl_priv_libs = [] 2223*61046927SAndroid Build Coastguard Workerif dep_thread.found() 2224*61046927SAndroid Build Coastguard Worker gl_priv_libs += ['-lpthread', '-pthread'] 2225*61046927SAndroid Build Coastguard Workerendif 2226*61046927SAndroid Build Coastguard Workerif dep_m.found() 2227*61046927SAndroid Build Coastguard Worker gl_priv_libs += '-lm' 2228*61046927SAndroid Build Coastguard Workerendif 2229*61046927SAndroid Build Coastguard Workerif dep_dl.found() 2230*61046927SAndroid Build Coastguard Worker gl_priv_libs += '-ldl' 2231*61046927SAndroid Build Coastguard Workerendif 2232*61046927SAndroid Build Coastguard Worker 2233*61046927SAndroid Build Coastguard Worker# FIXME: autotools lists this as incomplete 2234*61046927SAndroid Build Coastguard Workergbm_priv_libs = [] 2235*61046927SAndroid Build Coastguard Workerif dep_dl.found() 2236*61046927SAndroid Build Coastguard Worker gbm_priv_libs += '-ldl' 2237*61046927SAndroid Build Coastguard Workerendif 2238*61046927SAndroid Build Coastguard Worker 2239*61046927SAndroid Build Coastguard Workerpkg = import('pkgconfig') 2240*61046927SAndroid Build Coastguard Worker 2241*61046927SAndroid Build Coastguard Workerif host_machine.system() == 'windows' 2242*61046927SAndroid Build Coastguard Worker prog_dumpbin = find_program('dumpbin', required : false) 2243*61046927SAndroid Build Coastguard Worker with_symbols_check = prog_dumpbin.found() and with_tests 2244*61046927SAndroid Build Coastguard Worker if with_symbols_check 2245*61046927SAndroid Build Coastguard Worker symbols_check_args = ['--dumpbin', prog_dumpbin.full_path()] 2246*61046927SAndroid Build Coastguard Worker endif 2247*61046927SAndroid Build Coastguard Workerelse 2248*61046927SAndroid Build Coastguard Worker prog_nm = find_program('nm') 2249*61046927SAndroid Build Coastguard Worker with_symbols_check = with_tests 2250*61046927SAndroid Build Coastguard Worker symbols_check_args = ['--nm', prog_nm.full_path()] 2251*61046927SAndroid Build Coastguard Workerendif 2252*61046927SAndroid Build Coastguard Worker 2253*61046927SAndroid Build Coastguard Worker# This quirk needs to be applied to sources with functions defined in assembly 2254*61046927SAndroid Build Coastguard Worker# as GCC LTO drops them. See: https://bugs.freedesktop.org/show_bug.cgi?id=109391 2255*61046927SAndroid Build Coastguard Workergcc_lto_quirk = (cc.get_id() == 'gcc') ? ['-fno-lto'] : [] 2256*61046927SAndroid Build Coastguard Worker 2257*61046927SAndroid Build Coastguard Workerdevenv = environment() 2258*61046927SAndroid Build Coastguard Worker 2259*61046927SAndroid Build Coastguard Workerdir_compiler_nir = join_paths(meson.current_source_dir(), 'src/compiler/nir/') 2260*61046927SAndroid Build Coastguard Workerdir_source_root = meson.project_source_root() 2261*61046927SAndroid Build Coastguard Worker 2262*61046927SAndroid Build Coastguard Worker 2263*61046927SAndroid Build Coastguard Workersubdir('include') 2264*61046927SAndroid Build Coastguard Workersubdir('bin') 2265*61046927SAndroid Build Coastguard Workersubdir('src') 2266*61046927SAndroid Build Coastguard Worker 2267*61046927SAndroid Build Coastguard Workermeson.add_devenv(devenv) 2268*61046927SAndroid Build Coastguard Worker 2269*61046927SAndroid Build Coastguard Workersphinx = find_program('sphinx-build', version : '>= 4.3', 2270*61046927SAndroid Build Coastguard Worker required: get_option('html-docs')) 2271*61046927SAndroid Build Coastguard Workerif sphinx.found() 2272*61046927SAndroid Build Coastguard Worker subdir('docs') 2273*61046927SAndroid Build Coastguard Workerendif 2274*61046927SAndroid Build Coastguard Worker 2275*61046927SAndroid Build Coastguard Workersummary( 2276*61046927SAndroid Build Coastguard Worker { 2277*61046927SAndroid Build Coastguard Worker 'prefix': get_option('prefix'), 2278*61046927SAndroid Build Coastguard Worker 'libdir': get_option('libdir'), 2279*61046927SAndroid Build Coastguard Worker 'includedir': get_option('includedir'), 2280*61046927SAndroid Build Coastguard Worker }, 2281*61046927SAndroid Build Coastguard Worker section: 'Directories' 2282*61046927SAndroid Build Coastguard Worker) 2283*61046927SAndroid Build Coastguard Worker 2284*61046927SAndroid Build Coastguard Workersummary( 2285*61046927SAndroid Build Coastguard Worker { 2286*61046927SAndroid Build Coastguard Worker 'c_cpp_args': c_cpp_args, 2287*61046927SAndroid Build Coastguard Worker }, 2288*61046927SAndroid Build Coastguard Worker section: 'Common C and C++ arguments' 2289*61046927SAndroid Build Coastguard Worker) 2290*61046927SAndroid Build Coastguard Worker 2291*61046927SAndroid Build Coastguard Workersummary( 2292*61046927SAndroid Build Coastguard Worker { 2293*61046927SAndroid Build Coastguard Worker 'OpenGL': with_opengl, 2294*61046927SAndroid Build Coastguard Worker 'ES1': with_gles1, 2295*61046927SAndroid Build Coastguard Worker 'ES2': with_gles2, 2296*61046927SAndroid Build Coastguard Worker 'Shared glapi': with_shared_glapi, 2297*61046927SAndroid Build Coastguard Worker 'GLVND': with_glvnd, 2298*61046927SAndroid Build Coastguard Worker }, 2299*61046927SAndroid Build Coastguard Worker section: 'OpenGL', bool_yn: true 2300*61046927SAndroid Build Coastguard Worker) 2301*61046927SAndroid Build Coastguard Worker 2302*61046927SAndroid Build Coastguard Workersummary( 2303*61046927SAndroid Build Coastguard Worker { 2304*61046927SAndroid Build Coastguard Worker 'Platform': with_dri_platform, 2305*61046927SAndroid Build Coastguard Worker 'Driver dir': dri_drivers_path, 2306*61046927SAndroid Build Coastguard Worker }, 2307*61046927SAndroid Build Coastguard Worker section: 'DRI', bool_yn: true, list_sep: ' ' 2308*61046927SAndroid Build Coastguard Worker) 2309*61046927SAndroid Build Coastguard Worker 2310*61046927SAndroid Build Coastguard Workersummary( 2311*61046927SAndroid Build Coastguard Worker { 2312*61046927SAndroid Build Coastguard Worker 'Enabled': with_glx != 'disabled', 2313*61046927SAndroid Build Coastguard Worker 'Provider': with_glx == 'disabled' ? 'None' : with_glx 2314*61046927SAndroid Build Coastguard Worker }, 2315*61046927SAndroid Build Coastguard Worker section: 'GLX', bool_yn: true, list_sep: ' ' 2316*61046927SAndroid Build Coastguard Worker) 2317*61046927SAndroid Build Coastguard Worker 2318*61046927SAndroid Build Coastguard Workeregl_summary = {'Enabled': with_egl} 2319*61046927SAndroid Build Coastguard Workerif with_egl 2320*61046927SAndroid Build Coastguard Worker egl_drivers = [] 2321*61046927SAndroid Build Coastguard Worker if with_dri 2322*61046927SAndroid Build Coastguard Worker egl_drivers += 'builtin:egl_dri2' 2323*61046927SAndroid Build Coastguard Worker endif 2324*61046927SAndroid Build Coastguard Worker if with_dri_platform == 'drm' 2325*61046927SAndroid Build Coastguard Worker egl_drivers += 'builtin:egl_dri3' 2326*61046927SAndroid Build Coastguard Worker endif 2327*61046927SAndroid Build Coastguard Worker if with_platform_windows 2328*61046927SAndroid Build Coastguard Worker egl_drivers += 'builtin:wgl' 2329*61046927SAndroid Build Coastguard Worker endif 2330*61046927SAndroid Build Coastguard Worker egl_summary += {'Drivers': egl_drivers} 2331*61046927SAndroid Build Coastguard Worker egl_summary += {'Platforms': _platforms} 2332*61046927SAndroid Build Coastguard Workerendif 2333*61046927SAndroid Build Coastguard Workersummary(egl_summary, section: 'EGL', bool_yn: true, list_sep: ' ') 2334*61046927SAndroid Build Coastguard Worker 2335*61046927SAndroid Build Coastguard Workergbm_summary = {'Enabled': with_gbm} 2336*61046927SAndroid Build Coastguard Workerif with_gbm 2337*61046927SAndroid Build Coastguard Worker gbm_summary += {'Backends path': gbm_backends_path} 2338*61046927SAndroid Build Coastguard Workerendif 2339*61046927SAndroid Build Coastguard Workersummary(gbm_summary, section: 'GBM', bool_yn: true, list_sep: ' ') 2340*61046927SAndroid Build Coastguard Worker 2341*61046927SAndroid Build Coastguard Workervulkan_summary = {'Drivers': _vulkan_drivers.length() != 0 ? _vulkan_drivers : false } 2342*61046927SAndroid Build Coastguard Workerif with_any_vk 2343*61046927SAndroid Build Coastguard Worker vulkan_summary += {'Platforms': _platforms} 2344*61046927SAndroid Build Coastguard Worker vulkan_summary += {'ICD dir': with_vulkan_icd_dir} 2345*61046927SAndroid Build Coastguard Worker if with_any_vulkan_layers 2346*61046927SAndroid Build Coastguard Worker vulkan_summary += {'Layers': get_option('vulkan-layers')} 2347*61046927SAndroid Build Coastguard Worker endif 2348*61046927SAndroid Build Coastguard Worker vulkan_summary += {'Intel Ray tracing': with_intel_vk_rt} 2349*61046927SAndroid Build Coastguard Workerendif 2350*61046927SAndroid Build Coastguard Workersummary(vulkan_summary, section: 'Vulkan', bool_yn: true, list_sep: ' ') 2351*61046927SAndroid Build Coastguard Worker 2352*61046927SAndroid Build Coastguard Workervideo_summary = {'Codecs': _codecs.length() != 0 ? _codecs : false} 2353*61046927SAndroid Build Coastguard Workervideo_apis = [] 2354*61046927SAndroid Build Coastguard Workerif with_gallium_vdpau 2355*61046927SAndroid Build Coastguard Worker video_apis += 'vdpau' 2356*61046927SAndroid Build Coastguard Workerendif 2357*61046927SAndroid Build Coastguard Workerif with_gallium_va 2358*61046927SAndroid Build Coastguard Worker video_apis += 'va' 2359*61046927SAndroid Build Coastguard Workerendif 2360*61046927SAndroid Build Coastguard Workerif with_any_vk 2361*61046927SAndroid Build Coastguard Worker video_apis += 'vulkan' 2362*61046927SAndroid Build Coastguard Workerendif 2363*61046927SAndroid Build Coastguard Workerif with_gallium_xa 2364*61046927SAndroid Build Coastguard Worker video_apis += 'xa' 2365*61046927SAndroid Build Coastguard Workerendif 2366*61046927SAndroid Build Coastguard Workervideo_summary += {'APIs': video_apis.length() != 0 ? video_apis : false} 2367*61046927SAndroid Build Coastguard Workersummary(video_summary, section: 'Video', bool_yn: true, list_sep: ' ') 2368*61046927SAndroid Build Coastguard Worker 2369*61046927SAndroid Build Coastguard Workerllvm_summary = {'Enabled': with_llvm} 2370*61046927SAndroid Build Coastguard Workerif with_llvm 2371*61046927SAndroid Build Coastguard Worker llvm_summary += {'Version': dep_llvm.version()} 2372*61046927SAndroid Build Coastguard Workerendif 2373*61046927SAndroid Build Coastguard Workersummary(llvm_summary, section: 'LLVM', bool_yn: true, list_sep: ' ') 2374*61046927SAndroid Build Coastguard Worker 2375*61046927SAndroid Build Coastguard Workergallium_summary = {'Enabled': with_gallium} 2376*61046927SAndroid Build Coastguard Workerif with_gallium 2377*61046927SAndroid Build Coastguard Worker gallium_summary += {'Drivers': gallium_drivers} 2378*61046927SAndroid Build Coastguard Worker gallium_summary += {'Platforms': _platforms} 2379*61046927SAndroid Build Coastguard Worker 2380*61046927SAndroid Build Coastguard Worker gallium_frontends = ['mesa'] 2381*61046927SAndroid Build Coastguard Worker if with_gallium_xa 2382*61046927SAndroid Build Coastguard Worker gallium_frontends += 'xa' 2383*61046927SAndroid Build Coastguard Worker endif 2384*61046927SAndroid Build Coastguard Worker if with_gallium_vdpau 2385*61046927SAndroid Build Coastguard Worker gallium_frontends += 'vdpau' 2386*61046927SAndroid Build Coastguard Worker endif 2387*61046927SAndroid Build Coastguard Worker if with_gallium_va 2388*61046927SAndroid Build Coastguard Worker gallium_frontends += 'va' 2389*61046927SAndroid Build Coastguard Worker endif 2390*61046927SAndroid Build Coastguard Worker if with_gallium_st_nine 2391*61046927SAndroid Build Coastguard Worker gallium_frontends += 'nine' 2392*61046927SAndroid Build Coastguard Worker endif 2393*61046927SAndroid Build Coastguard Worker if with_gallium_clover 2394*61046927SAndroid Build Coastguard Worker gallium_frontends += 'clover' 2395*61046927SAndroid Build Coastguard Worker endif 2396*61046927SAndroid Build Coastguard Worker if with_gallium_rusticl 2397*61046927SAndroid Build Coastguard Worker gallium_frontends += 'rusticl' 2398*61046927SAndroid Build Coastguard Worker endif 2399*61046927SAndroid Build Coastguard Worker gallium_summary += {'Frontends': gallium_frontends} 2400*61046927SAndroid Build Coastguard Worker gallium_summary += {'Off-screen rendering (OSMesa)': with_osmesa ? 'lib' + osmesa_lib_name : false} 2401*61046927SAndroid Build Coastguard Worker gallium_summary += {'HUD lm-sensors': dep_lmsensors.found()} 2402*61046927SAndroid Build Coastguard Workerendif 2403*61046927SAndroid Build Coastguard Workersummary(gallium_summary, section: 'Gallium', bool_yn: true, list_sep: ' ') 2404*61046927SAndroid Build Coastguard Worker 2405*61046927SAndroid Build Coastguard Workerperfetto_summary = {'Enabled': with_perfetto} 2406*61046927SAndroid Build Coastguard Workerif with_perfetto and with_any_datasource 2407*61046927SAndroid Build Coastguard Worker perfetto_summary += {'Data source': with_datasources} 2408*61046927SAndroid Build Coastguard Workerendif 2409*61046927SAndroid Build Coastguard Workersummary(perfetto_summary, section: 'Perfetto', bool_yn: true, list_sep: ' ') 2410*61046927SAndroid Build Coastguard Worker 2411*61046927SAndroid Build Coastguard Workerteflon_summary = {'Enabled': with_teflon} 2412*61046927SAndroid Build Coastguard Workersummary(teflon_summary, section: 'Teflon (TensorFlow Lite delegate)', bool_yn: true, list_sep: ' ') 2413