build_defs/wings/wings.build_defs
subinclude("//build_defs/gen")
def wings_lib(
name:str, src:str, outs:dict, test_only=False, visibility:list=None, deps:list=[],
):
all_out_files = []
src_file = filegroup(
name = f"_{name}#wings",
srcs = [src],
requires = ["wings"],
visibility = visibility,
exported_deps = deps,
test_only = test_only,
)
tools = {
"wings": CONFIG.WINGS_TOOL,
}
config_param = ""
if CONFIG.WINGS_CONFIG_RULE != "":
tools["config"] = CONFIG.WINGS_CONFIG_RULE
config_param = "-c:$TOOLS_CONFIG "
cmd = " && ".join([
_home_path(),
"$TOOLS_WINGS " + config_param + "$SRC",
"echo " + CONFIG.get("WINGS_CONFIG_RULE")
])
for i in outs.keys():
filetype = (outs[i].split("."))[-1]
if CONFIG["WINGS_FORMATTER_" + upper(filetype)] != "":
cmd += " && " + " && ".join([
_go_to_top_level(),
"FILE=\"" + i + "/" + outs[i] + "\"",
CONFIG["WINGS_FORMATTER_" + upper(filetype)],
])
all_out_files.append(i + "/" + outs[i])
gen_files = build_rule(
name = f"_{name}#genFiles",
srcs = [src],
tools = tools,
cmd = cmd,
outs = all_out_files,
deps = [src_file],
test_only = test_only,
binary = False,
visibility = visibility,
)
provides = {}
for i in outs.keys():
filetype = (outs[i].split("."))[-1]
lang_name = f"_{name}#{filetype}"
cmd = "mv $PKG_DIR/" + i + "/" + outs[i] + " ./"
build_rule(
name = lang_name,
srcs = [gen_files],
cmd = cmd,
outs = [outs[i]],
visibility = visibility,
binary = False,
test_only = test_only,
requires = ["wings"],
needs_transitive_deps = True,
)
provides[filetype] = ":" + lang_name
provides["wings"] = src_file
return filegroup(
name = name,
srcs = [gen_files, src_file],
deps = deps + provides.values(),
needs_transitive_deps = True,
test_only = test_only,
provides = provides,
binary = False,
requires = ["wings"],
visibility = visibility,
)
CONFIG.setdefault("WINGS_TOOL", "wings")
CONFIG.setdefault("WINGS_CONFIG_RULE", "")
CONFIG.setdefault("WINGS_FORMATTER_GO", "")
CONFIG.setdefault("WINGS_FORMATTER_TS", "")