xref: /aosp_15_r20/external/mesa3d/src/nouveau/compiler/meson.build (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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