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