|  | 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 | 
|  | ]), | 
|  | tags = ["manual"], | 
|  | tools = ["//:protoc"], | 
|  | ) | 
|  |  | 
|  | 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__"], | 
|  | ) |