Merge pull request #166 from haberman/bazel25

Compatibility with Bazel 0.25.2 and 0.24.1.
pull/13171/head
Joshua Haberman 6 years ago committed by GitHub
commit 04350e1d1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      BUILD
  2. 1
      CMakeLists.txt
  3. 27
      WORKSPACE
  4. 70
      build_defs.bzl
  5. 2
      ragel.BUILD
  6. 16
      repository_defs.bzl
  7. 7
      tools/make_cmakelists.py

@ -543,8 +543,8 @@ genrule(
name = "generate_json_ragel", name = "generate_json_ragel",
srcs = ["upb/json/parser.rl"], srcs = ["upb/json/parser.rl"],
outs = ["upb/json/parser.c"], outs = ["upb/json/parser.c"],
cmd = "$(location @ragel//:ragel) -C -o upb/json/parser.c $< && mv upb/json/parser.c $@", cmd = "$(location @ragel//:ragelc) -C -o upb/json/parser.c $< && mv upb/json/parser.c $@",
tools = ["@ragel"], tools = ["@ragel//:ragelc"],
) )
genrule( genrule(

@ -115,6 +115,7 @@ target_link_libraries(upb_pb
table table
upb) upb)
add_library(upb_json add_library(upb_json
generated_for_cmake/upb/json/parser.c
upb/json/printer.c upb/json/printer.c
upb/json/parser.h upb/json/parser.h
upb/json/printer.h) upb/json/printer.h)

@ -3,6 +3,11 @@ workspace(name = "upb")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
load(":repository_defs.bzl", "bazel_version_repository")
bazel_version_repository(
name = "bazel_version"
)
http_archive( http_archive(
name = "lua", name = "lua",
@ -17,11 +22,16 @@ http_archive(
git_repository( git_repository(
name = "com_google_protobuf", name = "com_google_protobuf",
commit = "25feb59620627b673df76813dfd66e3f565765e7", remote = "https://github.com/protocolbuffers/protobuf.git",
#sha256 = "d7a221b3d4fb4f05b7473795ccea9e05dab3b8721f6286a95fffbffc2d926f8b", commit = "78ca77ac8799f67fda7b9a01cc691cd9fe526f25",
remote = "https://github.com/haberman/protobuf.git", )
shallow_since = "1541281400 -0700"
#tag = "conformance-build-tag", http_archive(
name = "zlib",
build_file = "@com_google_protobuf//:third_party/zlib.BUILD",
sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1",
strip_prefix = "zlib-1.2.11",
urls = ["https://zlib.net/zlib-1.2.11.tar.gz"],
) )
git_repository( git_repository(
@ -40,8 +50,7 @@ http_archive(
) )
http_archive( http_archive(
name = "bazel_skylib", name = "bazel_skylib",
sha256 = "bbccf674aa441c266df9894182d80de104cabd19be98be002f6d478aaa31574d", strip_prefix = "bazel-skylib-master",
strip_prefix = "bazel-skylib-2169ae1c374aab4a09aa90e65efe1a3aad4e279b", urls = ["https://github.com/bazelbuild/bazel-skylib/archive/master.tar.gz"],
urls = ["https://github.com/bazelbuild/bazel-skylib/archive/2169ae1c374aab4a09aa90e65efe1a3aad4e279b.tar.gz"],
) )

@ -1,3 +1,9 @@
load("@bazel_skylib//lib:paths.bzl", "paths")
load("@bazel_skylib//lib:versions.bzl", "versions")
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
load("@bazel_version//:bazel_version.bzl", "bazel_version")
_shell_find_runfiles = """ _shell_find_runfiles = """
# --- begin runfiles.bash initialization --- # --- begin runfiles.bash initialization ---
# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). # Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash).
@ -23,10 +29,6 @@ _shell_find_runfiles = """
# --- end runfiles.bash initialization --- # --- end runfiles.bash initialization ---
""" """
load("@bazel_skylib//lib:paths.bzl", "paths")
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "CPP_LINK_STATIC_LIBRARY_ACTION_NAME")
def _librule(name): def _librule(name):
return name + "_lib" return name + "_lib"
@ -272,38 +274,63 @@ def filter_none(elems):
# upb_proto_library() rule # upb_proto_library() rule
def cc_library_func(ctx, hdrs, srcs, deps): def cc_library_func(ctx, name, hdrs, srcs, dep_ccinfos):
compilation_contexts = [] compilation_contexts = [info.compilation_context for info in dep_ccinfos]
linking_contexts = [] linking_contexts = [info.linking_context for info in dep_ccinfos]
for dep in deps:
if CcInfo in dep:
linking_contexts.append(dep[CcInfo].linking_context)
compilation_contexts.append(dep[CcInfo].compilation_context)
toolchain = find_cpp_toolchain(ctx) toolchain = find_cpp_toolchain(ctx)
feature_configuration = cc_common.configure_features( feature_configuration = cc_common.configure_features(
cc_toolchain = toolchain, cc_toolchain = toolchain,
requested_features = ctx.features, requested_features = ctx.features,
unsupported_features = ctx.disabled_features, unsupported_features = ctx.disabled_features,
) )
compilation_info = cc_common.compile(
ctx = ctx, if is_bazel:
if bazel_version == "0.24.1":
# Compatibility code until gRPC is on 0.25.2 or later.
compilation_info = cc_common.compile(
ctx = ctx,
feature_configuration = feature_configuration,
cc_toolchain = toolchain,
srcs = srcs,
hdrs = hdrs,
compilation_contexts = compilation_contexts,
)
linking_info = cc_common.link(
ctx = ctx,
feature_configuration = feature_configuration,
cc_toolchain = toolchain,
cc_compilation_outputs = compilation_info.cc_compilation_outputs,
linking_contexts = linking_contexts,
)
return CcInfo(
compilation_context = compilation_info.compilation_context,
linking_context = linking_info.linking_context,
)
if not versions.is_at_least("0.25.2", bazel_version):
fail("upb requires Bazel >=0.25.2 or 0.24.1")
(compilation_context, compilation_outputs) = cc_common.compile(
actions = ctx.actions,
feature_configuration = feature_configuration, feature_configuration = feature_configuration,
cc_toolchain = toolchain, cc_toolchain = toolchain,
name = name,
srcs = srcs, srcs = srcs,
hdrs = hdrs, public_hdrs = hdrs,
compilation_contexts = compilation_contexts, compilation_contexts = compilation_contexts,
) )
linking_info = cc_common.link( (linking_context, linking_outputs) = cc_common.create_linking_context_from_compilation_outputs(
ctx = ctx, actions = ctx.actions,
name = name,
feature_configuration = feature_configuration, feature_configuration = feature_configuration,
cc_toolchain = toolchain, cc_toolchain = toolchain,
cc_compilation_outputs = compilation_info.cc_compilation_outputs, compilation_outputs = compilation_outputs,
linking_contexts = linking_contexts, linking_contexts = linking_contexts,
) )
return CcInfo( return CcInfo(
compilation_context = compilation_info.compilation_context, compilation_context = compilation_context,
linking_context = linking_info.linking_context, linking_context = linking_context,
) )
def _compile_upb_protos(ctx, proto_info, proto_sources, ext): def _compile_upb_protos(ctx, proto_info, proto_sources, ext):
@ -352,11 +379,14 @@ def _upb_proto_rule_impl(ctx):
def _upb_proto_aspect_impl(target, ctx): def _upb_proto_aspect_impl(target, ctx):
proto_info = target[ProtoInfo] proto_info = target[ProtoInfo]
files = _compile_upb_protos(ctx, proto_info, proto_info.direct_sources, ctx.attr._ext) files = _compile_upb_protos(ctx, proto_info, proto_info.direct_sources, ctx.attr._ext)
deps = ctx.rule.attr.deps + [ctx.attr._upb]
dep_ccinfos = [dep[CcInfo] for dep in deps if CcInfo in dep]
cc_info = cc_library_func( cc_info = cc_library_func(
ctx = ctx, ctx = ctx,
name = ctx.rule.attr.name,
hdrs = files.hdrs, hdrs = files.hdrs,
srcs = files.srcs, srcs = files.srcs,
deps = ctx.rule.attr.deps + [ctx.attr._upb], dep_ccinfos = dep_ccinfos,
) )
return [cc_info] return [cc_info]

@ -4,7 +4,7 @@ package(
) )
cc_binary( cc_binary(
name = "ragel", name = "ragelc",
srcs = [ srcs = [
"ragel/rubycodegen.cpp", "ragel/rubycodegen.cpp",
"ragel/goipgoto.h", "ragel/goipgoto.h",

@ -0,0 +1,16 @@
# A hacky way to work around the fact that native.bazel_version is only
# available from WORKSPACE macros, not BUILD macros or rules.
#
# Hopefully we can remove this if/when this is fixed:
# https://github.com/bazelbuild/bazel/issues/8305
def _impl(repository_ctx):
s = "bazel_version = \"" + native.bazel_version + "\""
repository_ctx.file("bazel_version.bzl", s)
repository_ctx.file("BUILD", "")
bazel_version_repository = repository_rule(
implementation=_impl,
local=True,
)

@ -43,8 +43,8 @@ class BuildFileFunctions(object):
for file in files: for file in files:
if os.path.isfile(file): if os.path.isfile(file):
found_files.append(file) found_files.append(file)
elif os.path.isfile("generated/" + file): elif os.path.isfile("generated_for_cmake/" + file):
found_files.append("generated/" + file) found_files.append("generated_for_cmake/" + file)
else: else:
print("Warning: no such file: " + file) print("Warning: no such file: " + file)
@ -175,6 +175,9 @@ class WorkspaceFileFunctions(object):
def git_repository(self, **kwargs): def git_repository(self, **kwargs):
pass pass
def bazel_version_repository(self, **kwargs):
pass
class Converter(object): class Converter(object):
def __init__(self): def __init__(self):

Loading…
Cancel
Save