Updates to build system for upb C++ compiler.

pull/13171/head
Josh Haberman 6 years ago
parent 5f575995b5
commit 9ce4a77f61
  1. 42
      BUILD
  2. 6
      WORKSPACE
  3. 28
      build_defs.bzl
  4. 2
      tools/make_cmakelists.py

42
BUILD

@ -249,7 +249,7 @@ cc_test(
upb_proto_library( upb_proto_library(
name = "conformance_proto_upb", name = "conformance_proto_upb",
upbc = ":upbc", upbc = ":protoc-gen-upb",
deps = [ deps = [
"@com_google_protobuf//:conformance_proto", "@com_google_protobuf//:conformance_proto",
"@com_google_protobuf//:test_messages_proto3_proto", "@com_google_protobuf//:test_messages_proto3_proto",
@ -373,13 +373,33 @@ lua_test(
# upb compiler ################################################################# # upb compiler #################################################################
lua_binary( lua_binary(
name = "upbc", name = "lua_upbc",
luadeps = [ luadeps = [
"lua/upbc_lib", "lua/upbc_lib",
], ],
luamain = "tools/upbc.lua", luamain = "tools/upbc.lua",
) )
cc_library(
name = "upbc_generator",
hdrs = ["upbc/generator.h"],
srcs = ["upbc/generator.cc", "upbc/message_layout.h", "upbc/message_layout.cc"],
deps = [
"@com_google_protobuf//:protobuf",
"@com_google_protobuf//:protoc_lib",
"@absl//absl/strings",
],
)
cc_binary(
name = "protoc-gen-upb",
srcs = ["upbc/main.cc"],
deps = [
":upbc_generator",
"@com_google_protobuf//:protoc_lib",
],
)
# Test the CMake build ######################################################### # Test the CMake build #########################################################
make_shell_script( make_shell_script(
@ -394,6 +414,7 @@ sh_test(
data = glob([ data = glob([
"CMakeLists.txt", "CMakeLists.txt",
"google/**/*", "google/**/*",
"upbc/**/*",
"upb/**/*", "upb/**/*",
"tests/**/*", "tests/**/*",
]) + [ ]) + [
@ -458,8 +479,8 @@ genrule(
"generated/upb/descriptor/descriptor.upbdefs.h", "generated/upb/descriptor/descriptor.upbdefs.h",
"generated/upb/descriptor/descriptor.upbdefs.c", "generated/upb/descriptor/descriptor.upbdefs.c",
], ],
cmd = "UPBC=$$PWD/$(location :upbc); INFILE=$$PWD/$<; cd $(GENDIR)/generated && $$UPBC --generate-upbdefs $$INFILE", cmd = "UPBC=$$PWD/$(location :lua_upbc); INFILE=$$PWD/$<; cd $(GENDIR)/generated && $$UPBC --generate-upbdefs $$INFILE",
tools = [":upbc"], tools = [":lua_upbc"],
) )
proto_library( proto_library(
@ -478,13 +499,16 @@ genrule(
genrule( genrule(
name = "generate_descriptor_c", name = "generate_descriptor_c",
srcs = ["generated/google/protobuf/descriptor.pb"], srcs = ["google/protobuf/descriptor.proto"],
outs = [ outs = [
"generated/google/protobuf/descriptor.upb.h", "generated/google/protobuf/descriptor.upb.h",
"generated/google/protobuf/descriptor.upb.c", "generated/google/protobuf/descriptor.upb.c",
], ],
cmd = "UPBC=$$PWD/$(location :upbc); INFILE=$$PWD/$<; cd $(GENDIR)/generated && $$UPBC $$INFILE", cmd = "$(location @com_google_protobuf//:protoc) $< --upb_out=$(GENDIR)/generated --plugin=protoc-gen-upb=$(location :protoc-gen-upb)",
tools = [":upbc"], tools = [
"@com_google_protobuf//:protoc",
":protoc-gen-upb"
],
) )
proto_library( proto_library(
@ -506,8 +530,8 @@ genrule(
"generated/tests/json/test.upbdefs.h", "generated/tests/json/test.upbdefs.h",
"generated/tests/json/test.upbdefs.c", "generated/tests/json/test.upbdefs.c",
], ],
cmd = "UPBC=$$PWD/$(location :upbc); INFILE=$$PWD/$<; cd $(GENDIR)/generated && $$UPBC --generate-upbdefs $$INFILE", cmd = "UPBC=$$PWD/$(location :lua_upbc); INFILE=$$PWD/$<; cd $(GENDIR)/generated && $$UPBC --generate-upbdefs $$INFILE",
tools = [":upbc"], tools = [":lua_upbc"],
) )
genrule( genrule(

@ -23,6 +23,12 @@ git_repository(
#tag = "conformance-build-tag", #tag = "conformance-build-tag",
) )
git_repository(
name = "absl",
commit = "070f6e47b33a2909d039e620c873204f78809492",
remote = "https://github.com/abseil/abseil-cpp.git",
)
http_archive( http_archive(
name = "ragel", name = "ragel",
sha256 = "5f156edb65d20b856d638dd9ee2dfb43285914d9aa2b6ec779dac0270cd56c3f", sha256 = "5f156edb65d20b856d638dd9ee2dfb43285914d9aa2b6ec779dac0270cd56c3f",

@ -218,31 +218,26 @@ def _remove_up(string):
return _remove_suffix(string, ".proto") return _remove_suffix(string, ".proto")
def _upb_proto_library_srcs_impl(ctx): def _upb_proto_library_srcs_impl(ctx):
descriptors = [] sources = []
outs = [] outs = []
include_dirs = {}
for dep in ctx.attr.deps: for dep in ctx.attr.deps:
if hasattr(dep, 'proto'): if hasattr(dep, 'proto'):
for desc in dep.proto.transitive_descriptor_sets:
descriptors.append(desc)
for src in dep.proto.transitive_sources: for src in dep.proto.transitive_sources:
sources.append(src)
include_dirs[_remove_suffix(src.path, _remove_up(src.short_path) + "." + src.extension)] = True
outs.append(ctx.actions.declare_file(_remove_up(src.short_path) + ".upb.h")) outs.append(ctx.actions.declare_file(_remove_up(src.short_path) + ".upb.h"))
outs.append(ctx.actions.declare_file(_remove_up(src.short_path) + ".upb.c")) outs.append(ctx.actions.declare_file(_remove_up(src.short_path) + ".upb.c"))
outdir = _remove_suffix(outs[-1].path, _remove_up(src.short_path) + ".upb.c") outdir = _remove_suffix(outs[-1].path, _remove_up(src.short_path) + ".upb.c")
concatenated = ctx.actions.declare_file(ctx.label.name + "_concatenated_descriptor.bin") source_paths = [d.path for d in sources]
descriptor_paths = [d.path for d in descriptors] include_args = ["-I" + root for root in include_dirs.keys()]
ctx.actions.run_shell(
inputs = descriptors,
outputs = [concatenated],
progress_message = "Concatenating descriptors",
command = "cat %s > %s" % (" ".join(descriptor_paths), concatenated.path),
)
ctx.actions.run( ctx.actions.run(
inputs = [concatenated], inputs = [ctx.executable.upbc] + sources,
outputs = outs, outputs = outs,
executable = ctx.executable.upbc, executable = ctx.executable.protoc,
arguments = ["--outdir", outdir, concatenated.path], arguments = ["--upb_out", outdir, "--plugin=protoc-gen-upb=" + ctx.executable.upbc.path] + include_args + source_paths,
progress_message = "Generating upb protos", progress_message = "Generating upb protos",
) )
@ -255,6 +250,11 @@ _upb_proto_library_srcs = rule(
executable = True, executable = True,
cfg = "host", cfg = "host",
), ),
"protoc": attr.label(
executable = True,
cfg = "host",
default = "@com_google_protobuf//:protoc",
),
"deps": attr.label_list(), "deps": attr.label_list(),
} }
) )

@ -34,7 +34,7 @@ class BuildFileFunctions(object):
pass pass
def cc_library(self, **kwargs): def cc_library(self, **kwargs):
if kwargs["name"] == "amalgamation": if kwargs["name"] == "amalgamation" or kwargs["name"] == "upbc_generator":
return return
files = kwargs.get("srcs", []) + kwargs.get("hdrs", []) files = kwargs.get("srcs", []) + kwargs.get("hdrs", [])
self.converter.toplevel += "add_library(%s\n %s)\n" % ( self.converter.toplevel += "add_library(%s\n %s)\n" % (

Loading…
Cancel
Save