Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bzlmod #387

Merged
merged 31 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"rules_dotnet"

module(
name = "rules_dotnet",
version = "0.0.0",
compatibility_level = 1,
)

dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet")
dotnet.toolchain(dotnet_version = "7.0.101")
use_repo(dotnet, "dotnet_toolchains")
register_toolchains("@dotnet_toolchains//:all")

rules_dotnet_nuget_packages = use_extension("//dotnet/rules_dotnet_nuget_packages.bzl", "rules_dotnet_nuget_packages")
use_repo(rules_dotnet_nuget_packages, "rules_dotnet_nuget_packages")

paket2bazel_dependencies = use_extension("//dotnet/paket2bazel_dependencies.bzl", "paket2bazel_dependencies")
use_repo(paket2bazel_dependencies, "paket2bazel_dependencies")

rules_dotnet_dev_nuget_packages = use_extension("//dotnet/rules_dotnet_dev_nuget_packages.bzl", "rules_dotnet_dev_nuget_packages", dev_dependency = True)
use_repo(rules_dotnet_dev_nuget_packages, "rules_dotnet_dev_nuget_packages")

bazel_dep(name = "bazel_skylib", version = "1.4.2")
bazel_dep(name = "aspect_bazel_lib", version = "1.34.5")
bazel_dep(name = "platforms", version = "0.0.7")

# Dev dependencies
bazel_dep(name = "rules_pkg", version = "0.9.1", dev_dependency = True)
bazel_dep(name = "gazelle", repo_name = "bazel_gazelle", version = "0.33.0", dev_dependency = True)
bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.4.2", dev_dependency = True)
Empty file added WORKSPACE.bzlmod
Empty file.
10 changes: 5 additions & 5 deletions dotnet/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ bzl_library(
"//dotnet/private/rules/fsharp:library",
"//dotnet/private/rules/fsharp:test",
"//dotnet/private/rules/nuget:imports",
"//dotnet/private/rules/nuget:nuget_archive",
"//dotnet/private/rules/nuget:nuget_repo",
"//dotnet/private/rules/publish_binary",
"@rules_dotnet//dotnet/private/rules/nuget:nuget_archive",
"@rules_dotnet//dotnet/private/rules/nuget:nuget_repo",
],
)

Expand All @@ -60,21 +60,21 @@ bzl_library(
name = "paket2bazel_dependencies",
srcs = ["paket2bazel_dependencies.bzl"],
visibility = ["//visibility:public"],
deps = ["@rules_dotnet//dotnet:defs"],
deps = ["//dotnet:defs"],
)

bzl_library(
name = "rules_dotnet_dev_nuget_packages",
srcs = ["rules_dotnet_dev_nuget_packages.bzl"],
visibility = ["//visibility:public"],
deps = ["@rules_dotnet//dotnet:defs"],
deps = ["//dotnet:defs"],
)

bzl_library(
name = "rules_dotnet_nuget_packages",
srcs = ["rules_dotnet_nuget_packages.bzl"],
visibility = ["//visibility:public"],
deps = ["@rules_dotnet//dotnet:defs"],
deps = ["//dotnet:defs"],
)

