1818    BuildTargetOutput ,
1919    ExtensionModule ,
2020    LocalDependency ,
21+     CppMacroValue ,
2122    makeplan ,
2223)
2324from  .util  import  maybe_write_file , relpath_walk_up 
@@ -47,7 +48,9 @@ def _make_string(s: str):
4748    return  f"'{ s }  
4849
4950
50- VarTypes  =  T .Union [InputFile , OutputFile , BuildTarget , ExtensionModule , LocalDependency ]
51+ VarTypes  =  T .Union [
52+     InputFile , OutputFile , BuildTarget , ExtensionModule , LocalDependency , CppMacroValue 
53+ ]
5154
5255
5356class  VarCache :
@@ -80,6 +83,9 @@ def getvar(self, item: VarTypes) -> str:
8083            elif  isinstance (item , LocalDependency ):
8184                name  =  item .name .replace ("-" , "_" )
8285                var  =  f"{ name }  
86+             elif  isinstance (item , CppMacroValue ):
87+                 name  =  item .name 
88+                 var  =  f"_sw_cpp_var_{ name }  
8389            else :
8490                assert  False 
8591
@@ -118,6 +124,8 @@ def _render_build_target(r: RenderBuffer, vc: VarCache, bt: BuildTarget):
118124        elif  isinstance (arg , ExtensionModule ):
119125            cmd .append (f"'@INPUT{ len (tinput )}  )
120126            tinput .append (vc .getvar (arg ))
127+         elif  isinstance (arg , CppMacroValue ):
128+             cmd .append (vc .getvar (arg ))
121129        else :
122130            assert  False , f"unexpected { arg !r} { bt }  
123131
@@ -295,6 +303,8 @@ def gen_meson(
295303    #     is simpler to generate 
296304
297305    plan  =  makeplan (pathlib .Path (project_root ))
306+     macros : T .List [CppMacroValue ] =  []
307+     build_targets : T .List [BuildTarget ] =  []
298308    modules : T .List [ExtensionModule ] =  []
299309    pyi_targets : T .List [BuildTarget ] =  []
300310    local_deps : T .List [LocalDependency ] =  []
@@ -308,17 +318,30 @@ def gen_meson(
308318            elif  item .command  ==  "dat2trampoline" :
309319                trampoline_targets .append (item )
310320            else :
311-                 _render_build_target ( r0 ,  vc ,  item )
321+                 build_targets . append ( item )
312322        elif  isinstance (item , ExtensionModule ):
313323            # defer these to the end 
314324            modules .append (item )
315325        elif  isinstance (item , Entrypoint ):
316326            eps .append (item )
317327        elif  isinstance (item , LocalDependency ):
318328            local_deps .append (item )
329+         elif  isinstance (item , CppMacroValue ):
330+             macros .append (item )
319331        else :
320332            assert  False 
321333
334+     if  macros :
335+         for  macro  in  macros :
336+             macro_name  =  _make_string (macro .name )
337+             r0 .writeln (
338+                 f"{ vc .getvar (macro )} { macro_name }  
339+             )
340+         r0 .writeln ()
341+ 
342+     for  target  in  build_targets :
343+         _render_build_target (r0 , vc , target )
344+ 
322345    if  local_deps :
323346        r0 .writeln ()
324347        r0 .write_trim (
0 commit comments