Skip to content

Commit

Permalink
[wasm] Build tasks for net472 also (dotnet#51959)
Browse files Browse the repository at this point in the history
  • Loading branch information
radical authored Apr 28, 2021
1 parent d44bd23 commit 85e4aea
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<Project>
<PropertyGroup>
<MonoAOTCompilerTasksAssemblyPath>$(MSBuildThisFileDirectory)..\tasks\MonoAOTCompiler.dll</MonoAOTCompilerTasksAssemblyPath>
<MonoAOTCompilerTasksAssemblyPath Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tasks\net6.0\MonoAOTCompiler.dll</MonoAOTCompilerTasksAssemblyPath>
<MonoAOTCompilerTasksAssemblyPath Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tasks\net472\MonoAOTCompiler.dll</MonoAOTCompilerTasksAssemblyPath>
</PropertyGroup>
<UsingTask TaskName="MonoAOTCompiler" AssemblyFile="$(MonoAOTCompilerTasksAssemblyPath)" />
</Project>
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
<Project>
<!-- Property overrides -->
<PropertyGroup>
<WasmAppBuilderTasksAssemblyPath>$(MSBuildThisFileDirectory)..\tasks\WasmAppBuilder.dll</WasmAppBuilderTasksAssemblyPath>
<WasmBuildTasksAssemblyPath>$(MSBuildThisFileDirectory)..\tasks\WasmBuildTasks.dll</WasmBuildTasksAssemblyPath>
<_TasksDir Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tasks\net6.0\</_TasksDir>
<_TasksDir Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tasks\net472\</_TasksDir>

<WasmAppBuilderTasksAssemblyPath>$(_TasksDir)WasmAppBuilder.dll</WasmAppBuilderTasksAssemblyPath>
<WasmBuildTasksAssemblyPath>$(_TasksDir)WasmBuildTasks.dll</WasmBuildTasksAssemblyPath>
</PropertyGroup>

<Import Project="$(MSBuildThisFileDirectory)\WasmApp.props" />
Expand Down
8 changes: 4 additions & 4 deletions src/tasks/AotCompilerTask/MonoAOTCompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ public override bool Execute()

if (!Enum.TryParse(Mode, true, out parsedAotMode))
{
Log.LogError($"Unknown Mode value: {Mode}. '{nameof(Mode)}' must be one of: {string.Join(',', Enum.GetNames(typeof(MonoAotMode)))}");
Log.LogError($"Unknown Mode value: {Mode}. '{nameof(Mode)}' must be one of: {string.Join(",", Enum.GetNames(typeof(MonoAotMode)))}");
return false;
}

Expand Down Expand Up @@ -222,7 +222,7 @@ public override bool Execute()

string? monoPaths = null;
if (AdditionalAssemblySearchPaths != null)
monoPaths = string.Join(Path.PathSeparator, AdditionalAssemblySearchPaths);
monoPaths = string.Join(Path.PathSeparator.ToString(), AdditionalAssemblySearchPaths);

if (DisableParallelAot)
{
Expand Down Expand Up @@ -257,13 +257,13 @@ private bool PrecompileLibrary(ITaskItem assemblyItem, string? monoPaths)
var a = assemblyItem.GetMetadata("AotArguments");
if (a != null)
{
aotArgs.AddRange(a.Split(";", StringSplitOptions.RemoveEmptyEntries));
aotArgs.AddRange(a.Split(new char[]{ ';' }, StringSplitOptions.RemoveEmptyEntries));
}

var p = assemblyItem.GetMetadata("ProcessArguments");
if (p != null)
{
processArgs.AddRange(p.Split(";", StringSplitOptions.RemoveEmptyEntries));
processArgs.AddRange(p.Split(new char[]{ ';' }, StringSplitOptions.RemoveEmptyEntries));
}

Log.LogMessage(MessageImportance.Low, $"[AOT] {assembly}");
Expand Down
11 changes: 9 additions & 2 deletions src/tasks/AotCompilerTask/MonoAOTCompiler.csproj
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>$(NetCoreAppToolCurrent)</TargetFramework>
<TargetFrameworks>$(NetCoreAppToolCurrent);net472</TargetFrameworks>
<OutputType>Library</OutputType>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<Nullable>enable</Nullable>
<NoWarn>$(NoWarn),CA1050</NoWarn>

<!-- Ignore nullable warnings on net4* -->
<NoWarn Condition="$(TargetFramework.StartsWith('net4'))">$(NoWarn),CS8604,CS8602</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Build" Version="$(RefOnlyMicrosoftBuildVersion)" />
Expand All @@ -16,6 +19,7 @@
<ItemGroup>
<Compile Include="MonoAOTCompiler.cs" />
<Compile Include="..\Common\Utils.cs" />
<Compile Include="..\Common\NotNullAttribute.cs" Condition="$(TargetFramework.StartsWith('net4'))" />
</ItemGroup>
<ItemGroup>
<Content Include="MonoAOTCompiler.props">
Expand All @@ -26,7 +30,10 @@
<!-- GetFilesToPackage assists to place `MonoAOTCompiler.dll` in a NuGet package in Microsoft.NET.Runtime.MonoAOTCompiler.Task.pkgproj for external use -->
<Target Name="GetFilesToPackage" Returns="@(FilesToPackage)">
<ItemGroup>
<FilesToPackage Include="$(OutputPath)$(AssemblyName).dll" TargetPath="tasks" />
<_PublishFramework Remove="@(_PublishFramework)" />
<_PublishFramework Include="$(TargetFrameworks)" />

<FilesToPackage Include="$(OutputPath)%(_PublishFramework.Identity)\$(AssemblyName).dll" TargetPath="tasks\%(_PublishFramework.Identity)" />
</ItemGroup>
</Target>
</Project>
7 changes: 7 additions & 0 deletions src/tasks/Common/NotNullAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, Inherited=false)]
public sealed class NotNullAttribute : System.Attribute
{
}
2 changes: 2 additions & 0 deletions src/tasks/Common/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ public static string RunProcess(
return outputBuilder.ToString().Trim('\r', '\n');
}

