| load("@build_bazel_rules_apple//apple:apple_binary.bzl", "apple_binary") |
| load("@rules_pkg//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 = [ |
| "//third_party/utf8_range", |
| "@rules_ruby//ruby/runtime:headers", |
| ], |
| 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 = [ |
| "//third_party/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 = "11.0", |
| 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 = "11.0", |
| 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"], |
| ) |