"""Meta and miscellaneous rules."""

load("@bazel_skylib//rules:build_test.bzl", _build_test = "build_test")
load("@bazel_skylib//:bzl_library.bzl", _bzl_library = "bzl_library")

build_test = _build_test
bzl_library = _bzl_library
more_shards = 4
most_shards = 8
version = "//tools/bazeldefs:version"

def short_path(path):
    return path

def proto_library(name, has_services = None, **kwargs):
    native.proto_library(
        name = name,
        **kwargs
    )

def select_arch(amd64 = "amd64", arm64 = "arm64", default = None, **kwargs):
    values = {
        "@bazel_tools//src/conditions:linux_x86_64": amd64,
        "@bazel_tools//src/conditions:linux_aarch64": arm64,
    }
    if default:
        values["//conditions:default"] = default
    return select(values, **kwargs)

def select_system(linux = ["__linux__"], **kwargs):
    return linux  # Only Linux supported.

def default_installer():
    return None

def default_net_util():
    return []  # Nothing needed.

def coreutil():
    return []  # Nothing needed.

def select_native_vs_cross(native = [], amd64 = [], arm64 = [], cross = []):
    values = {
        "//tools/bazeldefs:linux_arm64_cross": arm64 + cross,
        "//tools/bazeldefs:linux_amd64_cross": amd64 + cross,
        "//conditions:default": native,
    }
    return select(values)

def arch_genrule(name, srcs, outs, cmd, tools):
    """Runs a gen command on the target architecture.

    If the target architecture isn't match the host architecture, it will build
    a command for the target architecture and run it via qemu.

    The native genrule runs the command on the host architecture.

    Args:
     name: name of generated target.
     srcs: A list of inputs for this rule.
     cmd: The command to run. It has to contain " QEMU " before executed binaries.
     outs: A list of files generated by this rule.
     tools: A list of tool dependencies for this rule.
    """
    qemu_arm64 = "qemu-aarch64-static"
    qemu_amd64 = "qemu-x86_64-static"
    srcs = select_native_vs_cross(
        cross = srcs + tools,
        native = srcs,
    )
    tools = select_native_vs_cross(
        cross = [],
        native = tools,
    )
    cmd = select_native_vs_cross(
        arm64 = cmd.replace("QEMU", qemu_arm64),
        amd64 = cmd.replace("QEMU", qemu_amd64),
        native = cmd.replace("QEMU", ""),
        cross = "",
    )
    native.genrule(name = name, srcs = srcs, outs = outs, cmd = cmd, tools = tools)

"""Meta and miscellaneous rules."""

load("@bazel_skylib//rules:build_test.bzl", _build_test = "build_test")
load("@bazel_skylib//:bzl_library.bzl", _bzl_library = "bzl_library")

build_test = _build_test
bzl_library = _bzl_library
more_shards = 4
most_shards = 8
version = "//tools/bazeldefs:version"

def short_path(path):
    return path

def proto_library(name, has_services = None, **kwargs):
    native.proto_library(
        name = name,
        **kwargs
    )

def select_arch(amd64 = "amd64", arm64 = "arm64", default = None, **kwargs):
    values = {
        "@bazel_tools//src/conditions:linux_x86_64": amd64,
        "@bazel_tools//src/conditions:linux_aarch64": arm64,
    }
    if default:
        values["//conditions:default"] = default
    return select(values, **kwargs)

def select_system(linux = ["__linux__"], **kwargs):
    return linux  # Only Linux supported.

def default_installer():
    return None

def default_net_util():
    return []  # Nothing needed.

def coreutil():
    return []  # Nothing needed.

def select_native_vs_cross(native = [], amd64 = [], arm64 = [], cross = []):
    values = {
        "//tools/bazeldefs:linux_arm64_cross": arm64 + cross,
        "//tools/bazeldefs:linux_amd64_cross": amd64 + cross,
        "//conditions:default": native,
    }
    return select(values)

def arch_genrule(name, srcs, outs, cmd, tools):
    """Runs a gen command on the target architecture.

    If the target architecture isn't match the host architecture, it will build
    a command for the target architecture and run it via qemu.

    The native genrule runs the command on the host architecture.

    Args:
     name: name of generated target.
     srcs: A list of inputs for this rule.
     cmd: The command to run. It has to contain " QEMU " before executed binaries.
     outs: A list of files generated by this rule.
     tools: A list of tool dependencies for this rule.
    """
    qemu_arm64 = "qemu-aarch64-static"
    qemu_amd64 = "qemu-x86_64-static"
    srcs = select_native_vs_cross(
        cross = srcs + tools,
        native = srcs,
    )
    tools = select_native_vs_cross(
        cross = [],
        native = tools,
    )
    cmd = select_native_vs_cross(
        arm64 = cmd.replace("QEMU", qemu_arm64),
        amd64 = cmd.replace("QEMU", qemu_amd64),
        native = cmd.replace("QEMU", ""),
        cross = "",
    )
    native.genrule(name = name, srcs = srcs, outs = outs, cmd = cmd, tools = tools)

Meta and miscellaneous rules. # Only Linux supported. # Nothing needed. # Nothing needed. Runs a gen command on the target architecture.      If the target architecture isn't match the host architecture, it will build     a command for the target architecture and run it via qemu.      The native genrule runs the command on the host architecture.      Args:      name: name of generated target.      srcs: A list of inputs for this rule.      cmd: The command to run. It has to contain " QEMU " before executed binaries.      outs: A list of files generated by this rule.      tools: A list of tool dependencies for this rule.