|
|
|
load("@build_bazel_rules_apple//apple:apple_binary.bzl", "apple_binary")
|
|
|
|
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
|
|
|
|
load("//upb/cmake:build_defs.bzl", "staleness_test")
|
|
|
|
|
|
|
|
package(default_visibility = ["//ruby:__subpackages__"])
|
|
|
|
|
|
|
|
PROTOBUF_C_SOURCES = [
|
|
|
|
"convert.c",
|
|
|
|
"convert.h",
|
|
|
|
"defs.c",
|
|
|
|
"defs.h",
|
|
|
|
"map.c",
|
|
|
|
"map.h",
|
|
|
|
"message.c",
|
|
|
|
"message.h",
|
|
|
|
"protobuf.c",
|
|
|
|
"protobuf.h",
|
|
|
|
"repeated_field.c",
|
|
|
|
"repeated_field.h",
|
|
|
|
"shared_convert.c",
|
|
|
|
"shared_convert.h",
|
|
|
|
"shared_message.c",
|
|
|
|
"shared_message.h",
|
|
|
|
"wrap_memcpy.c",
|
|
|
|
]
|
|
|
|
|
|
|
|
# We copy everything into a copy/ subdirectory so that we can use the
|
|
|
|
# up-to-date Bazel-generated amalgamation files without conflicting with the
|
|
|
|
# possibly stale checked-in amalgamations.
|
|
|
|
genrule(
|
|
|
|
name = "copy_sources",
|
|
|
|
srcs = PROTOBUF_C_SOURCES + [
|
|
|
|
"glue.c",
|
|
|
|
"//upb:gen_ruby_amalgamation",
|
|
|
|
],
|
|
|
|
outs = ["copy/%s" % src for src in PROTOBUF_C_SOURCES] + [
|
|
|
|
"copy/glue.c",
|
|
|
|
"copy/ruby-upb.h",
|
|
|
|
"copy/ruby-upb.c",
|
|
|
|
],
|
|
|
|
cmd = "cp $(SRCS) $(RULEDIR)/copy",
|
|
|
|
)
|
|
|
|
|
|
|
|
cc_library(
|
|
|
|
name = "protobuf_c",
|
|
|
|
srcs = ["copy/%s" % src for src in PROTOBUF_C_SOURCES] + [
|
|
|
|
"copy/ruby-upb.c",
|
|
|
|
"copy/ruby-upb.h",
|
|
|
|
],
|
|
|
|
linkstatic = True,
|
|
|
|
target_compatible_with = select({
|
|
|
|
"@rules_ruby//ruby/runtime:config_jruby": ["@platforms//:incompatible"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}),
|
|
|
|
deps = [
|
|
|
|
"@rules_ruby//ruby/runtime:headers",
|
|
|
|
"@utf8_range",
|
|
|
|
],
|
|
|
|
alwayslink = True,
|
|
|
|
)
|
|
|
|
|
|
|
|
# Needs to be compiled with UPB_BUILD_API in order to expose functions called
|
|
|
|
# via FFI directly by Ruby.
|
|
|
|
cc_library(
|
|
|
|
name = "upb_api",
|
|
|
|
srcs = [
|
|
|
|
"copy/ruby-upb.c",
|
|
|
|
],
|
|
|
|
hdrs = [
|
|
|
|
"copy/ruby-upb.h",
|
|
|
|
],
|
|
|
|
copts = ["-fvisibility=hidden"],
|
|
|
|
linkstatic = False,
|
|
|
|
local_defines = [
|
|
|
|
"UPB_BUILD_API",
|
|
|
|
],
|
|
|
|
target_compatible_with = select({
|
|
|
|
"//ruby:ffi_disabled": ["@platforms//:incompatible"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}),
|
|
|
|
deps = [
|
|
|
|
"@utf8_range",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
cc_library(
|
|
|
|
name = "protobuf_c_ffi",
|
|
|
|
srcs = ["copy/%s" % src for src in [
|
|
|
|
"glue.c",
|
|
|
|
"shared_convert.c",
|
|
|
|
"shared_convert.h",
|
|
|
|
"shared_message.c",
|
|
|
|
"shared_message.h",
|
|
|
|
]],
|
|
|
|
copts = [
|
|
|
|
"-std=gnu99",
|
|
|
|
"-O3",
|
|
|
|
"-Wall",
|
|
|
|
"-Wsign-compare",
|
|
|
|
"-Wno-declaration-after-statement",
|
|
|
|
],
|
|
|
|
linkstatic = True,
|
|
|
|
local_defines = [
|
|
|
|
"NDEBUG",
|
|
|
|
],
|
|
|
|
target_compatible_with = select({
|
|
|
|
"//ruby:ffi_disabled": ["@platforms//:incompatible"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}),
|
|
|
|
deps = [":upb_api"],
|
|
|
|
alwayslink = 1,
|
|
|
|
)
|
|
|
|
|
|
|
|
apple_binary(
|
|
|
|
name = "ffi_bundle",
|
|
|
|
binary_type = "loadable_bundle",
|
|
|
|
linkopts = [
|
|
|
|
"-undefined,dynamic_lookup",
|
|
|
|
"-multiply_defined,suppress",
|
|
|
|
],
|
|
|
|
minimum_os_version = "10.11",
|
|
|
|
platform_type = "macos",
|
|
|
|
tags = ["manual"],
|
|
|
|
deps = [
|
|
|
|
":protobuf_c_ffi",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
apple_binary(
|
|
|
|
name = "bundle",
|
|
|
|
binary_type = "loadable_bundle",
|
|
|
|
linkopts = [
|
|
|
|
"-undefined,dynamic_lookup",
|
|
|
|
"-multiply_defined,suppress",
|
|
|
|
],
|
|
|
|
minimum_os_version = "10.11",
|
|
|
|
platform_type = "macos",
|
|
|
|
tags = ["manual"],
|
|
|
|
deps = [
|
|
|
|
":protobuf_c",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
pkg_files(
|
|
|
|
name = "dist_files",
|
|
|
|
srcs = glob([
|
|
|
|
"*.h",
|
|
|
|
"*.c",
|
|
|
|
"*.rb",
|
|
|
|
"Rakefile",
|
|
|
|
]),
|
|
|
|
strip_prefix = strip_prefix.from_root(""),
|
|
|
|
visibility = ["//ruby:__pkg__"],
|
|
|
|
)
|
|
|
|
|
|
|
|
genrule(
|
|
|
|
name = "copy_ruby_amalgamation_h",
|
|
|
|
srcs = ["//upb:ruby-upb.h"],
|
|
|
|
outs = ["generated-in/ruby-upb.h"],
|
|
|
|
cmd = "cp $< $@",
|
|
|
|
)
|
|
|
|
|
|
|
|
genrule(
|
|
|
|
name = "copy_ruby_amalgamation_c",
|
|
|
|
srcs = ["//upb:ruby-upb.c"],
|
|
|
|
outs = ["generated-in/ruby-upb.c"],
|
|
|
|
cmd = "cp $< $@",
|
|
|
|
)
|
|
|
|
|
|
|
|
staleness_test(
|
|
|
|
name = "test_amalgamation_staleness",
|
|
|
|
outs = [
|
|
|
|
"ruby-upb.c",
|
|
|
|
"ruby-upb.h",
|
|
|
|
],
|
|
|
|
generated_pattern = "generated-in/%s",
|
|
|
|
tags = ["manual"],
|
|
|
|
)
|