#if NETCOREAPP
public static void DirectoryCopy(string sourceDir, string destDir, Func<string, bool> predicate)
{
string[] files = Directory.GetFiles(sourceDir, "*", SearchOption.AllDirectories);
Expand All @@ -118,6 +119,7 @@ public static void DirectoryCopy(string sourceDir, string destDir, Func<string,
File.Copy(file, Path.Combine(destDir, relativePath), true);
}
}
#endif

public static TaskLoggingHelper? Logger { get; set; }

Expand Down
28 changes: 14 additions & 14 deletions src/tasks/WasmAppBuilder/WasmAppBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,9 @@ protected AssetEntry (string name, string behavior)
Behavior = behavior;
}
[JsonPropertyName("behavior")]
public string Behavior { get; init; }
public string Behavior { get; set; }
[JsonPropertyName("name")]
public string Name { get; init; }
public string Name { get; set; }
}

private class AssemblyEntry : AssetEntry
Expand Down Expand Up @@ -144,18 +144,18 @@ public override bool Execute ()
var config = new WasmAppConfig ();

// Create app
var asmRootPath = Path.Join(AppDir, config.AssemblyRoot);
var asmRootPath = Path.Combine(AppDir, config.AssemblyRoot);
Directory.CreateDirectory(AppDir!);
Directory.CreateDirectory(asmRootPath);
foreach (var assembly in _assemblies)
{
FileCopyChecked(assembly, Path.Join(asmRootPath, Path.GetFileName(assembly)), "Assemblies");
FileCopyChecked(assembly, Path.Combine(asmRootPath, Path.GetFileName(assembly)), "Assemblies");
if (DebugLevel != 0)
{
var pdb = assembly;
pdb = Path.ChangeExtension(pdb, ".pdb");
if (File.Exists(pdb))
FileCopyChecked(pdb, Path.Join(asmRootPath, Path.GetFileName(pdb)), "Assemblies");
FileCopyChecked(pdb, Path.Combine(asmRootPath, Path.GetFileName(pdb)), "Assemblies");
}
}

Expand All @@ -165,10 +165,10 @@ public override bool Execute ()
if (!FileCopyChecked(item.ItemSpec, dest, "NativeAssets"))
return false;
}
FileCopyChecked(MainJS!, Path.Join(AppDir, "runtime.js"), string.Empty);
FileCopyChecked(MainJS!, Path.Combine(AppDir, "runtime.js"), string.Empty);

var html = @"<html><body><script type=""text/javascript"" src=""runtime.js""></script></body></html>";
File.WriteAllText(Path.Join(AppDir, "index.html"), html);
File.WriteAllText(Path.Combine(AppDir, "index.html"), html);

foreach (var assembly in _assemblies)
{
Expand All @@ -190,16 +190,16 @@ public override bool Execute ()
string culture = assembly.GetMetadata("CultureName") ?? string.Empty;
string fullPath = assembly.GetMetadata("Identity");
string name = Path.GetFileName(fullPath);
string directory = Path.Join(AppDir, config.AssemblyRoot, culture);
string directory = Path.Combine(AppDir, config.AssemblyRoot, culture);
Directory.CreateDirectory(directory);
FileCopyChecked(fullPath, Path.Join(directory, name), "SatelliteAssemblies");
FileCopyChecked(fullPath, Path.Combine(directory, name), "SatelliteAssemblies");
config.Assets.Add(new SatelliteAssemblyEntry(name, culture));
}
}

