1*61046927SAndroid Build Coastguard Worker# Copyright © 2022 Collabora, Ltd. 2*61046927SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 3*61046927SAndroid Build Coastguard Workernak_rust_args = [ 4*61046927SAndroid Build Coastguard Worker '-Aclippy::identity_op', 5*61046927SAndroid Build Coastguard Worker '-Aclippy::len_zero', 6*61046927SAndroid Build Coastguard Worker '-Aclippy::manual_range_contains', 7*61046927SAndroid Build Coastguard Worker # normally this is a good one, but we use it where the "better" code is worse 8*61046927SAndroid Build Coastguard Worker '-Aclippy::needless_range_loop', 9*61046927SAndroid Build Coastguard Worker '-Aclippy::redundant_field_names', 10*61046927SAndroid Build Coastguard Worker '-Aclippy::upper_case_acronyms', 11*61046927SAndroid Build Coastguard Worker '-Aclippy::vec_box', 12*61046927SAndroid Build Coastguard Worker '-Aclippy::write_with_newline', 13*61046927SAndroid Build Coastguard Worker # warns about public function might dereference a raw pointer, but nothing is 14*61046927SAndroid Build Coastguard Worker # actually public here 15*61046927SAndroid Build Coastguard Worker '-Aclippy::not_unsafe_ptr_arg_deref', 16*61046927SAndroid Build Coastguard Worker '-Anon_snake_case', 17*61046927SAndroid Build Coastguard Worker] 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Workerdep_paste = dependency('paste', 20*61046927SAndroid Build Coastguard Worker version : '>= 1.0.14', 21*61046927SAndroid Build Coastguard Worker fallback : ['paste', 'dep_paste'], 22*61046927SAndroid Build Coastguard Worker required : true, 23*61046927SAndroid Build Coastguard Worker) 24*61046927SAndroid Build Coastguard Worker 25*61046927SAndroid Build Coastguard Workerlibnak_c_files = files( 26*61046927SAndroid Build Coastguard Worker 'nak.h', 27*61046927SAndroid Build Coastguard Worker 'nak_nir.c', 28*61046927SAndroid Build Coastguard Worker 'nak_nir_lower_cf.c', 29*61046927SAndroid Build Coastguard Worker 'nak_nir_lower_fs_inputs.c', 30*61046927SAndroid Build Coastguard Worker 'nak_nir_lower_gs_intrinsics.c', 31*61046927SAndroid Build Coastguard Worker 'nak_nir_lower_non_uniform_ldcx.c', 32*61046927SAndroid Build Coastguard Worker 'nak_nir_lower_scan_reduce.c', 33*61046927SAndroid Build Coastguard Worker 'nak_nir_lower_tex.c', 34*61046927SAndroid Build Coastguard Worker 'nak_nir_lower_vtg_io.c', 35*61046927SAndroid Build Coastguard Worker 'nak_nir_split_64bit_conversions.c', 36*61046927SAndroid Build Coastguard Worker 'nak_memstream.c', 37*61046927SAndroid Build Coastguard Worker) 38*61046927SAndroid Build Coastguard Worker 39*61046927SAndroid Build Coastguard Worker_libacorn_rs = static_library( 40*61046927SAndroid Build Coastguard Worker 'acorn', 41*61046927SAndroid Build Coastguard Worker files('acorn/lib.rs'), 42*61046927SAndroid Build Coastguard Worker gnu_symbol_visibility : 'hidden', 43*61046927SAndroid Build Coastguard Worker rust_abi : 'rust', 44*61046927SAndroid Build Coastguard Worker rust_args : nak_rust_args, 45*61046927SAndroid Build Coastguard Worker) 46*61046927SAndroid Build Coastguard Worker 47*61046927SAndroid Build Coastguard Workeridep_acorn_rs = declare_dependency( 48*61046927SAndroid Build Coastguard Worker link_with : _libacorn_rs, 49*61046927SAndroid Build Coastguard Worker) 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard Worker_libbitview_rs = static_library( 52*61046927SAndroid Build Coastguard Worker 'bitview', 53*61046927SAndroid Build Coastguard Worker files('bitview/lib.rs'), 54*61046927SAndroid Build Coastguard Worker gnu_symbol_visibility : 'hidden', 55*61046927SAndroid Build Coastguard Worker rust_abi : 'rust', 56*61046927SAndroid Build Coastguard Worker rust_args : nak_rust_args, 57*61046927SAndroid Build Coastguard Worker) 58*61046927SAndroid Build Coastguard Worker 59*61046927SAndroid Build Coastguard Workeridep_bitview_rs = declare_dependency( 60*61046927SAndroid Build Coastguard Worker link_with : _libbitview_rs, 61*61046927SAndroid Build Coastguard Worker) 62*61046927SAndroid Build Coastguard Worker 63*61046927SAndroid Build Coastguard Workerlibnak_deps = [ 64*61046927SAndroid Build Coastguard Worker idep_mesautil, 65*61046927SAndroid Build Coastguard Worker idep_nir_headers, 66*61046927SAndroid Build Coastguard Worker idep_nvidia_headers, 67*61046927SAndroid Build Coastguard Worker] 68*61046927SAndroid Build Coastguard Worker 69*61046927SAndroid Build Coastguard Worker_nak_bindings_rs = rust.bindgen( 70*61046927SAndroid Build Coastguard Worker input : ['nak_bindings.h'], 71*61046927SAndroid Build Coastguard Worker output : 'nak_bindings.rs', 72*61046927SAndroid Build Coastguard Worker c_args : [ 73*61046927SAndroid Build Coastguard Worker pre_args, 74*61046927SAndroid Build Coastguard Worker ], 75*61046927SAndroid Build Coastguard Worker args : [ 76*61046927SAndroid Build Coastguard Worker compiler_rs_bindgen_blocklist, 77*61046927SAndroid Build Coastguard Worker '--raw-line', '#![allow(non_camel_case_types)]', 78*61046927SAndroid Build Coastguard Worker '--raw-line', '#![allow(non_snake_case)]', 79*61046927SAndroid Build Coastguard Worker '--raw-line', '#![allow(non_upper_case_globals)]', 80*61046927SAndroid Build Coastguard Worker '--raw-line', 'use compiler::bindings::*;', 81*61046927SAndroid Build Coastguard Worker '--allowlist-type', 'drm.*', 82*61046927SAndroid Build Coastguard Worker '--allowlist-type', 'nak_.*', 83*61046927SAndroid Build Coastguard Worker '--allowlist-type', 'nouveau_ws_.*', 84*61046927SAndroid Build Coastguard Worker '--allowlist-var', 'DRM_.*', 85*61046927SAndroid Build Coastguard Worker '--allowlist-var', 'NVIDIA_VENDOR_ID', 86*61046927SAndroid Build Coastguard Worker '--allowlist-function', 'drm.*', 87*61046927SAndroid Build Coastguard Worker '--allowlist-function', 'nak_.*', 88*61046927SAndroid Build Coastguard Worker '--allowlist-function', 'nouveau_ws_.*', 89*61046927SAndroid Build Coastguard Worker '--no-prepend-enum-name', 90*61046927SAndroid Build Coastguard Worker ], 91*61046927SAndroid Build Coastguard Worker dependencies : [ 92*61046927SAndroid Build Coastguard Worker dep_libdrm, 93*61046927SAndroid Build Coastguard Worker idep_nouveau_ws, 94*61046927SAndroid Build Coastguard Worker libnak_deps, 95*61046927SAndroid Build Coastguard Worker ], 96*61046927SAndroid Build Coastguard Worker) 97*61046927SAndroid Build Coastguard Worker 98*61046927SAndroid Build Coastguard Worker_libnak_bindings_rs = static_library( 99*61046927SAndroid Build Coastguard Worker 'nak_bindings', 100*61046927SAndroid Build Coastguard Worker _nak_bindings_rs, 101*61046927SAndroid Build Coastguard Worker gnu_symbol_visibility : 'hidden', 102*61046927SAndroid Build Coastguard Worker dependencies : [ 103*61046927SAndroid Build Coastguard Worker idep_compiler_rs, 104*61046927SAndroid Build Coastguard Worker ], 105*61046927SAndroid Build Coastguard Worker rust_abi : 'rust', 106*61046927SAndroid Build Coastguard Worker) 107*61046927SAndroid Build Coastguard Worker 108*61046927SAndroid Build Coastguard Worker_libnak_ir_proc_rs = rust.proc_macro( 109*61046927SAndroid Build Coastguard Worker 'nak_ir_proc', 110*61046927SAndroid Build Coastguard Worker files('nak/ir_proc.rs'), 111*61046927SAndroid Build Coastguard Worker dependencies : [idep_compiler_proc_rs], 112*61046927SAndroid Build Coastguard Worker) 113*61046927SAndroid Build Coastguard Worker 114*61046927SAndroid Build Coastguard Worker_libnak_rs = static_library( 115*61046927SAndroid Build Coastguard Worker 'nak_rs', 116*61046927SAndroid Build Coastguard Worker files('nak/lib.rs'), 117*61046927SAndroid Build Coastguard Worker gnu_symbol_visibility : 'hidden', 118*61046927SAndroid Build Coastguard Worker rust_abi : 'c', 119*61046927SAndroid Build Coastguard Worker rust_args : [ 120*61046927SAndroid Build Coastguard Worker nak_rust_args, 121*61046927SAndroid Build Coastguard Worker # Otherwise, rustc trips up on -pthread 122*61046927SAndroid Build Coastguard Worker '-Clink-arg=-Wno-unused-command-line-argument', 123*61046927SAndroid Build Coastguard Worker ], 124*61046927SAndroid Build Coastguard Worker dependencies : [ 125*61046927SAndroid Build Coastguard Worker dep_paste, 126*61046927SAndroid Build Coastguard Worker idep_compiler_rs, 127*61046927SAndroid Build Coastguard Worker idep_nvidia_headers_rs, 128*61046927SAndroid Build Coastguard Worker ], 129*61046927SAndroid Build Coastguard Worker link_with : [ 130*61046927SAndroid Build Coastguard Worker _libbitview_rs, 131*61046927SAndroid Build Coastguard Worker _libnak_bindings_rs, 132*61046927SAndroid Build Coastguard Worker _libnak_ir_proc_rs, 133*61046927SAndroid Build Coastguard Worker ], 134*61046927SAndroid Build Coastguard Worker) 135*61046927SAndroid Build Coastguard Worker 136*61046927SAndroid Build Coastguard Worker# TODO: Linking Rust executables (such as unit tests) doesn't play nicely 137*61046927SAndroid Build Coastguard Worker# with the sanitizers because meson doesn't know to pass -fsanitize to the 138*61046927SAndroid Build Coastguard Worker# Rust linker. See also https://github.com/mesonbuild/meson/issues/11741 139*61046927SAndroid Build Coastguard Workerif with_tests and get_option('b_sanitize') == 'none' 140*61046927SAndroid Build Coastguard Worker rust.test( 141*61046927SAndroid Build Coastguard Worker 'nak', 142*61046927SAndroid Build Coastguard Worker _libnak_rs, 143*61046927SAndroid Build Coastguard Worker args : [ 144*61046927SAndroid Build Coastguard Worker # Don't run HW tests by default 145*61046927SAndroid Build Coastguard Worker '--skip', 'hw_tests::', 146*61046927SAndroid Build Coastguard Worker ], 147*61046927SAndroid Build Coastguard Worker suite : ['nouveau'], 148*61046927SAndroid Build Coastguard Worker dependencies : [ 149*61046927SAndroid Build Coastguard Worker dep_libdrm, 150*61046927SAndroid Build Coastguard Worker idep_nouveau_ws, 151*61046927SAndroid Build Coastguard Worker idep_compiler.partial_dependency(link_args : true, links : true), 152*61046927SAndroid Build Coastguard Worker idep_mesautil.partial_dependency(link_args : true, links : true), 153*61046927SAndroid Build Coastguard Worker idep_nv_push_rs, 154*61046927SAndroid Build Coastguard Worker ], 155*61046927SAndroid Build Coastguard Worker # This is needed to ensure we link against glibc 156*61046927SAndroid Build Coastguard Worker # See also https://gitlab.freedesktop.org/mesa/mesa/-/issues/11632 157*61046927SAndroid Build Coastguard Worker rust_args: ['-C', 'default-linker-libraries'], 158*61046927SAndroid Build Coastguard Worker link_with: [ 159*61046927SAndroid Build Coastguard Worker _libacorn_rs, 160*61046927SAndroid Build Coastguard Worker ], 161*61046927SAndroid Build Coastguard Worker ) 162*61046927SAndroid Build Coastguard Workerendif 163*61046927SAndroid Build Coastguard Worker 164*61046927SAndroid Build Coastguard Workernak_nir_algebraic_c = custom_target( 165*61046927SAndroid Build Coastguard Worker 'nak_nir_algebraic.c', 166*61046927SAndroid Build Coastguard Worker input : 'nak_nir_algebraic.py', 167*61046927SAndroid Build Coastguard Worker output : 'nak_nir_algebraic.c', 168*61046927SAndroid Build Coastguard Worker command : [ 169*61046927SAndroid Build Coastguard Worker prog_python, '@INPUT@', 170*61046927SAndroid Build Coastguard Worker '-p', dir_compiler_nir, 171*61046927SAndroid Build Coastguard Worker '--out', '@OUTPUT@', 172*61046927SAndroid Build Coastguard Worker ], 173*61046927SAndroid Build Coastguard Worker depend_files : nir_algebraic_depends, 174*61046927SAndroid Build Coastguard Worker) 175*61046927SAndroid Build Coastguard Worker 176*61046927SAndroid Build Coastguard Worker_libnak = static_library( 177*61046927SAndroid Build Coastguard Worker 'nak', 178*61046927SAndroid Build Coastguard Worker [libnak_c_files, nak_nir_algebraic_c], 179*61046927SAndroid Build Coastguard Worker include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium], 180*61046927SAndroid Build Coastguard Worker dependencies : libnak_deps, 181*61046927SAndroid Build Coastguard Worker link_with : [_libnak_rs], 182*61046927SAndroid Build Coastguard Worker c_args : [no_override_init_args], 183*61046927SAndroid Build Coastguard Worker gnu_symbol_visibility : 'hidden', 184*61046927SAndroid Build Coastguard Worker) 185*61046927SAndroid Build Coastguard Worker 186*61046927SAndroid Build Coastguard Workeridep_nak = declare_dependency( 187*61046927SAndroid Build Coastguard Worker include_directories : include_directories('.'), 188*61046927SAndroid Build Coastguard Worker link_with : _libnak, 189*61046927SAndroid Build Coastguard Worker) 190