# Protobuf C# runtime # # See also code generation logic under /src/google/protobuf/compiler/csharp. load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix") load("//build_defs:internal_shell.bzl", "inline_sh_test") load("//conformance:defs.bzl", "conformance_test") load("//editions:defaults.bzl", "compile_edition_defaults", "embed_edition_defaults") load("//upb/cmake:build_defs.bzl", "staleness_test") ################################################################################ # Tests ################################################################################ conformance_test( name = "conformance_test", failure_list = "//conformance:failure_list_csharp.txt", maximum_edition = "2023", testee = "//conformance:conformance_csharp", ) ################################################################################ # CSharp Runtime ################################################################################ filegroup( name = "srcs", srcs = glob( [ "keys/*", "protos/*", "src/**/*.cs*", # .cs and .csproj ], exclude = [ # Exclude generated files. "src/*/obj/**/*", ], ) + [ "src/Directory.Build.props", "src/Google.Protobuf.Test/testprotos.pb", "src/Google.Protobuf.sln", ], visibility = [ "//conformance:__subpackages__", "//csharp:__subpackages__", ], ) filegroup( name = "wkt_cs_srcs", srcs = [ "src/Google.Protobuf/Reflection/Descriptor.pb.cs", "src/Google.Protobuf/WellKnownTypes/Any.pb.cs", "src/Google.Protobuf/WellKnownTypes/Api.pb.cs", "src/Google.Protobuf/WellKnownTypes/Duration.pb.cs", "src/Google.Protobuf/WellKnownTypes/Empty.pb.cs", "src/Google.Protobuf/WellKnownTypes/FieldMask.pb.cs", "src/Google.Protobuf/WellKnownTypes/SourceContext.pb.cs", "src/Google.Protobuf/WellKnownTypes/Struct.pb.cs", "src/Google.Protobuf/WellKnownTypes/Timestamp.pb.cs", "src/Google.Protobuf/WellKnownTypes/Type.pb.cs", "src/Google.Protobuf/WellKnownTypes/Wrappers.pb.cs", ], visibility = ["//src/google/protobuf/compiler/csharp:__pkg__"], ) inline_sh_test( name = "tests", srcs = [ "src/Google.Protobuf.sln", ":srcs", "//conformance:conformance_csharp_proto", "//csharp/src/Google.Protobuf.Conformance:srcs", ], cmd = """ cp $(rootpath //conformance:conformance_csharp_proto) `dirname $(location src/Google.Protobuf.sln)`/Google.Protobuf.Conformance/ pushd `dirname $(location src/Google.Protobuf.sln)`/.. dotnet restore src/Google.Protobuf.sln dotnet build -c Release src/Google.Protobuf.sln dotnet test -c Release -f net6.0 src/Google.Protobuf.Test/Google.Protobuf.Test.csproj popd """, ) ################################################################################ # Distribution files ################################################################################ pkg_files( name = "dist_files", srcs = [ ".editorconfig", ".gitignore", "BUILD.bazel", "CHANGES.txt", "Google.Protobuf.Tools.nuspec", "Google.Protobuf.Tools.targets", "NuGet.Config", "README.md", "build_packages.bat", "build_release.sh", "build_tools.sh", "buildall.bat", "buildall.sh", "generate_protos.sh", "install_dotnet_sdk.ps1", ":srcs", "//csharp/src/Google.Protobuf.Conformance:dist_files", ], strip_prefix = strip_prefix.from_root(""), visibility = ["//pkg:__pkg__"], ) sh_binary( name = "release", srcs = ["build_release.sh"], args = ["$(location build_release.sh)"], ) ################################################################################ # Generated edition defaults (and staleness test) ################################################################################ compile_edition_defaults( name = "csharp_edition_defaults", srcs = [ "//:descriptor_proto", ], maximum_edition = "2023", minimum_edition = "PROTO2", ) # TODO Make bazel tests use this output instead of the checked-in one embed_edition_defaults( name = "embedded_csharp_edition_defaults_generate", defaults = "csharp_edition_defaults", encoding = "base64", output = "generated/src/Google.Protobuf/Reflection/FeatureSetDescriptor.g.cs", placeholder = "DEFAULTS_VALUE", template = "src/Google.Protobuf/Reflection/FeatureSetDescriptor.g.cs.template", ) staleness_test( name = "generated_csharp_defaults_staleness_test", outs = ["src/Google.Protobuf/Reflection/FeatureSetDescriptor.g.cs"], generated_pattern = "generated/%s", tags = ["manual"], target_files = ["src/Google.Protobuf/Reflection/FeatureSetDescriptor.g.cs"], )