| # Internal Starlark definitions for Protobuf. | |
| load("@bazel_skylib//lib:selects.bzl", "selects") | |
| load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix") | |
| load("//bazel:cc_proto_library.bzl", starlark_cc_proto_library = "cc_proto_library") | |
| load("//build_defs:platforms.bzl", "PLATFORMS") | |
| load(":cc_proto_blacklist_test.bzl", "cc_proto_blacklist_test") | |
| load(":compiler_config_setting.bzl", "create_compiler_config_setting") | |
| package( | |
| default_visibility = [ | |
| # Public, but Protobuf only visibility. | |
| "//:__subpackages__", | |
| ], | |
| ) | |
| create_compiler_config_setting( | |
| name = "config_msvc_cl", | |
| value = "msvc-cl", | |
| ) | |
| create_compiler_config_setting( | |
| name = "config_clang_cl", | |
| value = "clang-cl", | |
| ) | |
| platform( | |
| name = "x64_windows-clang-cl", | |
| constraint_values = PLATFORMS["win64"] + [ | |
| # This is necessary for Bazel 7 compatibility with a MODULE.bazel file that still works in | |
| # Bazel 8. Using cc_configure_extension from rules_cc produces a @local_config_cc | |
| # repository that's not compatible with @bazel_tools//tools/cpp:clang-cl from before | |
| # Bazel 8. See https://github.com/bazelbuild/rules_cc/issues/330. | |
| "@rules_cc//cc/private/toolchain:clang-cl", | |
| ], | |
| ) | |
| platform( | |
| name = "x64_windows-msvc-cl", | |
| constraint_values = PLATFORMS["win64"] + [ | |
| # This may be necessary in case cc_configure_extension from rules_cc produces a | |
| # @local_config_cc repository that's not compatible with @bazel_tools//tools/cpp:msvc from | |
| # before Bazel 8, as with clang-cl above, to avoid silently falling back to clang-cl. | |
| # See https://github.com/bazelbuild/rules_cc/issues/330. | |
| "@rules_cc//cc/private/toolchain:msvc", | |
| ], | |
| ) | |
| selects.config_setting_group( | |
| name = "config_msvc", | |
| match_any = [ | |
| ":config_clang_cl", | |
| ":config_msvc_cl", | |
| ], | |
| ) | |
| [ | |
| platform( | |
| name = name, | |
| constraint_values = constraints, | |
| ) | |
| for name, constraints in PLATFORMS.items() | |
| ] | |
| # A pseudo-platform representing a universal binary containing both x86_64 and aarch64. | |
| platform( | |
| name = "osx-universal2", | |
| constraint_values = [ | |
| "@platforms//cpu:x86_64", | |
| "@platforms//os:osx", | |
| ], | |
| ) | |
| config_setting( | |
| name = "is_linux_aarch64", | |
| constraint_values = [ | |
| "@platforms//os:linux", | |
| "@platforms//cpu:aarch64", | |
| ], | |
| ) | |
| config_setting( | |
| name = "is_linux_x86_64", | |
| constraint_values = [ | |
| "@platforms//os:linux", | |
| "@platforms//cpu:x86_64", | |
| ], | |
| ) | |
| # Android NDK builds can specify different crosstool_top flags to choose which | |
| # STL they use for C++. We need these multiple variants to catch all of those | |
| # versions of crosstool_top and reliably detect Android. | |
| # | |
| # For more info on the various crosstool_tops used by NDK Bazel builds, see: | |
| # https://docs.bazel.build/versions/master/android-ndk.html#configuring-the-stl | |
| # When using https://bazel.build/concepts/platforms | |
| config_setting( | |
| name = "config_android", | |
| constraint_values = ["@platforms//os:android"], | |
| ) | |
| # When using legacy flags like --android_crosstool_top, --android_cpu, and --fat_apk_cpu | |
| config_setting( | |
| name = "config_android-legacy-default-crosstool", | |
| values = { | |
| # Default of `--android_crosstool_top` | |
| "crosstool_top": "//external:android/crosstool", | |
| }, | |
| ) | |
| config_setting( | |
| name = "config_android-stlport", | |
| values = { | |
| "crosstool_top": "@androidndk//:toolchain-stlport", | |
| }, | |
| ) | |
| config_setting( | |
| name = "config_android-libcpp", | |
| values = { | |
| "crosstool_top": "@androidndk//:toolchain-libcpp", | |
| }, | |
| ) | |
| config_setting( | |
| name = "config_android-gnu-libstdcpp", | |
| values = { | |
| "crosstool_top": "@androidndk//:toolchain-gnu-libstdcpp", | |
| }, | |
| ) | |
| config_setting( | |
| name = "config_android-default", | |
| values = { | |
| "crosstool_top": "@androidndk//:default_crosstool", | |
| }, | |
| ) | |
| config_setting( | |
| name = "config_win", | |
| constraint_values = ["@platforms//os:windows"], | |
| ) | |
| config_setting( | |
| name = "config_osx", | |
| constraint_values = ["@platforms//os:osx"], | |
| ) | |
| # Internal testing: | |
| starlark_cc_proto_library( | |
| name = "any_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:any_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "api_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:api_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "compiler_plugin_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:compiler_plugin_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "descriptor_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:descriptor_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "duration_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:duration_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "empty_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:empty_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "field_mask_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:field_mask_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "source_context_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:source_context_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "struct_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:struct_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "timestamp_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:timestamp_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "type_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:type_proto"], | |
| ) | |
| starlark_cc_proto_library( | |
| name = "wrappers_cc_proto", | |
| visibility = ["//visibility:private"], | |
| deps = ["//:wrappers_proto"], | |
| ) | |
| cc_proto_blacklist_test( | |
| name = "cc_proto_blacklist_test", | |
| deps = [ | |
| ":any_cc_proto", | |
| ":api_cc_proto", | |
| ":compiler_plugin_cc_proto", | |
| ":descriptor_cc_proto", | |
| ":duration_cc_proto", | |
| ":empty_cc_proto", | |
| ":field_mask_cc_proto", | |
| ":source_context_cc_proto", | |
| ":struct_cc_proto", | |
| ":timestamp_cc_proto", | |
| ":type_cc_proto", | |
| ":wrappers_cc_proto", | |
| ], | |
| ) |