Internal change
PiperOrigin-RevId: 508766449
This commit is contained in:
		
							parent
							
								
									09ad961421
								
							
						
					
					
						commit
						e719d2d423
					
				| 
						 | 
				
			
			@ -3,11 +3,18 @@
 | 
			
		|||
 | 
			
		||||
""".bzl file for mediapipe open source build configs."""
 | 
			
		||||
 | 
			
		||||
load("@com_google_protobuf//:protobuf.bzl", "cc_proto_library", "py_proto_library")
 | 
			
		||||
load(
 | 
			
		||||
    "//mediapipe/framework/tool:mediapipe_proto.bzl",
 | 
			
		||||
    _mediapipe_cc_proto_library = "mediapipe_cc_proto_library",
 | 
			
		||||
    _mediapipe_proto_library = "mediapipe_proto_library",
 | 
			
		||||
)
 | 
			
		||||
load("@npm//@bazel/typescript:index.bzl", "ts_project")
 | 
			
		||||
load("@rules_proto//proto:defs.bzl", "proto_library")
 | 
			
		||||
load("@rules_proto_grpc//js:defs.bzl", "js_proto_library")
 | 
			
		||||
load("//mediapipe/framework/tool:mediapipe_graph.bzl", "mediapipe_options_library")
 | 
			
		||||
 | 
			
		||||
# TODO: enable def_rewrite once alias proto sources are generated.
 | 
			
		||||
def mediapipe_proto_library(def_rewrite = False, **kwargs):
 | 
			
		||||
    _mediapipe_proto_library(def_rewrite = def_rewrite, **kwargs)
 | 
			
		||||
 | 
			
		||||
mediapipe_cc_proto_library = _mediapipe_cc_proto_library
 | 
			
		||||
 | 
			
		||||
def provided_args(**kwargs):
 | 
			
		||||
    """Returns the keyword arguments omitting None arguments."""
 | 
			
		||||
| 
						 | 
				
			
			@ -17,193 +24,6 @@ def replace_suffix(string, old, new):
 | 
			
		|||
    """Returns a string with an old suffix replaced by a new suffix."""
 | 
			
		||||
    return string.endswith(old) and string[:-len(old)] + new or string
 | 
			
		||||
 | 
			
		||||
def replace_deps(deps, old, new, drop_google_protobuf = True):
 | 
			
		||||
    """Returns deps with an old suffix replaced by a new suffix.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      deps: the specified dep targets.
 | 
			
		||||
      old: the suffix to remove.
 | 
			
		||||
      new: the suffix to insert.
 | 
			
		||||
      drop_google_protobuf: if true, omit google/protobuf deps.
 | 
			
		||||
    Returns:
 | 
			
		||||
      the modified dep targets.
 | 
			
		||||
    """
 | 
			
		||||
    if drop_google_protobuf:
 | 
			
		||||
        deps = [dep for dep in deps if not dep.startswith("@com_google_protobuf//")]
 | 
			
		||||
    deps = [replace_suffix(dep, "any_proto", "cc_wkt_protos") for dep in deps]
 | 
			
		||||
    deps = [replace_suffix(dep, old, new) for dep in deps]
 | 
			
		||||
    return deps
 | 
			
		||||
 | 
			
		||||
# TODO: load this macro from a common helper file.
 | 
			
		||||
