#  Copyright 2020 The Monogon Project Authors.
#
#  SPDX-License-Identifier: Apache-2.0
#
#  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(
    "//build/utils:detect_root.bzl",
    "detect_root",
)

"""
Build a sysroot-style tarball containing musl/linux headers and libraries.

This can then be used to build a C toolchain that builds C/C++ binaries for Metropolis nodes.
"""

def _musl_gcc_tarball(ctx):
    tarball_name = ctx.attr.name + ".tar.xz"
    tarball = ctx.actions.declare_file(tarball_name)

    musl_headers = ctx.file.musl_headers
    musl_headers_path = musl_headers.path
    linux_headers = ctx.file.linux_headers
    linux_headers_path = linux_headers.path

    musl_root = detect_root(ctx.attr.musl)
    musl_files = ctx.files.musl

    # This builds a tarball containing musl, musl headers and linux headers.
    # This is done by some carefully crafted tar command line arguments that rewrite
    # paths to ensure that everything lands in lib/ and include/ in the tarball.

    # TODO(q3k): write nice, small static Go utility for this.

    arguments = [tarball.path]
    command = "tar -chJf $1"

    arguments += [musl_headers_path]
    command += " --transform 's|^'$2'|include|' $2"

    arguments += [linux_headers_path]
    command += " --transform 's|^'$3'|include|' $3"

    arguments += [musl_root]
    command += " --transform 's|^'$4'|lib|' $4"

    ctx.actions.run_shell(
        inputs = [musl_headers, linux_headers] + ctx.files.musl,
        outputs = [tarball],
        progress_message = "Building toolchain tarball",
        mnemonic = "BuildToolchainTarball",
        arguments = arguments,
        use_default_shell_env = True,
        command = command,
    )
    return [DefaultInfo(files=depset([tarball]))]

musl_gcc_tarball = rule(
    implementation = _musl_gcc_tarball,
    attrs = {
        "musl": attr.label(mandatory = True),
        "musl_headers": attr.label(mandatory = True, allow_single_file = True),
        "linux_headers": attr.label(mandatory = True, allow_single_file = True),
    },
)
