mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-31 11:17:01 -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",
 | 
						|
    ],
 | 
						|
)
 |