From 4746e94694b6a66700ac586a3752e70390bae973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=C3=ADel=20P=2E=20Purkh=C3=BAs?= Date: Wed, 3 Apr 2024 10:59:47 +0000 Subject: [PATCH] WIP --- docs/defs.md | 3 +-- dotnet/private/providers.bzl | 1 + dotnet/private/rules/common/BUILD.bazel | 1 + dotnet/private/rules/common/attrs.bzl | 5 +++++ dotnet/private/rules/common/binary.bzl | 3 ++- .../rules/publish_binary/publish_binary.bzl | 17 +++-------------- examples/aspnetcore/BUILD.bazel | 1 - 7 files changed, 13 insertions(+), 18 deletions(-) diff --git a/docs/defs.md b/docs/defs.md index 50bd0870..3d2e16d4 100644 --- a/docs/defs.md +++ b/docs/defs.md @@ -86,7 +86,7 @@ nuget_archive(name, name, binary, project_sdk, roll_forward_behavior, runtime_identifier, self_contained, +publish_binary(name, binary, roll_forward_behavior, runtime_identifier, self_contained, target_framework) @@ -99,7 +99,6 @@ Publish a .Net binary | :------------- | :------------- | :------------- | :------------- | :------------- | | name | A unique name for this target. | Name | required | | | binary | The .Net binary that is being published | Label | required | | -| project_sdk | The project SDK that is being targeted. See https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview | String | optional | "default" | | roll_forward_behavior | The roll forward behavior that should be used: https://learn.microsoft.com/en-us/dotnet/core/versions/selection#control-roll-forward-behavior | String | optional | "Minor" | | runtime_identifier | The runtime identifier that is being targeted. See https://docs.microsoft.com/en-us/dotnet/core/rid-catalog | String | optional | "" | | self_contained | Whether the binary should be self-contained.

If true, the binary will be published as a self-contained but you need to provide a runtime pack in the runtime_packs attribute. At some point the rules might resolve the runtime pack automatically.

If false, the binary will be published as a non-self-contained. That means that to be able to run the binary you need to have a .Net runtime installed on the host system. | Boolean | optional | False | diff --git a/dotnet/private/providers.bzl b/dotnet/private/providers.bzl index f8931a06..46569cf4 100644 --- a/dotnet/private/providers.bzl +++ b/dotnet/private/providers.bzl @@ -60,6 +60,7 @@ DotnetBinaryInfo = provider( "app_host": "File: The apphost executable", "dll": "File: The main binary dll", "transitive_runtime_deps": "list[DotnetAssemblyRuntimeInfo]: The transitive runtime dependencies of the binary", + "runtime_pack_info": "DotnetRuntimePackInfo: The runtime pack for the binary", }, ) diff --git a/dotnet/private/rules/common/BUILD.bazel b/dotnet/private/rules/common/BUILD.bazel index 968f2a8a..b2f0c40c 100644 --- a/dotnet/private/rules/common/BUILD.bazel +++ b/dotnet/private/rules/common/BUILD.bazel @@ -26,6 +26,7 @@ bzl_library( deps = [ "//dotnet/private:providers", "//dotnet/private/sdk/apphost_packs:apphost_pack_transition", + "//dotnet/private/sdk/runtime_packs:runtime_pack_transition", "//dotnet/private/sdk/targeting_packs:targeting_pack_transition", "//dotnet/private/transitions:default_transition", "//dotnet/private/transitions:tfm_transition", diff --git a/dotnet/private/rules/common/attrs.bzl b/dotnet/private/rules/common/attrs.bzl index 213295fb..10c0647c 100644 --- a/dotnet/private/rules/common/attrs.bzl +++ b/dotnet/private/rules/common/attrs.bzl @@ -3,6 +3,7 @@ load("@bazel_skylib//lib:dicts.bzl", "dicts") load("//dotnet/private:providers.bzl", "DotnetAssemblyCompileInfo", "DotnetAssemblyRuntimeInfo") load("//dotnet/private/sdk/apphost_packs:apphost_pack_transition.bzl", "apphost_pack_transition") +load("//dotnet/private/sdk/runtime_packs:runtime_pack_transition.bzl", "runtime_pack_transition") load("//dotnet/private/sdk/targeting_packs:targeting_pack_transition.bzl", "targeting_pack_transition") load("//dotnet/private/transitions:default_transition.bzl", "default_transition") load("//dotnet/private/transitions:tfm_transition.bzl", "tfm_transition") @@ -194,6 +195,10 @@ BINARY_COMMON_ATTRS = { default = "//dotnet/private/sdk/apphost_packs:apphost_pack", cfg = apphost_pack_transition, ), + "_runtime_pack": attr.label( + default = "//dotnet/private/sdk/runtime_packs:runtime_pack", + cfg = runtime_pack_transition, + ), } # These are attributes that are common across all the binary/library/test C# rules diff --git a/dotnet/private/rules/common/binary.bzl b/dotnet/private/rules/common/binary.bzl index e26fabe2..5f051926 100644 --- a/dotnet/private/rules/common/binary.bzl +++ b/dotnet/private/rules/common/binary.bzl @@ -13,7 +13,7 @@ load( "is_standard_framework", "to_rlocation_path", ) -load("//dotnet/private:providers.bzl", "DotnetApphostPackInfo", "DotnetBinaryInfo") +load("//dotnet/private:providers.bzl", "DotnetApphostPackInfo", "DotnetBinaryInfo", "DotnetRuntimePackInfo") def _create_shim_exe(ctx, dll): windows_constraint = ctx.attr._windows_constraint[platform_common.ConstraintValueInfo] @@ -156,6 +156,7 @@ def build_binary(ctx, compile_action): dll = dll, app_host = app_host, transitive_runtime_deps = transitive_runtime_deps, + runtime_pack_info = ctx.attr._runtime_pack[0][DotnetRuntimePackInfo], ) return [default_info, dotnet_binary_info, compile_provider, runtime_provider] diff --git a/dotnet/private/rules/publish_binary/publish_binary.bzl b/dotnet/private/rules/publish_binary/publish_binary.bzl index 99b6f82e..6d403976 100644 --- a/dotnet/private/rules/publish_binary/publish_binary.bzl +++ b/dotnet/private/rules/publish_binary/publish_binary.bzl @@ -4,8 +4,7 @@ Rules for compiling F# binaries. load("@bazel_skylib//lib:shell.bzl", "shell") load("//dotnet/private:common.bzl", "generate_depsjson", "generate_runtimeconfig", "to_rlocation_path") -load("//dotnet/private:providers.bzl", "DotnetAssemblyCompileInfo", "DotnetAssemblyRuntimeInfo", "DotnetBinaryInfo", "DotnetRuntimePackInfo") -load("//dotnet/private/sdk/runtime_packs:runtime_pack_transition.bzl", "runtime_pack_transition") +load("//dotnet/private:providers.bzl", "DotnetAssemblyCompileInfo", "DotnetAssemblyRuntimeInfo", "DotnetBinaryInfo") load("//dotnet/private/transitions:tfm_transition.bzl", "tfm_transition") def _copy_file(script_body, src, dst, is_windows): @@ -154,8 +153,8 @@ def _publish_binary_impl(ctx): target_framework = ctx.attr.target_framework is_self_contained = ctx.attr.self_contained assembly_name = assembly_runtime_info.name - runtime_pack_info = ctx.attr._runtime_pack[0][DotnetRuntimePackInfo] if is_self_contained else None - runtime_identifier = ctx.attr._runtime_pack[0][DotnetRuntimePackInfo].runtime_identifier + runtime_pack_info = binary_info.runtime_pack_info if is_self_contained else None + runtime_identifier = binary_info.runtime_pack_info.runtime_identifier roll_forward_behavior = ctx.attr.roll_forward_behavior (executable, runfiles) = _copy_to_publish( @@ -216,12 +215,6 @@ publish_binary = rule( cfg = tfm_transition, mandatory = True, ), - "project_sdk": attr.string( - doc = "The project SDK that is being targeted. " + - "See https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview", - default = "default", - values = ["default", "web"], - ), "self_contained": attr.bool( doc = """ Whether the binary should be self-contained. @@ -249,10 +242,6 @@ publish_binary = rule( default = "Minor", values = ["Minor", "Major", "LatestPatch", "LatestMinor", "LatestMajor", "Disable"], ), - "_runtime_pack": attr.label( - default = "//dotnet/private/sdk/runtime_packs:runtime_pack", - cfg = runtime_pack_transition, - ), "_allowlist_function_transition": attr.label( default = "@bazel_tools//tools/allowlists/function_transition_allowlist", ), diff --git a/examples/aspnetcore/BUILD.bazel b/examples/aspnetcore/BUILD.bazel index 323d504d..64ba60fd 100644 --- a/examples/aspnetcore/BUILD.bazel +++ b/examples/aspnetcore/BUILD.bazel @@ -21,7 +21,6 @@ csharp_binary( publish_binary( name = "publish", binary = ":aspnetcore", - project_sdk = "web", self_contained = True, target_framework = "net6.0", )