# 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", ], )