mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from build.ab import Rule, simplerule, Targets, TargetsMap
 | |
| from build.c import cxxprogram
 | |
| 
 | |
| encoders = {}
 | |
| 
 | |
| 
 | |
| @Rule
 | |
| def protoencode_single(self, name, srcs: Targets, proto, include, symbol):
 | |
|     if proto not in encoders:
 | |
|         r = cxxprogram(
 | |
|             name="protoencode_" + proto,
 | |
|             srcs=["scripts/protoencode.cc"],
 | |
|             cflags=["-DPROTO=" + proto, "-DINCLUDE="+include],
 | |
|             deps=[
 | |
|                 "lib/core",
 | |
|                 "lib/config+proto_lib",
 | |
|                 "lib/fluxsource+proto_lib",
 | |
|                 "lib/fluxsink+proto_lib",
 | |
|                 "tests+test_proto_lib",
 | |
|                 "+protobuf_lib",
 | |
|                 "+fmt_lib",
 | |
|             ],
 | |
|         )
 | |
|         encoders[proto] = r
 | |
|     else:
 | |
|         r = encoders[proto]
 | |
|     r.materialise()
 | |
| 
 | |
|     simplerule(
 | |
|         replaces=self,
 | |
|         ins=srcs,
 | |
|         outs=[f"={name}.cc"],
 | |
|         deps=[r],
 | |
|         commands=[
 | |
|             # Materialise symbolic links (for Windows).
 | |
|             "cp -L $[ins[0]] $[ins[0]].real",
 | |
|             "mv $[ins[0]].real $[ins[0]]",
 | |
|             "$[deps[0]] $[ins] $[outs] " + symbol
 | |
|         ],
 | |
|         label="PROTOENCODE",
 | |
|     )
 | |
| 
 | |
| 
 | |
| @Rule
 | |
| def protoencode(self, name, proto, include,srcs: TargetsMap, symbol):
 | |
|     encoded = [
 | |
|         protoencode_single(
 | |
|             name=f"{k}_cc",
 | |
|             srcs=[v],
 | |
|             proto=proto,
 | |
|             include=include,
 | |
|             symbol=f"{symbol}_{k}_pb",
 | |
|         )
 | |
|         for k, v in srcs.items()
 | |
|     ]
 | |
| 
 | |
|     simplerule(
 | |
|         replaces=self,
 | |
|         ins=encoded,
 | |
|         outs=[f"={name}.cc"],
 | |
|         commands=["cat $[ins] > $[outs]"],
 | |
|         label="CONCAT",
 | |
|     )
 | |
| 
 | |
| 
 | |
| cxxprogram(
 | |
|     name="mkdoc",
 | |
|     srcs=["./mkdoc.cc"],
 | |
|     deps=[
 | |
|         "+fmt_lib",
 | |
|         "+protobuf_lib",
 | |
|         "lib/algorithms",
 | |
|         "lib/config+proto_lib",
 | |
|         "lib/fluxsink+proto_lib",
 | |
|         "lib/fluxsource+proto_lib",
 | |
|         "src/formats",
 | |
|     ],
 | |
| )
 | |
| 
 | |
| cxxprogram(
 | |
|     name="mkdocindex",
 | |
|     srcs=["./mkdocindex.cc"],
 | |
|     deps=[
 | |
|         "+fmt_lib",
 | |
|         "+protobuf_lib",
 | |
|         "lib/algorithms",
 | |
|         "lib/config+proto_lib",
 | |
|         "lib/fluxsink+proto_lib",
 | |
|         "lib/fluxsource+proto_lib",
 | |
|         "src/formats",
 | |
|     ],
 | |
| )
 |