xref: /aosp_15_r20/external/bazelbuild-rules_go/extras/bindata.bzl (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
1*9bb1b549SSpandan Das# Copyright 2018 The Bazel Authors. All rights reserved.
2*9bb1b549SSpandan Das#
3*9bb1b549SSpandan Das# Licensed under the Apache License, Version 2.0 (the "License");
4*9bb1b549SSpandan Das# you may not use this file except in compliance with the License.
5*9bb1b549SSpandan Das# You may obtain a copy of the License at
6*9bb1b549SSpandan Das#
7*9bb1b549SSpandan Das#    http://www.apache.org/licenses/LICENSE-2.0
8*9bb1b549SSpandan Das#
9*9bb1b549SSpandan Das# Unless required by applicable law or agreed to in writing, software
10*9bb1b549SSpandan Das# distributed under the License is distributed on an "AS IS" BASIS,
11*9bb1b549SSpandan Das# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9bb1b549SSpandan Das# See the License for the specific language governing permissions and
13*9bb1b549SSpandan Das# limitations under the License.
14*9bb1b549SSpandan Das
15*9bb1b549SSpandan Das"""bindata.bzl provides the bindata rule for embedding data in .go files"""
16*9bb1b549SSpandan Das
17*9bb1b549SSpandan Dasload(
18*9bb1b549SSpandan Das    "//go:def.bzl",
19*9bb1b549SSpandan Das    "go_context",
20*9bb1b549SSpandan Das)
21*9bb1b549SSpandan Dasload(
22*9bb1b549SSpandan Das    "//go/private:go_toolchain.bzl",
23*9bb1b549SSpandan Das    "GO_TOOLCHAIN",
24*9bb1b549SSpandan Das)
25*9bb1b549SSpandan Das
26*9bb1b549SSpandan Dasdef _bindata_impl(ctx):
27*9bb1b549SSpandan Das    print("Embedding is now better handled by using rules_go's built-in embedding functionality (https://github.com/bazelbuild/rules_go/blob/master/docs/go/core/rules.md#go_library-embedsrcs). The `bindata` rule is deprecated and will be removed in rules_go version 0.39.")
28*9bb1b549SSpandan Das    go = go_context(ctx)
29*9bb1b549SSpandan Das    out = go.declare_file(go, ext = ".go")
30*9bb1b549SSpandan Das    arguments = ctx.actions.args()
31*9bb1b549SSpandan Das    arguments.add_all([
32*9bb1b549SSpandan Das        "-o",
33*9bb1b549SSpandan Das        out,
34*9bb1b549SSpandan Das        "-pkg",
35*9bb1b549SSpandan Das        ctx.attr.package,
36*9bb1b549SSpandan Das        "-prefix",
37*9bb1b549SSpandan Das        ctx.label.package,
38*9bb1b549SSpandan Das    ])
39*9bb1b549SSpandan Das    if not ctx.attr.compress:
40*9bb1b549SSpandan Das        arguments.add("-nocompress")
41*9bb1b549SSpandan Das    if not ctx.attr.metadata:
42*9bb1b549SSpandan Das        arguments.add("-nometadata")
43*9bb1b549SSpandan Das    if not ctx.attr.memcopy:
44*9bb1b549SSpandan Das        arguments.add("-nomemcopy")
45*9bb1b549SSpandan Das    if not ctx.attr.modtime:
46*9bb1b549SSpandan Das        arguments.add_all(["-modtime", "0"])
47*9bb1b549SSpandan Das    if ctx.attr.extra_args:
48*9bb1b549SSpandan Das        arguments.add_all(ctx.attr.extra_args)
49*9bb1b549SSpandan Das    srcs = [f.path for f in ctx.files.srcs]
50*9bb1b549SSpandan Das    if ctx.attr.strip_external and any([f.startswith("external/") for f in srcs]):
51*9bb1b549SSpandan Das        arguments.add("-prefix", ctx.label.workspace_root + "/" + ctx.label.package)
52*9bb1b549SSpandan Das    arguments.add_all(srcs)
53*9bb1b549SSpandan Das    ctx.actions.run(
54*9bb1b549SSpandan Das        inputs = ctx.files.srcs,
55*9bb1b549SSpandan Das        outputs = [out],
56*9bb1b549SSpandan Das        mnemonic = "GoBindata",
57*9bb1b549SSpandan Das        executable = ctx.executable._bindata,
58*9bb1b549SSpandan Das        arguments = [arguments],
59*9bb1b549SSpandan Das    )
60*9bb1b549SSpandan Das    return [
61*9bb1b549SSpandan Das        DefaultInfo(
62*9bb1b549SSpandan Das            files = depset([out]),
63*9bb1b549SSpandan Das        ),
64*9bb1b549SSpandan Das    ]
65*9bb1b549SSpandan Das
66*9bb1b549SSpandan Dasbindata = rule(
67*9bb1b549SSpandan Das    implementation = _bindata_impl,
68*9bb1b549SSpandan Das    attrs = {
69*9bb1b549SSpandan Das        "srcs": attr.label_list(allow_files = True),
70*9bb1b549SSpandan Das        "package": attr.string(mandatory = True),
71*9bb1b549SSpandan Das        "compress": attr.bool(default = True),
72*9bb1b549SSpandan Das        "metadata": attr.bool(default = False),
73*9bb1b549SSpandan Das        "memcopy": attr.bool(default = True),
74*9bb1b549SSpandan Das        "modtime": attr.bool(default = False),
75*9bb1b549SSpandan Das        "strip_external": attr.bool(default = False),
76*9bb1b549SSpandan Das        "extra_args": attr.string_list(),
77*9bb1b549SSpandan Das        "_bindata": attr.label(
78*9bb1b549SSpandan Das            executable = True,
79*9bb1b549SSpandan Das            cfg = "exec",
80*9bb1b549SSpandan Das            default = "@com_github_kevinburke_go_bindata//go-bindata:go-bindata",
81*9bb1b549SSpandan Das        ),
82*9bb1b549SSpandan Das        "_go_context_data": attr.label(
83*9bb1b549SSpandan Das            default = "//:go_context_data",
84*9bb1b549SSpandan Das        ),
85*9bb1b549SSpandan Das    },
86*9bb1b549SSpandan Das    toolchains = [GO_TOOLCHAIN],
87*9bb1b549SSpandan Das)
88