add bazel targets to build riscv and arm64 lk

Bug: 291553072
Change-Id: I902b835860241e258aea907aaf5daa8ad42f1e12
Signed-off-by: Dmitrii Merkurev <dimorinny@google.com>
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..ed186ce
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,102 @@
+load("@bazel_tools//tools/python:toolchain.bzl", "py_runtime_pair")
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+
+clang = "prebuilts/clang/host/linux-x86/clang-r498229b"
+
+make = "./prebuilts/build-tools/linux-x86/bin/make"
+
+clang_bin = "../{toolchain}/bin/".format(toolchain = clang)
+
+filegroup(
+    name = "lk_srcs",
+    srcs = glob(["**"]),
+)
+
+filegroup(
+    name = "lk_toochain",
+    srcs = [
+        "//prebuilts/build-tools:linux-x86",
+        "//{toolchain}:binaries".format(toolchain = clang),
+    ],
+)
+
+environment_variables = {
+    "CC": clang_bin + "clang -target {clang_target}",
+    "LD": clang_bin + "ld.lld",
+    "OBJDUMP": clang_bin + "llvm-objdump",
+    "OBJCOPY": clang_bin + "llvm-objcopy",
+    "CPPFILT": clang_bin + "llvm-cxxfilt",
+    "SIZE": clang_bin + "llvm-size",
+    "NM": clang_bin + "llvm-nm",
+    "STRIP": clang_bin + "llvm-strip",
+    "LIBGCC": "",
+}
+
+environment = " ".join(['{}="{}"'.format(k, v) for k, v in environment_variables.items()])
+
+build_command = "{make} -C lk {environment} {lk_target} && cp -R lk/build-{lk_target}/lk.elf $@"
+
+genrule(
+    name = "qemu_riscv64",
+    srcs = [
+        ":lk_srcs",
+        ":lk_toochain",
+    ],
+    outs = [
+        "qemu_riscv64/lk.elf",
+    ],
+    cmd = build_command.format(
+        environment = environment.format(clang_target = "riscv64-unknown-elf"),
+        lk_target = "qemu-virt-riscv64-test",
+        make = make,
+    ),
+    tools = [
+        ":lk_toochain",
+    ],
+)
+
+copy_to_dist_dir(
+    name = "qemu_riscv64_dist",
+    data = [":qemu_riscv64"],
+    dist_dir = "out/lk/dist",
+    flat = True,
+)
+
+genrule(
+    name = "qemu_arm64",
+    srcs = [
+        ":lk_srcs",
+        ":lk_toochain",
+    ],
+    outs = [
+        "qemu_arm64/lk.elf",
+    ],
+    cmd = build_command.format(
+        environment = environment.format(clang_target = "aarch64-unknown-elf"),
+        lk_target = "qemu-virt-arm64-test",
+        make = make,
+    ),
+    tools = [
+        ":lk_toochain",
+    ],
+)
+
+copy_to_dist_dir(
+    name = "qemu_arm64_dist",
+    data = [":qemu_arm64"],
+    dist_dir = "out/lk/dist",
+    flat = True,
+)
+
+# Use SWIG enabled Python
+py_runtime_pair(
+    name = "py_runtime_pair",
+    py2_runtime = "//prebuilts/build-tools:python2",
+    py3_runtime = "//{toolchain}:python3".format(toolchain = clang),
+)
+
+toolchain(
+    name = "py_toolchain",
+    toolchain = ":py_runtime_pair",
+    toolchain_type = "@bazel_tools//tools/python:toolchain_type",
+)
diff --git a/bazel.WORKSPACE b/bazel.WORKSPACE
new file mode 100644
index 0000000..8b5fb58
--- /dev/null
+++ b/bazel.WORKSPACE
@@ -0,0 +1,5 @@
+# Call this before define_kleaf_workspace so we
+# always prefer the u-boot py_toolchain.
+# As a side effect, all u-boot targets, including those that do not need
+# this special python, will use this special python.
+register_toolchains("//lk:py_toolchain")
\ No newline at end of file
diff --git a/bazel.sh b/bazel.sh
new file mode 100755
index 0000000..964b89b
--- /dev/null
+++ b/bazel.sh
@@ -0,0 +1 @@
+"./prebuilts/bazel/linux-x86_64/bazel" "$@"
\ No newline at end of file