binhonglee/GlobeTrotte

View on GitHub
build_defs/wings/wings.build_defs

Summary

Maintainability
Test Coverage
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", "")