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

Dependency resolution fixes #301

Merged
merged 10 commits into from
Aug 10, 2022
Merged
Show file tree
Hide file tree
Changes from all 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
5 changes: 0 additions & 5 deletions dotnet/defs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ load(
"//dotnet/private:rules/fsharp/binary.bzl",
_fsharp_binary = "fsharp_binary",
)
load(
"//dotnet/private:rules/wrapper.bzl",
_dotnet_wrapper = "dotnet_wrapper",
)
load(
"//dotnet/private:rules/csharp/library.bzl",
_csharp_library = "csharp_library",
Expand Down Expand Up @@ -52,7 +48,6 @@ load(
_nuget_repo = "nuget_repo",
)

dotnet_wrapper = _dotnet_wrapper
csharp_binary = _csharp_binary
csharp_library = _csharp_library
csharp_test = _csharp_test
Expand Down
1 change: 0 additions & 1 deletion dotnet/private/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ filegroup(
exports_files([
"nunit/shim.cs",
"nunit/shim.fs",
"wrappers/dotnet.cc",
"runtimeconfig.json.tpl",
"deps.json.tpl",
"launcher.sh.tpl",
Expand Down
26 changes: 18 additions & 8 deletions dotnet/private/actions/csharp_assembly.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ load(
"//dotnet/private:common.bzl",
"collect_transitive_info",
"format_ref_arg",
"get_framework_version_info",
"use_highentropyva",
)
load(
"//dotnet/private:providers.bzl",
"DotnetAssemblyInfo",
"GetFrameworkVersionInfo",
)
load("//dotnet/private:actions/misc.bzl", "framework_preprocessor_symbols", "write_internals_visible_to_csharp")

Expand All @@ -21,6 +21,7 @@ def AssemblyAction(
debug,
defines,
deps,
private_deps,
internals_visible_to,
keyfile,
langversion,
Expand All @@ -32,6 +33,7 @@ def AssemblyAction(
target_name,
target_framework,
toolchain,
strict_deps,
runtimeconfig = None,
depsjson = None):
"""Creates an action that runs the CSharp compiler with the specified inputs.
Expand All @@ -44,6 +46,7 @@ def AssemblyAction(
debug: Emits debugging information.
defines: The list of conditional compilation symbols.
deps: The list of other libraries to be linked in to the assembly.
private_deps: The list of libraries that are private to the target. These deps are not passed transitively.
internals_visible_to: An optional list of assemblies that can see this assemblies internal symbols.
keyfile: Specifies a strong name key file of the assembly.
langversion: Specify language version: Default, ISO-1, ISO-2, 3, 4, 5, 6, 7, 7.1, 7.2, 7.3, or Latest
Expand All @@ -55,6 +58,7 @@ def AssemblyAction(
target: Specifies the format of the output file by using one of four options.
target_framework: The target framework moniker for the assembly.
toolchain: The toolchain that supply the C# compiler.
strict_deps: Whether or not to use strict dependencies.
runtimeconfig: The runtime configuration of the assembly.
depsjson: The deps.json for the assembly.

Expand All @@ -63,8 +67,8 @@ def AssemblyAction(
"""

assembly_name = target_name if out == "" else out
(subsystem_version, default_lang_version) = GetFrameworkVersionInfo(target_framework)
(irefs, prefs, analyzers, transitive_runfiles, overrides) = collect_transitive_info(target_name, deps)
(subsystem_version, default_lang_version) = get_framework_version_info(target_framework)
(irefs, prefs, analyzers, transitive_runfiles, private_refs, private_analyzers, overrides) = collect_transitive_info(target_name, deps, private_deps, strict_deps)
defines = framework_preprocessor_symbols(target_framework) + defines

out_dir = "bazelout/" + target_framework
Expand All @@ -80,12 +84,14 @@ def AssemblyAction(
actions,
additionalfiles,
analyzers,
private_analyzers,
debug,
default_lang_version,
defines,
keyfile,
langversion,
irefs,
private_refs,
overrides,
resources,
srcs,
Expand Down Expand Up @@ -114,12 +120,14 @@ def AssemblyAction(
actions,
additionalfiles,
analyzers,
private_analyzers,
debug,
default_lang_version,
defines,
keyfile,
langversion,
irefs,
private_refs,
overrides,
resources,
srcs + [internals_visible_to_cs],
Expand All @@ -138,12 +146,14 @@ def AssemblyAction(
actions,
additionalfiles,
analyzers,
private_analyzers,
debug,
default_lang_version,
defines,
keyfile,
langversion,
irefs,
private_refs,
overrides,
resources,
srcs,
Expand Down Expand Up @@ -172,7 +182,6 @@ def AssemblyAction(
transitive_prefs = prefs,
transitive_analyzers = analyzers,
transitive_runfiles = transitive_runfiles,
actual_tfm = target_framework,
runtimeconfig = runtimeconfig,
depsjson = depsjson,
targeting_pack_overrides = {},
Expand All @@ -182,12 +191,14 @@ def _compile(
actions,
additionalfiles,
analyzer_assemblies,
private_analyzer_assemblies,
debug,
default_lang_version,
defines,
keyfile,
langversion,
refs,
private_refs,
overrides,
resources,
srcs,
Expand Down Expand Up @@ -247,10 +258,11 @@ def _compile(
outputs = [out_ref]

# assembly references
format_ref_arg(args, refs, overrides)
format_ref_arg(args, depset(transitive = [private_refs, refs]), overrides)

# analyzers
args.add_all(analyzer_assemblies, format_each = "/analyzer:%s")
args.add_all(private_analyzer_assemblies, format_each = "/analyzer:%s")
args.add_all(additionalfiles, format_each = "/additionalfile:%s")

# .cs files
Expand Down Expand Up @@ -286,8 +298,6 @@ def _compile(
# makes that call based on limitations of the OS).
args.set_param_file_format("multiline")

# Our wrapper uses _spawnv to launch dotnet, and that has a command line limit
# of 1024 bytes, so always use a param file.
args.use_param_file("@%s", use_always = True)

direct_inputs = srcs + resources + additionalfiles + [toolchain.csharp_compiler]
Expand All @@ -300,7 +310,7 @@ def _compile(
progress_message = "Compiling " + target_name + (" (internals ref-only dll)" if out_dll == None else ""),
inputs = depset(
direct = direct_inputs,
transitive = [refs, analyzer_assemblies],
transitive = [private_refs, refs, analyzer_assemblies, private_analyzer_assemblies],
),
outputs = outputs,
executable = toolchain.runtime.files_to_run,
Expand Down
22 changes: 13 additions & 9 deletions dotnet/private/actions/fsharp_assembly.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ load(
"//dotnet/private:common.bzl",
"collect_transitive_info",
"format_ref_arg",
"get_framework_version_info",
"is_core_framework",
"is_standard_framework",
"use_highentropyva",
)
load(
"//dotnet/private:providers.bzl",
"DotnetAssemblyInfo",
"GetFrameworkVersionInfo",
)
load("//dotnet/private:actions/misc.bzl", "framework_preprocessor_symbols", "write_internals_visible_to_fsharp")

Expand All @@ -31,6 +31,7 @@ def AssemblyAction(
debug,
defines,
deps,
private_deps,
internals_visible_to,
keyfile,
langversion,
Expand All @@ -42,6 +43,7 @@ def AssemblyAction(
target_name,
target_framework,
toolchain,
strict_deps,
runtimeconfig = None,
depsjson = None):
"""Creates an action that runs the F# compiler with the specified inputs.
Expand All @@ -53,6 +55,7 @@ def AssemblyAction(
debug: Emits debugging information.
defines: The list of conditional compilation symbols.
deps: The list of other libraries to be linked in to the assembly.
private_deps: The list of libraries that are private to the target. These deps are not passed transitively.
internals_visible_to: An optional list of assemblies that can see this assemblies internal symbols.
keyfile: Specifies a strong name key file of the assembly.
langversion: Specify language version: Default, ISO-1, ISO-2, 3, 4, 5, 6, 7, 7.1, 7.2, 7.3, or Latest
Expand All @@ -64,6 +67,7 @@ def AssemblyAction(
target: Specifies the format of the output file by using one of four options.
target_framework: The target framework moniker for the assembly.
toolchain: The toolchain that supply the F# compiler.
strict_deps: Whether or not to use strict dependencies.
runtimeconfig: The runtime configuration of the assembly.
depsjson: The deps.json for the assembly.

Expand All @@ -72,8 +76,8 @@ def AssemblyAction(
"""

assembly_name = target_name if out == "" else out
(subsystem_version, _default_lang_version) = GetFrameworkVersionInfo(target_framework)
(irefs, prefs, analyzers, transitive_runfiles, overrides) = collect_transitive_info(target_name, deps)
(subsystem_version, _default_lang_version) = get_framework_version_info(target_framework)
(irefs, prefs, analyzers, transitive_runfiles, private_refs, _private_analyzers, overrides) = collect_transitive_info(target_name, deps, private_deps, strict_deps)
defines = framework_preprocessor_symbols(target_framework) + defines

out_dir = "bazelout/" + target_framework
Expand All @@ -94,6 +98,7 @@ def AssemblyAction(
keyfile,
langversion,
irefs,
private_refs,
overrides,
resources,
srcs,
Expand All @@ -119,6 +124,7 @@ def AssemblyAction(
keyfile,
langversion,
irefs,
private_refs,
overrides,
resources,
srcs + [internals_visible_to_cs],
Expand Down Expand Up @@ -147,7 +153,6 @@ def AssemblyAction(
transitive_prefs = prefs,
transitive_analyzers = analyzers,
transitive_runfiles = transitive_runfiles,
actual_tfm = target_framework,
runtimeconfig = runtimeconfig,
depsjson = depsjson,
targeting_pack_overrides = {},
Expand All @@ -160,6 +165,7 @@ def _compile(
keyfile,
langversion,
refs,
private_refs,
overrides,
resources,
srcs,
Expand All @@ -175,7 +181,6 @@ def _compile(
# Our goal is to match msbuild as much as reasonable
# https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-options
args = actions.args()
args.add("/checked-")
args.add("/noframework")
args.add("/utf8output")
args.add("/deterministic+")
Expand Down Expand Up @@ -203,6 +208,7 @@ def _compile(
args.add("/debug+")
args.add("/optimize-")
args.add("/define:TRACE;DEBUG")
args.add("/tailcalls-")
else:
args.add("/debug-")
args.add("/optimize+")
Expand All @@ -228,7 +234,7 @@ def _compile(
# outputs = [out_ref]

# assembly references
format_ref_arg(args, refs, overrides)
format_ref_arg(args, depset(transitive = [private_refs, refs]), overrides)

# .fs files
args.add_all(srcs)
Expand All @@ -247,8 +253,6 @@ def _compile(
# makes that call based on limitations of the OS).
args.set_param_file_format("multiline")

# Our wrapper uses _spawnv to launch dotnet, and that has a command line limit
# of 1024 bytes, so always use a param file.
args.use_param_file("@%s", use_always = True)

direct_inputs = srcs + resources + [toolchain.fsharp_compiler]
Expand All @@ -260,7 +264,7 @@ def _compile(
progress_message = "Compiling " + target_name + (" (internals ref-only dll)" if out_dll == None else ""),
inputs = depset(
direct = direct_inputs,
transitive = [refs],
transitive = [refs, private_refs],
),
outputs = outputs,
executable = toolchain.runtime.files_to_run,
Expand Down
Loading