| # Copyright © 2022 Collabora, Ltd. |
| # SPDX-License-Identifier: MIT |
| nak_rust_args = [ |
| '-Aclippy::identity_op', |
| '-Aclippy::len_zero', |
| '-Aclippy::manual_range_contains', |
| # normally this is a good one, but we use it where the "better" code is worse |
| '-Aclippy::needless_range_loop', |
| '-Aclippy::redundant_field_names', |
| '-Aclippy::upper_case_acronyms', |
| '-Aclippy::vec_box', |
| '-Aclippy::write_with_newline', |
| # warns about public function might dereference a raw pointer, but nothing is |
| # actually public here |
| '-Aclippy::not_unsafe_ptr_arg_deref', |
| '-Anon_snake_case', |
| ] |
| |
| dep_paste = dependency('paste', |
| version : '>= 1.0.14', |
| fallback : ['paste', 'dep_paste'], |
| required : true, |
| ) |
| |
| libnak_c_files = files( |
| 'nak.h', |
| 'nak_nir.c', |
| 'nak_nir_lower_cf.c', |
| 'nak_nir_lower_fs_inputs.c', |
| 'nak_nir_lower_gs_intrinsics.c', |
| 'nak_nir_lower_non_uniform_ldcx.c', |
| 'nak_nir_lower_scan_reduce.c', |
| 'nak_nir_lower_tex.c', |
| 'nak_nir_lower_vtg_io.c', |
| 'nak_nir_split_64bit_conversions.c', |
| 'nak_memstream.c', |
| ) |
| |
| _libacorn_rs = static_library( |
| 'acorn', |
| files('acorn/lib.rs'), |
| gnu_symbol_visibility : 'hidden', |
| rust_abi : 'rust', |
| rust_args : nak_rust_args, |
| ) |
| |
| idep_acorn_rs = declare_dependency( |
| link_with : _libacorn_rs, |
| ) |
| |
| _libbitview_rs = static_library( |
| 'bitview', |
| files('bitview/lib.rs'), |
| gnu_symbol_visibility : 'hidden', |
| rust_abi : 'rust', |
| rust_args : nak_rust_args, |
| ) |
| |
| idep_bitview_rs = declare_dependency( |
| link_with : _libbitview_rs, |
| ) |
| |
| libnak_deps = [ |
| idep_mesautil, |
| idep_nir_headers, |
| idep_nvidia_headers, |
| ] |
| |
| _nak_bindings_rs = rust.bindgen( |
| input : ['nak_bindings.h'], |
| output : 'nak_bindings.rs', |
| c_args : [ |
| pre_args, |
| ], |
| args : [ |
| compiler_rs_bindgen_blocklist, |
| '--raw-line', '#![allow(non_camel_case_types)]', |
| '--raw-line', '#![allow(non_snake_case)]', |
| '--raw-line', '#![allow(non_upper_case_globals)]', |
| '--raw-line', 'use compiler::bindings::*;', |
| '--allowlist-type', 'drm.*', |
| '--allowlist-type', 'nak_.*', |
| '--allowlist-type', 'nouveau_ws_.*', |
| '--allowlist-var', 'DRM_.*', |
| '--allowlist-var', 'NVIDIA_VENDOR_ID', |
| '--allowlist-function', 'drm.*', |
| '--allowlist-function', 'nak_.*', |
| '--allowlist-function', 'nouveau_ws_.*', |
| '--no-prepend-enum-name', |
| ], |
| dependencies : [ |
| dep_libdrm, |
| idep_nouveau_ws, |
| libnak_deps, |
| ], |
| ) |
| |
| _libnak_bindings_rs = static_library( |
| 'nak_bindings', |
| _nak_bindings_rs, |
| gnu_symbol_visibility : 'hidden', |
| dependencies : [ |
| idep_compiler_rs, |
| ], |
| rust_abi : 'rust', |
| ) |
| |
| _libnak_ir_proc_rs = rust.proc_macro( |
| 'nak_ir_proc', |
| files('nak/ir_proc.rs'), |
| dependencies : [idep_compiler_proc_rs], |
| ) |
| |
| _libnak_rs = static_library( |
| 'nak_rs', |
| files('nak/lib.rs'), |
| gnu_symbol_visibility : 'hidden', |
| rust_abi : 'c', |
| rust_args : [ |
| nak_rust_args, |
| # Otherwise, rustc trips up on -pthread |
| '-Clink-arg=-Wno-unused-command-line-argument', |
| ], |
| dependencies : [ |
| dep_paste, |
| idep_compiler_rs, |
| idep_nvidia_headers_rs, |
| ], |
| link_with : [ |
| _libbitview_rs, |
| _libnak_bindings_rs, |
| _libnak_ir_proc_rs, |
| ], |
| ) |
| |
| # TODO: Linking Rust executables (such as unit tests) doesn't play nicely |
| # with the sanitizers because meson doesn't know to pass -fsanitize to the |
| # Rust linker. See also https://github.com/mesonbuild/meson/issues/11741 |
| if with_tests and get_option('b_sanitize') == 'none' |
| rust.test( |
| 'nak', |
| _libnak_rs, |
| args : [ |
| # Don't run HW tests by default |
| '--skip', 'hw_tests::', |
| ], |
| suite : ['nouveau'], |
| dependencies : [ |
| dep_libdrm, |
| idep_nouveau_ws, |
| idep_compiler.partial_dependency(link_args : true, links : true), |
| idep_mesautil.partial_dependency(link_args : true, links : true), |
| idep_nv_push_rs, |
| ], |
| # This is needed to ensure we link against glibc |
| # See also https://gitlab.freedesktop.org/mesa/mesa/-/issues/11632 |
| rust_args: ['-C', 'default-linker-libraries'], |
| link_with: [ |
| _libacorn_rs, |
| ], |
| ) |
| endif |
| |
| nak_nir_algebraic_c = custom_target( |
| 'nak_nir_algebraic.c', |
| input : 'nak_nir_algebraic.py', |
| output : 'nak_nir_algebraic.c', |
| command : [ |
| prog_python, '@INPUT@', |
| '-p', dir_compiler_nir, |
| '--out', '@OUTPUT@', |
| ], |
| depend_files : nir_algebraic_depends, |
| ) |
| |
| _libnak = static_library( |
| 'nak', |
| [libnak_c_files, nak_nir_algebraic_c], |
| include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium], |
| dependencies : libnak_deps, |
| link_with : [_libnak_rs], |
| c_args : [no_override_init_args], |
| gnu_symbol_visibility : 'hidden', |
| ) |
| |
| idep_nak = declare_dependency( |
| include_directories : include_directories('.'), |
| link_with : _libnak, |
| ) |