Skip to content

Commit

Permalink
fix: Use assembly full path search first
Browse files Browse the repository at this point in the history
  • Loading branch information
jeromelaban committed Jun 24, 2024
1 parent d5327dc commit 3ef53c9
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 4 deletions.
11 changes: 9 additions & 2 deletions src/Uno.Wasm.Bootstrap/ShellTask.cs
Original file line number Diff line number Diff line change
Expand Up @@ -776,7 +776,13 @@ private void RunPackager()

DirectoryCreateDirectory(workAotPath);

var referencePathsParameter = string.Join(" ", _referencedAssemblies.Select(Path.GetDirectoryName).Distinct().Select(r => $"--search-path=\"{AlignPath(r)}\""));
var referencePathsParameter = string.Join(
" "
, _referencedAssemblies.Select(Path.GetDirectoryName).Distinct().Select(r => $"--search-path=\"{AlignPath(r)}\""));

var referenceAssembliesParameter = string.Join(
" "
, _referencedAssemblies.Distinct().Select(r => $"--asm-ref=\"{AlignPath(r)}\""));

var metadataUpdaterPath = Path.Combine(BuildTaskBasePath, "..", "tools", "support", "Uno.Wasm.MetadataUpdater.dll");

Expand Down Expand Up @@ -824,7 +830,7 @@ private void RunPackager()

var enableICUParam = EnableNetCoreICU ? "--icu" : "";
var monovmparams = $"--framework=net5 --runtimepack-dir=\"{AlignPath(MonoWasmSDKPath)}\" {enableICUParam} {pthreadPoolSizeParam} --illinker-path=\"{_linkerBinPath}\"";
var pass1ResponseContent = $"{runtimeConfigurationParam} {appDirParm} {monovmparams} --zlib {debugOption} {referencePathsParameter} \"{AlignPath(TryConvertLongPath(Path.GetFullPath(Assembly)))}\"";
var pass1ResponseContent = $"{runtimeConfigurationParam} {appDirParm} {monovmparams} --zlib {debugOption} {referenceAssembliesParameter} {referencePathsParameter} \"{AlignPath(TryConvertLongPath(Path.GetFullPath(Assembly)))}\"";

var packagerPass1ResponseFile = Path.Combine(workAotPath, "packager-pass1.rsp");
File.WriteAllText(packagerPass1ResponseFile, pass1ResponseContent);
Expand Down Expand Up @@ -935,6 +941,7 @@ private void RunPackager()
packagerParams.Add(EmccLinkOptimization ? "--emcc-link-optimization" : "");
packagerParams.Add(MonoILLinker ? "--linker --link-mode=all" : "");
packagerParams.Add(referencePathsParameter);
packagerParams.Add(referenceAssembliesParameter);
packagerParams.Add(GenerateAOTProfile ? "--profile=aot" : "");
packagerParams.Add(EnableLogProfiler ? "--profile=log" : "");
packagerParams.Add(!string.IsNullOrEmpty(WasmTunerBinPath) ? $"\"--wasm-tuner-path={AlignPath(Path.GetFullPath(WasmTunerBinPath))}\"" : "");
Expand Down
24 changes: 23 additions & 1 deletion src/Uno.Wasm.Packager/CapturingAssemblyResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
class CapturingAssemblyResolver : DefaultAssemblyResolver
{
private List<Dictionary<string, string>> _files;
private List<string> _assembly_references;

public CapturingAssemblyResolver(List<string> assembly_references)
{
_assembly_references = assembly_references;
}

protected override AssemblyDefinition SearchDirectory(AssemblyNameReference name, IEnumerable<string> directories, ReaderParameters parameters)
{
Expand All @@ -19,6 +25,23 @@ protected override AssemblyDefinition SearchDirectory(AssemblyNameReference name
// paying the cost of File.Exists

_files = new List<Dictionary<string, string>>();

// Fill all the known references first, so they get resolved
// using compilation paths.
var explicitAssembliesPaths = new Dictionary<string, string>();
foreach(var asmReferencePath in _assembly_references)
{
if (Path.GetFileNameWithoutExtension(asmReferencePath) is { } asmName)
{
if (!explicitAssembliesPaths.ContainsKey(asmName))
{
explicitAssembliesPaths.Add(asmName, asmReferencePath);
}
}
}

_files.Add(explicitAssembliesPaths);

string[] extensions = new[] { ".winmd", ".dll", ".exe", ".dll" };

foreach (var directory in directories.Where(Directory.Exists))
Expand All @@ -39,7 +62,6 @@ protected override AssemblyDefinition SearchDirectory(AssemblyNameReference name
}
}

_files.Add(map);
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/Uno.Wasm.Packager/packager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class Driver {
static List<string> file_list = new List<string> ();
static HashSet<string> assemblies_with_dbg_info = new HashSet<string> ();
static List<string> root_search_paths = new List<string>();
static List<string> assembly_references = new List<string>();
static CapturingAssemblyResolver resolver;

const string BINDINGS_ASM_NAME_MONO = "WebAssembly.Bindings";
Expand Down Expand Up @@ -278,7 +279,7 @@ static void Import (string ra, AssemblyKind kind) {

if (resolver == null)
{
resolver = new CapturingAssemblyResolver();
resolver = new CapturingAssemblyResolver(assembly_references);
root_search_paths.ForEach(resolver.AddSearchDirectory);
foreach (var prefix in bcl_prefixes)
resolver.AddSearchDirectory(prefix);
Expand Down Expand Up @@ -554,6 +555,7 @@ int Run (string[] args) {
{ "template=", s => runtimeTemplate = s },
{ "asset=", s => assets.Add(s) },
{ "search-path=", s => root_search_paths.Add(s) },
{ "asm-ref=", s => assembly_references.Add(s) },
{ "profile=", s => profilers.Add (s) },
{ "copy=", s => copyTypeParm = s },
{ "aot-assemblies=", s => aot_assemblies = s },
Expand Down

0 comments on commit 3ef53c9

Please sign in to comment.