18
18
BuildTargetOutput ,
19
19
ExtensionModule ,
20
20
LocalDependency ,
21
+ CppMacroValue ,
21
22
makeplan ,
22
23
)
23
24
from .util import maybe_write_file , relpath_walk_up
@@ -47,7 +48,9 @@ def _make_string(s: str):
47
48
return f"'{ s } '"
48
49
49
50
50
- VarTypes = T .Union [InputFile , OutputFile , BuildTarget , ExtensionModule , LocalDependency ]
51
+ VarTypes = T .Union [
52
+ InputFile , OutputFile , BuildTarget , ExtensionModule , LocalDependency , CppMacroValue
53
+ ]
51
54
52
55
53
56
class VarCache :
@@ -80,6 +83,9 @@ def getvar(self, item: VarTypes) -> str:
80
83
elif isinstance (item , LocalDependency ):
81
84
name = item .name .replace ("-" , "_" )
82
85
var = f"{ name } _dep"
86
+ elif isinstance (item , CppMacroValue ):
87
+ name = item .name
88
+ var = f"_sw_cpp_var_{ name } "
83
89
else :
84
90
assert False
85
91
@@ -118,6 +124,8 @@ def _render_build_target(r: RenderBuffer, vc: VarCache, bt: BuildTarget):
118
124
elif isinstance (arg , ExtensionModule ):
119
125
cmd .append (f"'@INPUT{ len (tinput )} @'" )
120
126
tinput .append (vc .getvar (arg ))
127
+ elif isinstance (arg , CppMacroValue ):
128
+ cmd .append (vc .getvar (arg ))
121
129
else :
122
130
assert False , f"unexpected { arg !r} in { bt } "
123
131
@@ -295,6 +303,8 @@ def gen_meson(
295
303
# is simpler to generate
296
304
297
305
plan = makeplan (pathlib .Path (project_root ))
306
+ macros : T .List [CppMacroValue ] = []
307
+ build_targets : T .List [BuildTarget ] = []
298
308
modules : T .List [ExtensionModule ] = []
299
309
pyi_targets : T .List [BuildTarget ] = []
300
310
local_deps : T .List [LocalDependency ] = []
@@ -308,17 +318,30 @@ def gen_meson(
308
318
elif item .command == "dat2trampoline" :
309
319
trampoline_targets .append (item )
310
320
else :
311
- _render_build_target ( r0 , vc , item )
321
+ build_targets . append ( item )
312
322
elif isinstance (item , ExtensionModule ):
313
323
# defer these to the end
314
324
modules .append (item )
315
325
elif isinstance (item , Entrypoint ):
316
326
eps .append (item )
317
327
elif isinstance (item , LocalDependency ):
318
328
local_deps .append (item )
329
+ elif isinstance (item , CppMacroValue ):
330
+ macros .append (item )
319
331
else :
320
332
assert False
321
333
334
+ if macros :
335
+ for macro in macros :
336
+ macro_name = _make_string (macro .name )
337
+ r0 .writeln (
338
+ f"{ vc .getvar (macro )} = meson.get_compiler('cpp').get_define({ macro_name } )"
339
+ )
340
+ r0 .writeln ()
341
+
342
+ for target in build_targets :
343
+ _render_build_target (r0 , vc , target )
344
+
322
345
if local_deps :
323
346
r0 .writeln ()
324
347
r0 .write_trim (
0 commit comments