bzl_library(
Expand Down
48 changes: 24 additions & 24 deletions dotnet/defs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,52 @@ Users should not load files under "/dotnet"
"""

load(
"@rules_dotnet//dotnet/private/rules/csharp:binary.bzl",
"//dotnet/private/rules/csharp:binary.bzl",
_csharp_binary = "csharp_binary",
)
load(
"@rules_dotnet//dotnet/private/rules/csharp:library.bzl",
"//dotnet/private/rules/csharp:library.bzl",
_csharp_library = "csharp_library",
)
load(
"@rules_dotnet//dotnet/private/rules/csharp:nunit_test.bzl",
"//dotnet/private/rules/csharp:nunit_test.bzl",
_csharp_nunit_test = "csharp_nunit_test",
)
load(
"@rules_dotnet//dotnet/private/rules/csharp:test.bzl",
"//dotnet/private/rules/csharp:test.bzl",
_csharp_test = "csharp_test",
)
load(
"@rules_dotnet//dotnet/private/rules/fsharp:binary.bzl",
"//dotnet/private/rules/fsharp:binary.bzl",
_fsharp_binary = "fsharp_binary",
)
load(
"@rules_dotnet//dotnet/private/rules/fsharp:library.bzl",
"//dotnet/private/rules/fsharp:library.bzl",
_fsharp_library = "fsharp_library",
)
load(
"@rules_dotnet//dotnet/private/rules/fsharp:nunit_test.bzl",
"//dotnet/private/rules/fsharp:nunit_test.bzl",
_fsharp_nunit_test = "fsharp_nunit_test",
)
load(
"@rules_dotnet//dotnet/private/rules/fsharp:test.bzl",
"//dotnet/private/rules/fsharp:test.bzl",
_fsharp_test = "fsharp_test",
)
load(
"@rules_dotnet//dotnet/private/rules/nuget:imports.bzl",
"//dotnet/private/rules/nuget:imports.bzl",
_import_dll = "import_dll",
_import_library = "import_library",
)
load(
"@rules_dotnet//dotnet/private/rules/nuget:nuget_archive.bzl",
"//dotnet/private/rules/nuget:nuget_archive.bzl",
_nuget_archive = "nuget_archive",
)
load(
"@rules_dotnet//dotnet/private/rules/nuget:nuget_repo.bzl",
"//dotnet/private/rules/nuget:nuget_repo.bzl",
_nuget_repo = "nuget_repo",
)
load(
"@rules_dotnet//dotnet/private/rules/publish_binary:publish_binary.bzl",
"//dotnet/private/rules/publish_binary:publish_binary.bzl",
_publish_binary = "publish_binary",
_publish_binary_wrapper = "publish_binary_wrapper",
)
Expand All @@ -60,12 +60,12 @@ def _get_runtime_runtime_identifier(rid):
else:
return select(
{
"@rules_dotnet//dotnet/private:linux-x64": "linux-x64",
"@rules_dotnet//dotnet/private:linux-arm64": "linux-arm64",
"@rules_dotnet//dotnet/private:macos-x64": "osx-x64",
"@rules_dotnet//dotnet/private:macos-arm64": "osx-arm64",
"@rules_dotnet//dotnet/private:windows-x64": "win-x64",
"@rules_dotnet//dotnet/private:windows-arm64": "win-arm64",
"//dotnet/private:linux-x64": "linux-x64",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here and everywhere below, repo-relative labels in macros should be wrapped in Label(...). Otherwise they will be interpreted relative to the BUILD file that is ultimately using them, which is likely not in @rules_dotnet.

"//dotnet/private:linux-arm64": "linux-arm64",
"//dotnet/private:macos-x64": "osx-x64",
"//dotnet/private:macos-arm64": "osx-arm64",
"//dotnet/private:windows-x64": "win-x64",
"//dotnet/private:windows-arm64": "win-arm64",
},
no_match_error = "Could not infer default runtime identifier from the current host platform",
)
Expand All @@ -91,7 +91,7 @@ def csharp_binary(
override_warning_level = True if warning_level != None else False,
strict_deps = strict_deps if strict_deps != None else True,
override_strict_deps = True if strict_deps != None else False,
apphost_shimmer = "@rules_dotnet//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
apphost_shimmer = "//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
**kwargs
)

Expand Down Expand Up @@ -139,7 +139,7 @@ def csharp_test(
override_warning_level = True if warning_level != None else False,
strict_deps = strict_deps if strict_deps != None else True,
override_strict_deps = True if strict_deps != None else False,
apphost_shimmer = "@rules_dotnet//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
apphost_shimmer = "//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
**kwargs
)

Expand All @@ -164,7 +164,7 @@ def csharp_nunit_test(
override_warning_level = True if warning_level != None else False,
strict_deps = strict_deps if strict_deps != None else True,
override_strict_deps = True if strict_deps != None else False,
apphost_shimmer = "@rules_dotnet//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
apphost_shimmer = "//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
**kwargs
)

Expand All @@ -189,7 +189,7 @@ def fsharp_binary(
override_warning_level = True if warning_level != None else False,
strict_deps = strict_deps if strict_deps != None else True,
override_strict_deps = True if strict_deps != None else False,
apphost_shimmer = "@rules_dotnet//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
apphost_shimmer = "//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
**kwargs
)

Expand Down Expand Up @@ -237,7 +237,7 @@ def fsharp_test(
override_warning_level = True if warning_level != None else False,
strict_deps = strict_deps if strict_deps != None else True,
override_strict_deps = True if strict_deps != None else False,
apphost_shimmer = "@rules_dotnet//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
apphost_shimmer = "//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
**kwargs
)

Expand All @@ -262,7 +262,7 @@ def fsharp_nunit_test(
override_warning_level = True if warning_level != None else False,
strict_deps = strict_deps if strict_deps != None else True,
override_strict_deps = True if strict_deps != None else False,
apphost_shimmer = "@rules_dotnet//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
apphost_shimmer = "//dotnet/private/tools/apphost_shimmer:apphost_shimmer" if use_apphost_shim else None,
**kwargs
)

Expand Down
49 changes: 49 additions & 0 deletions dotnet/extensions.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
"extensions for bzlmod"

load(":repositories.bzl", "dotnet_register_toolchains")

_DEFAULT_NAME = "dotnet"

def _toolchain_extension(module_ctx):
registrations = {}
for mod in module_ctx.modules:
for toolchain in mod.tags.toolchain:
if toolchain.name != _DEFAULT_NAME and not mod.is_root:
fail("Only the root module may provide a name for the dotnet toolchain.")

if toolchain.name in registrations.keys():
if toolchain.name == _DEFAULT_NAME:
# Prioritize the root-most registration of the default dotnet toolchain version and
# ignore any further registrations (modules are processed breadth-first)
continue
if toolchain.dotnet_version == registrations[toolchain.name]:
# No problem to register a matching toolchain twice
continue
fail("Multiple conflicting toolchains declared for name {} ({} and {})".format(
toolchain.name,
toolchain.dotnet_version,
registrations[toolchain.name],
))
else:
registrations[toolchain.name] = toolchain.dotnet_version
for name, dotnet_version in registrations.items():
dotnet_register_toolchains(
name = name,
dotnet_version = dotnet_version,
register = False,
)

dotnet = module_extension(
implementation = _toolchain_extension,
tag_classes = {
"toolchain": tag_class(attrs = {
"name": attr.string(
doc = "Base name for generated repositories",
default = _DEFAULT_NAME,
),
"dotnet_version": attr.string(
doc = "Version of the .Net SDK",
),
}),
},
)
9 changes: 8 additions & 1 deletion dotnet/paket2bazel_dependencies.bzl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"Generated by paket2bazel"

load("@rules_dotnet//dotnet:defs.bzl", "nuget_repo")
load("//dotnet:defs.bzl", "nuget_repo")

def paket2bazel_dependencies():
"paket2bazel_dependencies"
Expand Down Expand Up @@ -106,3 +106,10 @@ def paket2bazel_dependencies():
{"id": "System.Windows.Extensions", "version": "6.0.0", "sha512": "sha512-9R7sgWb5e1/OokgW7HN8JNXFpcsUXvLTMnfJoWBE9AvD+5e0z+f5ojr3BO3pFYbGq9Ks8AsndTi7ME13ocpU8A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Drawing.Common"], "net6.0": ["System.Drawing.Common"], "net7.0": ["System.Drawing.Common"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": ["System.Drawing.Common"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
],
)

def _paket2bazel_dependencies_extension_impl(_ctx):
paket2bazel_dependencies()

paket2bazel_dependencies_extension = module_extension(
implementation = _paket2bazel_dependencies_extension_impl,
)
4 changes: 2 additions & 2 deletions dotnet/private/resolved_toolchain.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Workaround for https://github.com/bazelbuild/bazel/issues/14009

# Forward all the providers
def _resolved_toolchain_impl(ctx):
toolchain_info = ctx.toolchains["@rules_dotnet//dotnet:toolchain_type"]
toolchain_info = ctx.toolchains["//dotnet:toolchain_type"]
return [
toolchain_info,
toolchain_info.default,
Expand All @@ -21,7 +21,7 @@ def _resolved_toolchain_impl(ctx):
# https://cs.opensource.google/bazel/bazel/+/master:tools/jdk/java_toolchain_alias.bzl
resolved_toolchain = rule(
implementation = _resolved_toolchain_impl,
toolchains = ["@rules_dotnet//dotnet:toolchain_type"],
toolchains = ["//dotnet:toolchain_type"],
incompatible_use_toolchain_transition = True,
doc = DOC,
)
10 changes: 5 additions & 5 deletions dotnet/private/rules/common/attrs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -143,20 +143,20 @@ COMMON_ATTRS = {
default = True,
),
"_target_framework": attr.label(
default = "@rules_dotnet//dotnet:target_framework",
default = "//dotnet:target_framework",
),
"_windows_constraint": attr.label(default = "@platforms//os:windows"),
"_allowlist_function_transition": attr.label(
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
),
"_compiler_wrapper_sh": attr.label(
default = "@rules_dotnet//dotnet/private:compiler_wrapper.sh",
default = "//dotnet/private:compiler_wrapper.sh",
executable = True,
cfg = "exec",
allow_single_file = True,
),
"_compiler_wrapper_bat": attr.label(
default = "@rules_dotnet//dotnet/private:compiler_wrapper.bat",
default = "//dotnet/private:compiler_wrapper.bat",
executable = True,
cfg = "exec",
allow_single_file = True,
Expand Down Expand Up @@ -194,12 +194,12 @@ BINARY_COMMON_ATTRS = {
),
"_launcher_sh": attr.label(
doc = "A template file for the launcher on Linux/MacOS",
default = "@rules_dotnet//dotnet/private:launcher.sh.tpl",
default = "//dotnet/private:launcher.sh.tpl",
allow_single_file = True,
),
"_launcher_bat": attr.label(
doc = "A template file for the launcher on Windows",
default = "@rules_dotnet//dotnet/private:launcher.bat.tpl",
default = "//dotnet/private:launcher.bat.tpl",
allow_single_file = True,
),
}
Expand Down
8 changes: 4 additions & 4 deletions dotnet/private/rules/common/binary.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ load("//dotnet/private:providers.bzl", "DotnetBinaryInfo")
def _create_shim_exe(ctx, dll):
windows_constraint = ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]

apphost = ctx.toolchains["@rules_dotnet//dotnet:toolchain_type"].apphost
apphost = ctx.toolchains["//dotnet:toolchain_type"].apphost
output = ctx.actions.declare_file(paths.replace_extension(dll.basename, ".exe" if ctx.target_platform_has_constraint(windows_constraint) else ""), sibling = dll)

ctx.actions.run(
Expand All @@ -32,7 +32,7 @@ def _create_shim_exe(ctx, dll):
return output

def _create_launcher(ctx, runfiles, executable):
runtime = ctx.toolchains["@rules_dotnet//dotnet:toolchain_type"].runtime
runtime = ctx.toolchains["//dotnet:toolchain_type"].runtime
windows_constraint = ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]

launcher = ctx.actions.declare_file("{}.{}".format(executable.basename, "bat" if ctx.target_platform_has_constraint(windows_constraint) else "sh"), sibling = executable)
Expand All @@ -59,7 +59,7 @@ def _create_launcher(ctx, runfiles, executable):
)
runfiles.append(ctx.file._bash_runfiles)

runfiles.extend(ctx.toolchains["@rules_dotnet//dotnet:toolchain_type"].dotnetinfo.runtime_files)
runfiles.extend(ctx.toolchains["//dotnet:toolchain_type"].dotnetinfo.runtime_files)

return launcher

Expand Down Expand Up @@ -106,7 +106,7 @@ def build_binary(ctx, compile_action):
target_framework = tfm,
project_sdk = ctx.attr.project_sdk,
is_self_contained = False,
toolchain = ctx.toolchains["@rules_dotnet//dotnet:toolchain_type"],
toolchain = ctx.toolchains["//dotnet:toolchain_type"],
)

# Add additional lookup paths so that we can avoid copying all DLLs
Expand Down
4 changes: 2 additions & 2 deletions dotnet/private/rules/csharp/binary.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ load("//dotnet/private/rules/csharp/actions:csharp_assembly.bzl", "AssemblyActio
load("//dotnet/private/transitions:tfm_transition.bzl", "tfm_transition")

def _compile_action(ctx, tfm):
toolchain = ctx.toolchains["@rules_dotnet//dotnet:toolchain_type"]
toolchain = ctx.toolchains["//dotnet:toolchain_type"]
return AssemblyAction(
ctx.actions,
ctx.executable._compiler_wrapper_bat if ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]) else ctx.executable._compiler_wrapper_sh,
Expand Down Expand Up @@ -65,7 +65,7 @@ csharp_binary = rule(
),
executable = True,
toolchains = [
"@rules_dotnet//dotnet:toolchain_type",
"//dotnet:toolchain_type",
],
cfg = tfm_transition,
)
Loading