# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the License);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
load("@io_bazel_rules_go//extras:embed_data.bzl", "go_embed_data")

# Our goal is for this program to be embedded into this Go package. Go embed
# only allows files in the same package directory to be embedded. So we need to
# use a "no-op" genrule to place this binary in the same directory as the
# package source.
genrule(
    name = "handle_disk_layout_amd64.bin",
    srcs = ["//src/cmd/handle_disk_layout:handle_disk_layout_bin_amd64"],
    outs = ["_handle_disk_layout_amd64.bin"],
    cmd = "cp $< $@",
)

genrule(
    name = "handle_disk_layout_arm64.bin",
    srcs = ["//src/cmd/handle_disk_layout:handle_disk_layout_bin_arm64"],
    outs = ["_handle_disk_layout_arm64.bin"],
    cmd = "cp $< $@",
)

genrule(
    name = "veritysetup_amd64.img",
    srcs = ["//:veritysetup_amd64.tar"],
    outs = ["_veritysetup_amd64.img"],
    cmd = "cp $< $@",
)

genrule(
    name = "veritysetup_arm64.img",
    srcs = ["//:veritysetup_arm64.tar"],
    outs = ["_veritysetup_arm64.img"],
    cmd = "cp $< $@",
)

genrule(
    name = "docker_credential_gcr_amd64",
    srcs = ["@com_github_googlecloudplatform_docker_credential_gcr//:docker-credential-gcr_amd64"],
    outs = ["docker-credential-gcr_amd64"],
    cmd = "cp $< $@",
)

genrule(
    name = "docker_credential_gcr_arm64",
    srcs = ["@com_github_googlecloudplatform_docker_credential_gcr//:docker-credential-gcr_arm64"],
    outs = ["docker-credential-gcr_arm64"],
    cmd = "cp $< $@",
)

go_library(
    name = "provisioner_lib",
    srcs = [
        "main.go",
        "resume.go",
        "run.go",
        "embeds_linux_amd64.go",
        "embeds_linux_arm64.go",
    ],
    embedsrcs = select({
        "@io_bazel_rules_go//go/toolchain:amd64": [
            ":handle_disk_layout_amd64.bin",
            ":veritysetup_amd64.img",
            ":docker_credential_gcr_amd64",
        ],
        "@io_bazel_rules_go//go/toolchain:arm64": [
            ":handle_disk_layout_arm64.bin",
            ":veritysetup_arm64.img",
            ":docker_credential_gcr_arm64",
        ],
    }),
    importpath = "cos.googlesource.com/cos/tools.git/src/cmd/provisioner",
    visibility = ["//visibility:private"],
    deps = [
        "//src/pkg/provisioner",
        "@com_github_google_subcommands//:subcommands",
        "@com_google_cloud_go_storage//:storage",
    ],
)

go_binary(
    name = "provisioner_amd64",
    embed = [":provisioner_lib"],
    goos = "linux",
    goarch = "amd64",
    visibility = ["//visibility:public"],
)

go_binary(
    name = "provisioner_arm64",
    embed = [":provisioner_lib"],
    goos = "linux",
    goarch = "arm64",
    visibility = ["//visibility:public"],
)
