| # Copyright (c) 2009-2022, Google LLC |
| # All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are met: |
| # * Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # * Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # * Neither the name of Google LLC nor the |
| # names of its contributors may be used to endorse or promote products |
| # derived from this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| # DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY |
| # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| load("//bazel:py_proto_library.bzl", "py_proto_library") |
| load(":dist.bzl", "py_dist", "py_dist_module") |
| load("@bazel_skylib//lib:selects.bzl", "selects") |
| load("@com_google_protobuf//:protobuf_version.bzl", "PROTOBUF_PYTHON_VERSION") |
| load("@rules_python//python:packaging.bzl", "py_wheel") |
| load("@system_python//:version.bzl", "SYSTEM_PYTHON_VERSION") |
| |
| licenses(["notice"]) |
| |
| py_dist_module( |
| name = "message_mod", |
| extension = "//python:_message_binary", |
| module_name = "google._upb._message", |
| ) |
| |
| py_proto_library( |
| name = "well_known_proto_py_pb2", |
| deps = [ |
| "@com_google_protobuf//:any_proto", |
| "@com_google_protobuf//:api_proto", |
| "@com_google_protobuf//:compiler_plugin_proto", |
| "@com_google_protobuf//:descriptor_proto", |
| "@com_google_protobuf//:duration_proto", |
| "@com_google_protobuf//:empty_proto", |
| "@com_google_protobuf//:field_mask_proto", |
| "@com_google_protobuf//:source_context_proto", |
| "@com_google_protobuf//:struct_proto", |
| "@com_google_protobuf//:timestamp_proto", |
| "@com_google_protobuf//:type_proto", |
| "@com_google_protobuf//:wrappers_proto", |
| ], |
| ) |
| |
| config_setting( |
| name = "aarch64_cpu", |
| values = {"cpu": "linux-aarch_64"}, |
| ) |
| |
| config_setting( |
| name = "x86_64_cpu", |
| values = {"cpu": "linux-x86_64"}, |
| ) |
| |
| config_setting( |
| name = "osx-x86_64_cpu", |
| values = {"cpu": "osx-x86_64"}, |
| ) |
| |
| config_setting( |
| name = "osx-aarch64_cpu", |
| values = {"cpu": "osx-aarch_64"}, |
| ) |
| |
| config_setting( |
| name = "osx-universal2_cpu", |
| values = {"cpu": "osx-universal2"}, |
| ) |
| |
| config_setting( |
| name = "win32_cpu", |
| values = {"cpu": "win32"}, |
| ) |
| |
| config_setting( |
| name = "win64_cpu", |
| values = {"cpu": "win64"}, |
| ) |
| |
| py_wheel( |
| name = "binary_wheel", |
| abi = select({ |
| "//python:full_api_3.7": "cp37m", |
| "//python:full_api_3.8": "cp38", |
| "//python:full_api_3.9": "cp39", |
| "//conditions:default": "abi3", |
| }), |
| distribution = "protobuf", |
| platform = select({ |
| ":x86_64_cpu": "manylinux2014_x86_64", |
| ":aarch64_cpu": "manylinux2014_aarch64", |
| ":osx-universal2_cpu": "macosx_10_9_universal2", |
| ":win32_cpu": "win32", |
| ":win64_cpu": "win_amd64", |
| "//conditions:default": "any", |
| }), |
| python_tag = selects.with_or({ |
| ("//python:limited_api_3.7", "//python:full_api_3.7"): "cp37", |
| "//python:full_api_3.8": "cp38", |
| "//python:full_api_3.9": "cp39", |
| "//python:limited_api_3.10": "cp310", |
| "//conditions:default": "cp" + SYSTEM_PYTHON_VERSION, |
| }), |
| strip_path_prefixes = [ |
| "python/dist/", |
| "python/", |
| ], |
| version = PROTOBUF_PYTHON_VERSION, |
| deps = [ |
| ":message_mod", |
| ":well_known_proto_py_pb2", |
| "@com_google_protobuf//:python_srcs", |
| ], |
| ) |
| |
| py_wheel( |
| name = "pure_python_wheel", |
| abi = "none", |
| distribution = "protobuf", |
| platform = "any", |
| python_tag = "py3", |
| strip_path_prefixes = [ |
| "python/", |
| ], |
| version = PROTOBUF_PYTHON_VERSION, |
| deps = [ |
| ":well_known_proto_py_pb2", |
| "@com_google_protobuf//:python_srcs", |
| ], |
| ) |
| |
| py_wheel( |
| name = "test_wheel", |
| abi = "none", |
| distribution = "protobuftests", |
| platform = "any", |
| python_tag = "py3", |
| strip_path_prefixes = ["python/"], |
| version = PROTOBUF_PYTHON_VERSION, |
| deps = [ |
| "//python/pb_unit_tests:test_files", |
| "@com_google_protobuf//:python_common_test_protos", |
| "@com_google_protobuf//:python_specific_test_protos", |
| "@com_google_protobuf//:python_test_srcs", |
| "@com_google_protobuf//:testdata", |
| ], |
| ) |
| |
| py_dist( |
| name = "dist", |
| binary_wheel = ":binary_wheel", |
| full_api_cpus = [ |
| # TODO(b/231485326): fix win32 build |
| "win32", |
| "win64", |
| ], |
| # Windows needs version-specific wheels until 3.10. |
| full_api_versions = [ |
| "37", |
| "38", |
| "39", |
| ], |
| # Limited API: these wheels will satisfy any Python version >= the |
| # given version. |
| # |
| # Technically the limited API doesn't have the functions we need until |
| # 3.10, but on Linux we can get away with using 3.7 (see ../python_api.h for |
| # details). |
| limited_api_wheels = { |
| # TODO(b/231485326): fix win32 build |
| "win32": "310", |
| "win64": "310", |
| "linux-x86_64": "37", |
| "linux-aarch_64": "37", |
| "osx-universal2": "37", |
| }, |
| pure_python_wheel = ":pure_python_wheel", |
| tags = ["manual"], |
| ) |