def mediapipe_proto_library(
 | 
			
		||||
        name,
 | 
			
		||||
        srcs,
 | 
			
		||||
        deps = [],
 | 
			
		||||
        exports = None,
 | 
			
		||||
        visibility = None,
 | 
			
		||||
        testonly = None,
 | 
			
		||||
        compatible_with = None,
 | 
			
		||||
        def_proto = True,
 | 
			
		||||
        def_cc_proto = True,
 | 
			
		||||
        def_py_proto = True,
 | 
			
		||||
        def_java_lite_proto = True,
 | 
			
		||||
        def_portable_proto = True,
 | 
			
		||||
        def_objc_proto = True,
 | 
			
		||||
        def_java_proto = True,
 | 
			
		||||
        def_jspb_proto = True,
 | 
			
		||||
        def_options_lib = True,
 | 
			
		||||
        portable_deps = None):
 | 
			
		||||
    """Defines the proto_library targets needed for all mediapipe platforms.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      name: the new proto_library target name.
 | 
			
		||||
      srcs: the ".proto" source files to compile.
 | 
			
		||||
      deps: the proto_library targets for all referenced protobufs.
 | 
			
		||||
      exports: deps that are published with "import public".
 | 
			
		||||
      portable_deps: the portable_proto_library targets for all referenced protobufs.
 | 
			
		||||
      visibility: visibility of this target.
 | 
			
		||||
      testonly: true means the proto can be used for testing only.
 | 
			
		||||
      compatible_with: a list of environments the rule is compatible with.
 | 
			
		||||
      def_proto: define the proto_library target
 | 
			
		||||
      def_cc_proto: define the cc_proto_library target
 | 
			
		||||
      def_py_proto: define the py_proto_library target
 | 
			
		||||
      def_java_lite_proto: define the java_lite_proto_library target
 | 
			
		||||
      def_portable_proto: define the portable_proto_library target
 | 
			
		||||
      def_objc_proto: define the objc_proto_library target
 | 
			
		||||
      def_java_proto: define the java_proto_library target
 | 
			
		||||
      def_jspb_proto: define the jspb_proto_library target
 | 
			
		||||
      def_options_lib: define the mediapipe_options_library target
 | 
			
		||||
    """
 | 
			
		||||
    _ignore = [def_portable_proto, def_objc_proto, def_java_proto, portable_deps]  # buildifier: disable=unused-variable
 | 
			
		||||
 | 
			
		||||
    # The proto_library targets for the compiled ".proto" source files.
 | 
			
		||||
    proto_deps = [":" + name]
 | 
			
		||||
 | 
			
		||||
    if def_proto:
 | 
			
		||||
        native.proto_library(**provided_args(
 | 
			
		||||
            name = name,
 | 
			
		||||
            srcs = srcs,
 | 
			
		||||
            deps = deps,
 | 
			
		||||
            exports = exports,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_cc_proto:
 | 
			
		||||
        cc_deps = replace_deps(deps, "_proto", "_cc_proto", False)
 | 
			
		||||
        mediapipe_cc_proto_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_cc_proto"),
 | 
			
		||||
            srcs = srcs,
 | 
			
		||||
            deps = proto_deps,
 | 
			
		||||
            cc_deps = cc_deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_py_proto:
 | 
			
		||||
        py_deps = replace_deps(deps, "_proto", "_py_pb2")
 | 
			
		||||
        mediapipe_py_proto_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_py_pb2"),
 | 
			
		||||
            srcs = srcs,
 | 
			
		||||
            proto_deps = proto_deps,
 | 
			
		||||
            py_proto_deps = py_deps,
 | 
			
		||||
            api_version = 2,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_java_lite_proto:
 | 
			
		||||
        native.java_lite_proto_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_java_proto_lite"),
 | 
			
		||||
            deps = proto_deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_jspb_proto:
 | 
			
		||||
        js_deps = replace_deps(deps, "_proto", "_jspb_proto", False)
 | 
			
		||||
        proto_library(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_lib_proto"),
 | 
			
		||||
            srcs = srcs,
 | 
			
		||||
            deps = deps,
 | 
			
		||||
        )
 | 
			
		||||
        js_proto_library(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_jspb_proto"),
 | 
			
		||||
            protos = [replace_suffix(name, "_proto", "_lib_proto")],
 | 
			
		||||
            output_mode = "NO_PREFIX_FLAT",
 | 
			
		||||
            # Need to specify this to work around bug in js_proto_library()
 | 
			
		||||
            # https://github.com/bazelbuild/rules_nodejs/issues/3503
 | 
			
		||||
            legacy_path = "unused",
 | 
			
		||||
            deps = js_deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    if def_options_lib:
 | 
			
		||||
        cc_deps = replace_deps(deps, "_proto", "_cc_proto")
 | 
			
		||||
        mediapipe_options_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_options_lib"),
 | 
			
		||||
            proto_lib = name,
 | 
			
		||||
            deps = cc_deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
def mediapipe_py_proto_library(
 | 
			
		||||
        name,
 | 
			
		||||
        srcs,
 | 
			
		||||
        visibility = None,
 | 
			
		||||
        py_proto_deps = [],
 | 
			
		||||
        proto_deps = None,
 | 
			
		||||
        api_version = None,
 | 
			
		||||
        testonly = 0):
 | 
			
		||||
    """Generate py_proto_library for mediapipe open source version.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      name: the name of the py_proto_library.
 | 
			
		||||
      api_version: api version for bazel use only.
 | 
			
		||||
      srcs: the .proto files of the py_proto_library for Bazel use.
 | 
			
		||||
      visibility: visibility of this target.
 | 
			
		||||
      py_proto_deps: a list of dependency labels for Bazel use; must be py_proto_library.
 | 
			
		||||
      proto_deps: a list of dependency labels for bazel use.
 | 
			
		||||
      testonly: test only proto or not.
 | 
			
		||||
    """
 | 
			
		||||
    _ignore = [api_version, proto_deps]
 | 
			
		||||
    py_proto_library(**provided_args(
 | 
			
		||||
        name = name,
 | 
			
		||||
        srcs = srcs,
 | 
			
		||||
        visibility = visibility,
 | 
			
		||||
        default_runtime = "@com_google_protobuf//:protobuf_python",
 | 
			
		||||
        protoc = "@com_google_protobuf//:protoc",
 | 
			
		||||
        deps = py_proto_deps + ["@com_google_protobuf//:protobuf_python"],
 | 
			
		||||
        testonly = testonly,
 | 
			
		||||
    ))
 | 
			
		||||
 | 
			
		||||
def mediapipe_cc_proto_library(name, srcs, visibility = None, deps = [], cc_deps = [], testonly = 0):
 | 
			
		||||
    """Generate cc_proto_library for mediapipe open source version.
 | 
			
		||||
 | 
			
		||||
      Args:
 | 
			
		||||
        name: the name of the cc_proto_library.
 | 
			
		||||
        srcs: the .proto files of the cc_proto_library for Bazel use.
 | 
			
		||||
        visibility: visibility of this target.
 | 
			
		||||
        deps: a list of dependency labels for Bazel use; must be cc_proto_library.
 | 
			
		||||
        testonly: test only proto or not.
 | 
			
		||||
    """
 | 
			
		||||
    _ignore = [deps]
 | 
			
		||||
    cc_proto_library(**provided_args(
 | 
			
		||||
        name = name,
 | 
			
		||||
        srcs = srcs,
 | 
			
		||||
        visibility = visibility,
 | 
			
		||||
        deps = cc_deps,
 | 
			
		||||
        testonly = testonly,
 | 
			
		||||
        cc_libs = ["@com_google_protobuf//:protobuf"],
 | 
			
		||||
        protoc = "@com_google_protobuf//:protoc",
 | 
			
		||||
        default_runtime = "@com_google_protobuf//:protobuf",
 | 
			
		||||
        alwayslink = 1,
 | 
			
		||||
    ))
 | 
			
		||||
 | 
			
		||||
def mediapipe_ts_library(
 | 
			
		||||
        name,
 | 
			
		||||
        srcs,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										412
									
								
								mediapipe/framework/tool/mediapipe_proto.bzl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										412
									
								
								mediapipe/framework/tool/mediapipe_proto.bzl
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,412 @@
 | 
			
		|||
"""Provides BUILD macros for MediaPipe proto-buffers.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
load("//mediapipe/framework/tool:mediapipe_graph.bzl", "mediapipe_options_library")
 | 
			
		||||
load("@com_google_protobuf//:protobuf.bzl", "cc_proto_library", "py_proto_library")
 | 
			
		||||
load("@rules_proto//proto:defs.bzl", "proto_library")
 | 
			
		||||
load("@rules_proto_grpc//js:defs.bzl", "js_proto_library")
 | 
			
		||||
 | 
			
		||||
def provided_args(**kwargs):
 | 
			
		||||
    """Returns the keyword arguments omitting None arguments."""
 | 
			
		||||
    return {k: v for k, v in kwargs.items() if v != None}
 | 
			
		||||
 | 
			
		||||
def replace_suffix(string, old, new):
 | 
			
		||||
    """Returns a string with an old suffix replaced by a new suffix."""
 | 
			
		||||
    return string.endswith(old) and string[:-len(old)] + new or string
 | 
			
		||||
 | 
			
		||||
def replace_deps(deps, old, new, drop_google_protobuf = True):
 | 
			
		||||
    """Returns deps with an old suffix replaced by a new suffix.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      deps: the specified dep targets.
 | 
			
		||||
      old: the suffix to remove.
 | 
			
		||||
      new: the suffix to insert.
 | 
			
		||||
      drop_google_protobuf: if true, omit google/protobuf deps.
 | 
			
		||||
    Returns:
 | 
			
		||||
      the modified dep targets.
 | 
			
		||||
    """
 | 
			
		||||
    if deps == None:
 | 
			
		||||
        return deps
 | 
			
		||||
 | 
			
		||||
    if drop_google_protobuf:
 | 
			
		||||
        deps = [dep for dep in deps if not dep.startswith("@com_google_protobuf//")]
 | 
			
		||||
    deps = [replace_suffix(dep, "any_proto", "cc_wkt_protos") for dep in deps]
 | 
			
		||||
 | 
			
		||||
    deps = [replace_suffix(dep, old, new) for dep in deps]
 | 
			
		||||
    return deps
 | 
			
		||||
 | 
			
		||||
def mediapipe_proto_library_impl(
 | 
			
		||||
        name,
 | 
			
		||||
        srcs,
 | 
			
		||||
        deps = [],
 | 
			
		||||
        exports = None,
 | 
			
		||||
        visibility = None,
 | 
			
		||||
        testonly = None,
 | 
			
		||||
        compatible_with = None,
 | 
			
		||||
        alwayslink = None,
 | 
			
		||||
        def_proto = True,
 | 
			
		||||
        def_cc_proto = True,
 | 
			
		||||
        def_py_proto = True,
 | 
			
		||||
        def_java_lite_proto = True,
 | 
			
		||||
        def_objc_proto = True,
 | 
			
		||||
        def_java_proto = True,
 | 
			
		||||
        def_jspb_proto = True,
 | 
			
		||||
        def_go_proto = True,
 | 
			
		||||
        def_options_lib = True):
 | 
			
		||||
    """Defines the proto_library targets needed for all mediapipe platforms.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      name: the new proto_library target name.
 | 
			
		||||
      srcs: the ".proto" source files to compile.
 | 
			
		||||
      deps: the proto_library targets for all referenced protobufs.
 | 
			
		||||
      exports: deps that are published with "import public".
 | 
			
		||||
      visibility: visibility of this target.
 | 
			
		||||
      testonly: true means the proto can be used for testing only.
 | 
			
		||||
      compatible_with: a list of environments the rule is compatible with.
 | 
			
		||||
      alwayslink: any binary depending on the generated C++ library will link all object files,
 | 
			
		||||
          useful if the protocol buffer is looked up dynamically.
 | 
			
		||||
      def_proto: define the proto_library target
 | 
			
		||||
      def_cc_proto: define the cc_proto_library target
 | 
			
		||||
      def_py_proto: define the py_proto_library target
 | 
			
		||||
      def_java_lite_proto: define the java_lite_proto_library target
 | 
			
		||||
      def_objc_proto: define the objc_proto_library target
 | 
			
		||||
      def_java_proto: define the java_proto_library target
 | 
			
		||||
      def_jspb_proto: define the jspb_proto_library target
 | 
			
		||||
      def_go_proto: define the go_proto_library target
 | 
			
		||||
      def_options_lib: define the mediapipe_options_library target
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    # The proto_library targets for the compiled ".proto" source files.
 | 
			
		||||
    proto_deps = [":" + name]
 | 
			
		||||
 | 
			
		||||
    if def_proto:
 | 
			
		||||
        native.proto_library(**provided_args(
 | 
			
		||||
            name = name,
 | 
			
		||||
            srcs = srcs,
 | 
			
		||||
            deps = deps,
 | 
			
		||||
            exports = exports,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
            alwayslink = alwayslink,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_cc_proto:
 | 
			
		||||
        cc_deps = replace_deps(deps, "_proto", "_cc_proto", False)
 | 
			
		||||
        mediapipe_cc_proto_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_cc_proto"),
 | 
			
		||||
            srcs = srcs,
 | 
			
		||||
            deps = proto_deps,
 | 
			
		||||
            cc_deps = cc_deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_py_proto:
 | 
			
		||||
        py_deps = replace_deps(deps, "_proto", "_py_pb2")
 | 
			
		||||
        mediapipe_py_proto_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_py_pb2"),
 | 
			
		||||
            srcs = srcs,
 | 
			
		||||
            proto_deps = proto_deps,
 | 
			
		||||
            py_proto_deps = py_deps,
 | 
			
		||||
            api_version = 2,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_java_lite_proto:
 | 
			
		||||
        native.java_lite_proto_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_java_proto_lite"),
 | 
			
		||||
            deps = proto_deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_java_proto:
 | 
			
		||||
        native.java_proto_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_java_proto"),
 | 
			
		||||
            deps = proto_deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_jspb_proto:
 | 
			
		||||
        mediapipe_js_proto_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_jspb_proto"),
 | 
			
		||||
            srcs = srcs,
 | 
			
		||||
            deps = proto_deps,
 | 
			
		||||
            lib_proto_deps = deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
    if def_options_lib:
 | 
			
		||||
        cc_deps = replace_deps(deps, "_proto", "_cc_proto")
 | 
			
		||||
        mediapipe_options_library(**provided_args(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_options_lib"),
 | 
			
		||||
            proto_lib = name,
 | 
			
		||||
            deps = cc_deps,
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
# After rewrite, all intra-package references refer to "mediapipe",
 | 
			
		||||
# and all imports refer to rewritten proto source files.
 | 
			
		||||
def rewrite_mediapipe_proto(name, rewrite_proto, source_proto, **kwargs):
 | 
			
		||||
    """Generates a proto source file with package changed to mediapipe.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      name: the new target name.
 | 
			
		||||
      rewrite_proto: the new ".proto" source file name.
 | 
			
		||||
      source_proto: the old ".proto" source file name.
 | 
			
		||||
      **kwargs: the remaining arguments.
 | 
			
		||||
    """
 | 
			
		||||
    split_path = r'"\(.*\)/\([^/]*\).proto"'
 | 
			
		||||
    rewrite_package = r"s|package mediapipe;|package mediapipe;|"
 | 
			
		||||
    rewrite_import = r"s|import " + split_path + r'|import "\1/protobuf/\2.proto"|'
 | 
			
		||||
    rewrite_import_public = r"s|import public " + split_path + r'|import public "\1/protobuf/\2.proto"|'
 | 
			
		||||
    rewrite_import_any = r's|import "\(.*\)/protobuf/any.proto"|import "\1/any.proto"|'
 | 
			
		||||
    rewrite_import_status = r's|import "\(.*\)/protobuf/status.proto"|import "\1/status.proto"|'
 | 
			
		||||
    rewrite_ref = r"s|mediapipe\.|mediapipe\.|"
 | 
			
		||||
    rewrite_objc = r's|objc_class_prefix = "MediaPipe"|objc_class_prefix = "MPP"|'
 | 
			
		||||
 | 
			
		||||
    native.genrule(
 | 
			
		||||
        name = name,
 | 
			
		||||
        outs = [rewrite_proto],
 | 
			
		||||
        srcs = [source_proto],
 | 
			
		||||
        cmd = "for OUT in $(OUTS); do \n" +
 | 
			
		||||
              "  cp $(location " + source_proto + ") $$OUT \n" +
 | 
			
		||||
              "  sed -i -e '" + rewrite_package + "' $$OUT \n" +
 | 
			
		||||
              "  sed -i -e '" + rewrite_import + "' $$OUT \n" +
 | 
			
		||||
              "  sed -i -e '" + rewrite_import_public + "' $$OUT \n" +
 | 
			
		||||
              "  sed -i -e '" + rewrite_import_any + "' $$OUT \n" +
 | 
			
		||||
              "  sed -i -e '" + rewrite_import_status + "' $$OUT \n" +
 | 
			
		||||
              "  sed -i -e '" + rewrite_ref + "' $$OUT \n" +
 | 
			
		||||
              "  sed -i -e '" + rewrite_objc + "' $$OUT \n" +
 | 
			
		||||
              "done",
 | 
			
		||||
        **kwargs
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
# Returns the path to a rewritten protobuf file or label.
 | 
			
		||||
def mediapipe_proto_path(path):
 | 
			
		||||
    if path.startswith("@com_google_protobuf//"):
 | 
			
		||||
        return path
 | 
			
		||||
    i = max(path.rfind(":"), path.rfind("/")) + 1
 | 
			
		||||
    return path[0:i] + "protobuf/" + path[i:]
 | 
			
		||||
 | 
			
		||||
# Returns a list of paths to rewritten protobuf files or labels.
 | 
			
		||||
def mediapipe_proto_paths(paths):
 | 
			
		||||
    if paths == None:
 | 
			
		||||
        return paths
 | 
			
		||||
    return [mediapipe_proto_path(path) for path in paths]
 | 
			
		||||
 | 
			
		||||
def mediapipe_proto_library(
 | 
			
		||||
        name,
 | 
			
		||||
        srcs,
 | 
			
		||||
        deps = [],
 | 
			
		||||
        exports = None,
 | 
			
		||||
        visibility = None,
 | 
			
		||||
        testonly = None,
 | 
			
		||||
        compatible_with = None,
 | 
			
		||||
        alwayslink = None,
 | 
			
		||||
        def_proto = True,
 | 
			
		||||
        def_cc_proto = True,
 | 
			
		||||
        def_py_proto = True,
 | 
			
		||||
        def_java_lite_proto = True,
 | 
			
		||||
        def_portable_proto = True,  # @unused
 | 
			
		||||
        def_objc_proto = True,
 | 
			
		||||
        def_java_proto = True,
 | 
			
		||||
        def_jspb_proto = True,
 | 
			
		||||
        def_go_proto = True,
 | 
			
		||||
        def_options_lib = True,
 | 
			
		||||
        def_rewrite = True,
 | 
			
		||||
        portable_deps = None):  # @unused
 | 
			
		||||
    """Defines the proto_library targets needed for all mediapipe platforms.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      name: the new proto_library target name.
 | 
			
		||||
      srcs: the ".proto" source files to compile.
 | 
			
		||||
      deps: the proto_library targets for all referenced protobufs.
 | 
			
		||||
      exports: deps that are published with "import public".
 | 
			
		||||
      portable_deps: ignored since portable protos are gone.
 | 
			
		||||
      visibility: visibility of this target.
 | 
			
		||||
      testonly: true means the proto can be used for testing only.
 | 
			
		||||
      compatible_with: a list of environments the rule is compatible with.
 | 
			
		||||
      alwayslink: any binary depending on the generated C++ library will link all object files,
 | 
			
		||||
          useful if the protocol buffer is looked up dynamically.
 | 
			
		||||
      def_proto: define the proto_library target
 | 
			
		||||
      def_cc_proto: define the cc_proto_library target
 | 
			
		||||
      def_py_proto: define the py_proto_library target
 | 
			
		||||
      def_java_lite_proto: define the java_lite_proto_library target
 | 
			
		||||
      def_portable_proto: ignored since portable protos are gone
 | 
			
		||||
      def_objc_proto: define the objc_proto_library target
 | 
			
		||||
      def_java_proto: define the java_proto_library target
 | 
			
		||||
      def_jspb_proto: define the jspb_proto_library target
 | 
			
		||||
      def_go_proto: define the go_proto_library target
 | 
			
		||||
      def_options_lib: define the mediapipe_options_library target
 | 
			
		||||
      def_rewrite: define a sibbling mediapipe_proto_library with package "mediapipe"
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    mediapipe_proto_library_impl(
 | 
			
		||||
        name = name,
 | 
			
		||||
        srcs = srcs,
 | 
			
		||||
        deps = deps,
 | 
			
		||||
        exports = exports,
 | 
			
		||||
        visibility = visibility,
 | 
			
		||||
        testonly = testonly,
 | 
			
		||||
        compatible_with = compatible_with,
 | 
			
		||||
        alwayslink = alwayslink,
 | 
			
		||||
        def_proto = def_proto,
 | 
			
		||||
        def_cc_proto = def_cc_proto,
 | 
			
		||||
        def_py_proto = def_py_proto,
 | 
			
		||||
        def_java_lite_proto = def_java_lite_proto,
 | 
			
		||||
        def_objc_proto = def_objc_proto,
 | 
			
		||||
        def_java_proto = def_java_proto,
 | 
			
		||||
        def_jspb_proto = def_jspb_proto,
 | 
			
		||||
        def_go_proto = def_go_proto,
 | 
			
		||||
        def_options_lib = def_options_lib,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if def_rewrite:
 | 
			
		||||
        source_proto = replace_suffix(name, "_proto", ".proto")
 | 
			
		||||
        rewrite_proto = mediapipe_proto_path(source_proto)
 | 
			
		||||
        rewrite_mediapipe_proto(
 | 
			
		||||
            name = replace_suffix(name, "_proto", "_rewrite"),
 | 
			
		||||
            rewrite_proto = rewrite_proto,
 | 
			
		||||
            source_proto = source_proto,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
        )
 | 
			
		||||
        mediapipe_proto_library_impl(
 | 
			
		||||
            name = mediapipe_proto_path(name),
 | 
			
		||||
            srcs = [rewrite_proto],
 | 
			
		||||
            deps = mediapipe_proto_paths(deps),
 | 
			
		||||
            exports = mediapipe_proto_paths(exports),
 | 
			
		||||
            visibility = visibility,
 | 
			
		||||
            testonly = testonly,
 | 
			
		||||
            compatible_with = compatible_with,
 | 
			
		||||
            alwayslink = alwayslink,
 | 
			
		||||
            def_proto = def_proto,
 | 
			
		||||
            def_cc_proto = def_cc_proto,
 | 
			
		||||
            def_py_proto = def_py_proto,
 | 
			
		||||
            def_java_lite_proto = def_java_lite_proto,
 | 
			
		||||
            def_objc_proto = def_objc_proto,
 | 
			
		||||
            def_java_proto = def_java_proto,
 | 
			
		||||
            def_jspb_proto = def_jspb_proto,
 | 
			
		||||
            def_go_proto = def_go_proto,
 | 
			
		||||
            # A clone of mediapipe_options_library() will redefine some classes.
 | 
			
		||||
            def_options_lib = False,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
def mediapipe_py_proto_library_oss(
 | 
			
		||||
        name,
 | 
			
		||||
        srcs,
 | 
			
		||||
        visibility = None,
 | 
			
		||||
        py_proto_deps = [],
 | 
			
		||||
        proto_deps = None,
 | 
			
		||||
        api_version = None,
 | 
			
		||||
        testonly = 0):
 | 
			
		||||
    """Generate py_proto_library for mediapipe open source version.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      name: the name of the py_proto_library.
 | 
			
		||||
      api_version: api version for bazel use only.
 | 
			
		||||
      srcs: the .proto files of the py_proto_library for Bazel use.
 | 
			
		||||
      visibility: visibility of this target.
 | 
			
		||||
      py_proto_deps: a list of dependency labels for Bazel use; must be py_proto_library.
 | 
			
		||||
      proto_deps: a list of dependency labels for bazel use.
 | 
			
		||||
      testonly: test only proto or not.
 | 
			
		||||
    """
 | 
			
		||||
    _ignore = [api_version, proto_deps]
 | 
			
		||||
    py_proto_library(**provided_args(
 | 
			
		||||
        name = name,
 | 
			
		||||
        srcs = srcs,
 | 
			
		||||
        visibility = visibility,
 | 
			
		||||
        default_runtime = "@com_google_protobuf//:protobuf_python",
 | 
			
		||||
        protoc = "@com_google_protobuf//:protoc",
 | 
			
		||||
        deps = py_proto_deps + ["@com_google_protobuf//:protobuf_python"],
 | 
			
		||||
        testonly = testonly,
 | 
			
		||||
    ))
 | 
			
		||||
 | 
			
		||||
def mediapipe_cc_proto_library_oss(
 | 
			
		||||
        name,
 | 
			
		||||
        srcs,
 | 
			
		||||
        visibility = None,
 | 
			
		||||
        deps = [],
 | 
			
		||||
        cc_deps = [],
 | 
			
		||||
        testonly = 0):
 | 
			
		||||
    """Generate cc_proto_library for mediapipe open source version.
 | 
			
		||||
 | 
			
		||||
      Args:
 | 
			
		||||
        name: the name of the cc_proto_library.
 | 
			
		||||
        srcs: the .proto files of the cc_proto_library for Bazel use.
 | 
			
		||||
        visibility: visibility of this target.
 | 
			
		||||
        deps: a list of dependency labels for Bazel use; must be cc_proto_library.
 | 
			
		||||
        testonly: test only proto or not.
 | 
			
		||||
    """
 | 
			
		||||
    _ignore = [deps]
 | 
			
		||||
 | 
			
		||||
    cc_proto_library(**provided_args(
 | 
			
		||||
        name = name,
 | 
			
		||||
        srcs = srcs,
 | 
			
		||||
        visibility = visibility,
 | 
			
		||||
        deps = cc_deps,
 | 
			
		||||
        testonly = testonly,
 | 
			
		||||
        cc_libs = ["@com_google_protobuf//:protobuf"],
 | 
			
		||||
        protoc = "@com_google_protobuf//:protoc",
 | 
			
		||||
        default_runtime = "@com_google_protobuf//:protobuf",
 | 
			
		||||
        alwayslink = 1,
 | 
			
		||||
    ))
 | 
			
		||||
 | 
			
		||||
def mediapipe_js_proto_library_oss(
 | 
			
		||||
        name,
 | 
			
		||||
        srcs,
 | 
			
		||||
        deps,
 | 
			
		||||
        lib_proto_deps,
 | 
			
		||||
        visibility = None,
 | 
			
		||||
        testonly = 0,
 | 
			
		||||
        compatible_with = None):
 | 
			
		||||
    """Generate js_proto_library for mediapipe open source version.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
      name: the name of the js_proto_library.
 | 
			
		||||
      srcs: the .proto files of the js_proto_library for Bazel use.
 | 
			
		||||
      deps: a list of dependency labels for bazel use ; must be proto_library.
 | 
			
		||||
      lib_proto_deps: a list of "_proto" dependency labels.
 | 
			
		||||
      visibility: Visibility of this target.
 | 
			
		||||
      testonly: test only proto or not.
 | 
			
		||||
      compatible_with: a list of environments the rule is compatible with.
 | 
			
		||||
    """
 | 
			
		||||
    _ignore = [deps, testonly, compatible_with]
 | 
			
		||||
 | 
			
		||||
    js_deps = replace_deps(lib_proto_deps, "_proto", "_jspb_proto", False)
 | 
			
		||||
    proto_library(
 | 
			
		||||
        name = replace_suffix(name, "_jspb_proto", "_lib_proto"),
 | 
			
		||||
        srcs = srcs,
 | 
			
		||||
        deps = lib_proto_deps,
 | 
			
		||||
        visibility = visibility,
 | 
			
		||||
    )
 | 
			
		||||
    js_proto_library(
 | 
			
		||||
        name = name,
 | 
			
		||||
        protos = [replace_suffix(name, "_jspb_proto", "_lib_proto")],
 | 
			
		||||
        output_mode = "NO_PREFIX_FLAT",
 | 
			
		||||
        # Need to specify this to work around bug in js_proto_library()
 | 
			
		||||
        # https://github.com/bazelbuild/rules_nodejs/issues/3503
 | 
			
		||||
        legacy_path = "unused",
 | 
			
		||||
        deps = js_deps,
 | 
			
		||||
        visibility = visibility,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
def mediapipe_py_proto_library(**kwargs):
 | 
			
		||||
    mediapipe_py_proto_library_oss(**kwargs)
 | 
			
		||||
 | 
			
		||||
def mediapipe_cc_proto_library(**kwargs):
 | 
			
		||||
    mediapipe_cc_proto_library_oss(**kwargs)
 | 
			
		||||
 | 
			
		||||
def mediapipe_js_proto_library(**kwargs):
 | 
			
		||||
    mediapipe_js_proto_library_oss(**kwargs)
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user