if (FilesToIncludeInFileSystem != null)
{
string supportFilesDir = Path.Join(AppDir, "supportFiles");
string supportFilesDir = Path.Combine(AppDir, "supportFiles");
Directory.CreateDirectory(supportFilesDir);

var i = 0;
Expand All @@ -216,7 +216,7 @@ public override bool Execute ()

var generatedFileName = $"{i++}_{Path.GetFileName(item.ItemSpec)}";

FileCopyChecked(item.ItemSpec, Path.Join(supportFilesDir, generatedFileName), "FilesToIncludeInFileSystem");
FileCopyChecked(item.ItemSpec, Path.Combine(supportFilesDir, generatedFileName), "FilesToIncludeInFileSystem");

var asset = new VfsEntry ($"supportFiles/{generatedFileName}") {
VirtualPath = targetPath
Expand Down Expand Up @@ -246,7 +246,7 @@ public override bool Execute ()
config.Extra[name] = valueObject;
}

string monoConfigPath = Path.Join(AppDir, "mono-config.js");
string monoConfigPath = Path.Combine(AppDir, "mono-config.js");
using (var sw = File.CreateText(monoConfigPath))
{
var json = JsonSerializer.Serialize (config, new JsonSerializerOptions { WriteIndented = true });
Expand Down Expand Up @@ -284,9 +284,9 @@ private bool TryParseExtraConfigValue(ITaskItem extraItem, out object? valueObje
return true;

// Try parsing as a quoted string
if (rawValue!.Length > 1 && rawValue![0] == '"' && rawValue![^1] == '"')
if (rawValue!.Length > 1 && rawValue![0] == '"' && rawValue![rawValue!.Length - 1] == '"')
{
valueObject = rawValue![1..^1];
valueObject = rawValue!.Substring(1, rawValue!.Length - 2);
return true;
}

Expand Down
26 changes: 21 additions & 5 deletions src/tasks/WasmAppBuilder/WasmAppBuilder.csproj
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>$(NetCoreAppToolCurrent)</TargetFramework>
<TargetFrameworks>$(NetCoreAppToolCurrent);net472</TargetFrameworks>
<Nullable>enable</Nullable>
<NoWarn>$(NoWarn),CA1050</NoWarn>

<!-- Ignore nullable warnings on net4* -->
<NoWarn Condition="$(TargetFramework.StartsWith('net4'))">$(NoWarn),CS8604,CS8602</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\Common\NotNullAttribute.cs" Condition="$(TargetFramework.StartsWith('net4'))" />

<PackageReference Include="Microsoft.Build" Version="$(RefOnlyMicrosoftBuildVersion)" />
<PackageReference Include="Microsoft.Build.Framework" Version="$(RefOnlyMicrosoftBuildFrameworkVersion)" />
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="$(RefOnlyMicrosoftBuildTasksCoreVersion)" />
Expand All @@ -13,13 +18,24 @@
</ItemGroup>

<Target Name="PublishBuilder"
AfterTargets="Build"
DependsOnTargets="Publish" />
AfterTargets="Build">

<!-- needed for publishing with multi-targeting. We are publishing essentially to get the SR.MetadataLoadContext.dll :/ -->
<ItemGroup>
<_PublishFramework Include="$(TargetFrameworks)" />
</ItemGroup>
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Publish" Properties="TargetFramework=%(_PublishFramework.Identity)" />
</Target>

<Target Name="GetFilesToPackage" Returns="@(FilesToPackage)">
<ItemGroup>
<FilesToPackage Include="$(OutputPath)$(MSBuildProjectName)*" TargetPath="tasks" />
<FilesToPackage Include="$(PublishDir)System.Reflection.MetadataLoadContext.dll" TargetPath="tasks" />
<_PublishFramework Remove="@(_PublishFramework)" />
<_PublishFramework Include="$(TargetFrameworks)" />

<FilesToPackage Include="$(OutputPath)%(_PublishFramework.Identity)\$(MSBuildProjectName)*"
TargetPath="tasks\%(_PublishFramework.Identity)" />
<FilesToPackage Include="$(OutputPath)%(_PublishFramework.Identity)\publish\System.Reflection.MetadataLoadContext.dll"
TargetPath="tasks\%(_PublishFramework.Identity)" />
</ItemGroup>
</Target>

Expand Down

0 comments on commit 85e4aea

Please sign in to comment.