blob: a689431db72cd01183701af36a26564d23eb56cd [file] [log] [blame]
Joshua Haberman823eb092021-04-05 12:26:41 -07001# Copyright (c) 2009-2021, Google LLC
Joshua Habermane59d2c82021-04-05 10:47:53 -07002# All rights reserved.
3#
Joshua Haberman2d6e5542023-09-08 17:13:32 -07004# Use of this source code is governed by a BSD-style
5# license that can be found in the LICENSE file or at
6# https://developers.google.com/open-source/licenses/bsd
Joshua Haberman4bd34da2020-11-04 20:16:47 -08007
Protobuf Teamb8edc712022-03-16 08:24:52 -07008# begin:google_only
Protobuf Team Bot306123e2022-11-04 09:25:30 -07009# load("@rules_cc//cc:defs.bzl", _cc_proto_library = "cc_proto_library")
Protobuf Teamb8edc712022-03-16 08:24:52 -070010#
11# _is_google3 = True
12# end:google_only
Joshua Haberman4a843902020-11-11 17:56:55 -080013
Protobuf Teamb8edc712022-03-16 08:24:52 -070014# begin:github_only
Joshua Haberman4a843902020-11-11 17:56:55 -080015_cc_proto_library = native.cc_proto_library
Protobuf Teamb8edc712022-03-16 08:24:52 -070016_is_google3 = False
17# end:github_only
Joshua Haberman4a843902020-11-11 17:56:55 -080018
Joshua Habermand2446fd2020-11-11 18:02:42 -080019def proto_library(**kwargs):
Protobuf Teamb8edc712022-03-16 08:24:52 -070020 if _is_google3:
21 kwargs["cc_api_version"] = 2
Joshua Habermand2446fd2020-11-11 18:02:42 -080022 native.proto_library(
Joshua Haberman970c6452022-03-08 17:44:06 -080023 **kwargs
Joshua Habermand2446fd2020-11-11 18:02:42 -080024 )
25
Joshua Haberman555fbbc2020-11-10 20:20:06 -080026def tmpl_cc_binary(name, gen, args, replacements = [], **kwargs):
27 srcs = [name + ".cc"]
Joshua Haberman4bd34da2020-11-04 20:16:47 -080028 native.genrule(
29 name = name + "_gen_srcs",
Joshua Haberman555fbbc2020-11-10 20:20:06 -080030 tools = [gen],
31 outs = srcs,
32 cmd = "$(location " + gen + ") " + " ".join(args) + " > $@",
Joshua Haberman4bd34da2020-11-04 20:16:47 -080033 )
34
Protobuf Teamb8edc712022-03-16 08:24:52 -070035 if _is_google3:
36 kwargs["malloc"] = "//base:system_malloc"
37 kwargs["features"] = ["-static_linking_mode"]
Joshua Haberman4bd34da2020-11-04 20:16:47 -080038 native.cc_binary(
39 name = name,
Joshua Haberman555fbbc2020-11-10 20:20:06 -080040 srcs = srcs,
Joshua Haberman970c6452022-03-08 17:44:06 -080041 **kwargs
Joshua Haberman4bd34da2020-11-04 20:16:47 -080042 )
43
Joshua Haberman9c87f112020-11-12 17:44:02 -080044def cc_optimizefor_proto_library(name, srcs, outs, optimize_for):
Joshua Haberman4bd34da2020-11-04 20:16:47 -080045 if len(srcs) != 1:
46 fail("Currently srcs must have exactly 1 element")
47
48 native.genrule(
49 name = name + "_gen_proto",
50 srcs = srcs,
51 outs = outs,
Joshua Haberman9c87f112020-11-12 17:44:02 -080052 cmd = "cp $< $@ && chmod a+w $@ && echo 'option optimize_for = " + optimize_for + ";' >> $@",
Joshua Haberman4bd34da2020-11-04 20:16:47 -080053 )
54
Joshua Habermanda48e012020-11-11 19:00:52 -080055 proto_library(
Joshua Haberman4bd34da2020-11-04 20:16:47 -080056 name = name + "_proto",
57 srcs = outs,
58 )
59
Joshua Haberman4a843902020-11-11 17:56:55 -080060 _cc_proto_library(
Joshua Haberman4bd34da2020-11-04 20:16:47 -080061 name = name,
62 deps = [":" + name + "_proto"],
63 )
Joshua Haberman555fbbc2020-11-10 20:20:06 -080064
65def expand_suffixes(vals, suffixes):
Joshua Habermand2446fd2020-11-11 18:02:42 -080066 ret = []
67 for val in vals:
68 for suffix in suffixes:
69 ret.append(val + suffix)
70 return ret