Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
6.9 KiB
239 lines
6.9 KiB
load("@rules_cc//cc:defs.bzl", "objc_library") |
|
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") |
|
load("@upb//cmake:build_defs.bzl", "staleness_test") |
|
load("//conformance:defs.bzl", "conformance_test") |
|
load(":defs.bzl", "objc_proto_camel_case_name") |
|
|
|
# The WKTs have to be checked in to support the CocoaPods and Xcode builds. This |
|
# generule and test ensure the source are current. |
|
# |
|
# TODO: Improve the bazel build so it uses these generated headers so it is |
|
# always current, and only the builds that can't easily build protoc and |
|
# generate the files rely on the checked in ones. |
|
|
|
_WELL_KNOWN_TYPES = [ |
|
"any", |
|
"api", |
|
"duration", |
|
"empty", |
|
"field_mask", |
|
"source_context", |
|
"struct", |
|
"timestamp", |
|
"type", |
|
"wrappers", |
|
] |
|
|
|
_OBJC_WKT_NAMES = [objc_proto_camel_case_name(x) for x in _WELL_KNOWN_TYPES] |
|
|
|
_OBJC_EXTS = [ |
|
".pbobjc.h", |
|
".pbobjc.m", |
|
] |
|
|
|
genrule( |
|
name = "gen_wkt_sources", |
|
srcs = ["//src/google/protobuf:well_known_type_protos"], |
|
outs = ["wkt/GPB" + wkt + ext for wkt in _OBJC_WKT_NAMES for ext in _OBJC_EXTS], |
|
cmd = " && ".join([ |
|
"$(execpath //:protoc) --objc_out=$(RULEDIR)/wkt --proto_path=src $(SRCS)", |
|
] + [ |
|
"mv $(RULEDIR)/wkt/google/protobuf/" + wkt + ext + " $(RULEDIR)/wkt/GPB" + wkt + ext |
|
for wkt in _OBJC_WKT_NAMES |
|
for ext in _OBJC_EXTS |
|
]), |
|
exec_tools = ["//:protoc"], |
|
tags = ["manual"], |
|
) |
|
|
|
staleness_test( |
|
name = "well_known_types_staleness_test", |
|
outs = ["GPB" + wkt + ext for wkt in _OBJC_WKT_NAMES for ext in _OBJC_EXTS], |
|
generated_pattern = "wkt/%s", |
|
tags = ["manual"], |
|
) |
|
|
|
################################################################################ |
|
# Objective-C Runtime Library |
|
################################################################################ |
|
|
|
objc_library( |
|
name = "objectivec", |
|
hdrs = [ |
|
"GPBAny.pbobjc.h", |
|
"GPBApi.pbobjc.h", |
|
"GPBDuration.pbobjc.h", |
|
"GPBEmpty.pbobjc.h", |
|
"GPBFieldMask.pbobjc.h", |
|
"GPBSourceContext.pbobjc.h", |
|
"GPBStruct.pbobjc.h", |
|
"GPBTimestamp.pbobjc.h", |
|
"GPBType.pbobjc.h", |
|
"GPBWrappers.pbobjc.h", |
|
"GPBArray.h", |
|
"GPBBootstrap.h", |
|
"GPBCodedInputStream.h", |
|
"GPBCodedOutputStream.h", |
|
"GPBDescriptor.h", |
|
"GPBDictionary.h", |
|
"GPBExtensionInternals.h", |
|
"GPBExtensionRegistry.h", |
|
"GPBMessage.h", |
|
"GPBProtocolBuffers.h", |
|
"GPBProtocolBuffers_RuntimeSupport.h", |
|
"GPBRootObject.h", |
|
"GPBRuntimeTypes.h", |
|
"GPBUnknownField.h", |
|
"GPBUnknownFieldSet.h", |
|
"GPBUtilities.h", |
|
"GPBWellKnownTypes.h", |
|
"GPBWireFormat.h", |
|
"google/protobuf/Any.pbobjc.h", |
|
"google/protobuf/Api.pbobjc.h", |
|
"google/protobuf/Duration.pbobjc.h", |
|
"google/protobuf/Empty.pbobjc.h", |
|
"google/protobuf/FieldMask.pbobjc.h", |
|
"google/protobuf/SourceContext.pbobjc.h", |
|
"google/protobuf/Struct.pbobjc.h", |
|
"google/protobuf/Timestamp.pbobjc.h", |
|
"google/protobuf/Type.pbobjc.h", |
|
"google/protobuf/Wrappers.pbobjc.h", |
|
# Package private headers, but exposed because the generated sources |
|
# need to use them. |
|
"GPBArray_PackagePrivate.h", |
|
"GPBCodedInputStream_PackagePrivate.h", |
|
"GPBCodedOutputStream_PackagePrivate.h", |
|
"GPBDescriptor_PackagePrivate.h", |
|
"GPBDictionary_PackagePrivate.h", |
|
"GPBMessage_PackagePrivate.h", |
|
"GPBRootObject_PackagePrivate.h", |
|
"GPBUnknownFieldSet_PackagePrivate.h", |
|
"GPBUnknownField_PackagePrivate.h", |
|
"GPBUtilities_PackagePrivate.h", |
|
], |
|
copts = [ |
|
"-Wno-vla", |
|
], |
|
includes = [ |
|
".", |
|
], |
|
non_arc_srcs = [ |
|
"GPBAny.pbobjc.m", |
|
"GPBApi.pbobjc.m", |
|
"GPBArray.m", |
|
"GPBCodedInputStream.m", |
|
"GPBCodedOutputStream.m", |
|
"GPBDescriptor.m", |
|
"GPBDictionary.m", |
|
"GPBDuration.pbobjc.m", |
|
"GPBEmpty.pbobjc.m", |
|
"GPBExtensionInternals.m", |
|
"GPBExtensionRegistry.m", |
|
"GPBFieldMask.pbobjc.m", |
|
"GPBMessage.m", |
|
"GPBRootObject.m", |
|
"GPBSourceContext.pbobjc.m", |
|
"GPBStruct.pbobjc.m", |
|
"GPBTimestamp.pbobjc.m", |
|
"GPBType.pbobjc.m", |
|
"GPBUnknownField.m", |
|
"GPBUnknownFieldSet.m", |
|
"GPBUtilities.m", |
|
"GPBWellKnownTypes.m", |
|
"GPBWireFormat.m", |
|
"GPBWrappers.pbobjc.m", |
|
], |
|
target_compatible_with = select({ |
|
"@platforms//os:macos": [], |
|
"@platforms//os:ios": [], |
|
"@platforms//os:tvos": [], |
|
"@platforms//os:watchos": [], |
|
"//conditions:default": ["@platforms//:incompatible"], |
|
}), |
|
visibility = ["//visibility:public"], |
|
) |
|
|
|
################################################################################ |
|
# Tests |
|
################################################################################ |
|
|
|
conformance_test( |
|
name = "conformance_test", |
|
failure_list = "//conformance:failure_list_objc.txt", |
|
target_compatible_with = ["@platforms//os:macos"], |
|
testee = "//conformance:conformance_objc", |
|
) |
|
|
|
# ------------------------------------------------------------------- |
|
# Current Version Check between Generator and Runtime Sources |
|
sh_test( |
|
name = "check_version_stamps", |
|
size = "small", |
|
srcs = ["DevTools/check_version_stamps.sh"], |
|
data = [ |
|
"GPBBootstrap.h", |
|
"//src/google/protobuf/compiler/objectivec:file.cc", |
|
], |
|
) |
|
|
|
# ------------------------------------------------------------------- |
|
# Validation of pddm expansion. |
|
|
|
py_binary( |
|
name = "pddm", |
|
srcs = ["DevTools/pddm.py"], |
|
) |
|
|
|
py_test( |
|
name = "pddm_tests", |
|
size = "small", |
|
srcs = [ |
|
"DevTools/pddm.py", |
|
"DevTools/pddm_tests.py", |
|
], |
|
) |
|
|
|
sh_test( |
|
name = "sources_pddm_expansion_test", |
|
size = "small", |
|
srcs = ["DevTools/sources_pddm_expansion_test.sh"], |
|
data = [":pddm"] + glob([ |
|
"**/*.h", |
|
"**/*.m", |
|
"**/*.pddm", |
|
]), |
|
) |
|
|
|
################################################################################ |
|
# Distribution files |
|
################################################################################ |
|
|
|
pkg_files( |
|
name = "dist_files", |
|
srcs = glob([ |
|
"*.h", |
|
"*.m", |
|
"**/*.h", |
|
"**/*.m", |
|
"**/*.mm", |
|
"**/*.swift", |
|
"DevTools/*.sh", |
|
"DevTools/*.py", |
|
"ProtocolBuffers_iOS.xcodeproj/**/*", |
|
"ProtocolBuffers_OSX.xcodeproj/**/*", |
|
"ProtocolBuffers_tvOS.xcodeproj/**/*", |
|
"Tests/*.pddm", |
|
"Tests/*.txt", |
|
"Tests/*.plist", |
|
"Tests/*.proto", |
|
]) + [ |
|
".clang-format", |
|
"BUILD.bazel", |
|
"README.md", |
|
"Tests/golden_message", |
|
"Tests/golden_packed_fields_message", |
|
"generate_well_known_types.sh", |
|
], |
|
strip_prefix = strip_prefix.from_root(""), |
|
visibility = ["//pkg:__pkg__"], |
|
)
|
|
|