Simplify CoreRT build

This commit is contained in:
Alex Barney 2020-01-17 00:01:25 -07:00
parent 3c7f1692b7
commit 857bde67ee
4 changed files with 54 additions and 54 deletions

View file

@ -7,7 +7,6 @@ using System.Linq;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Xml.Linq;
using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Zip;
using Nuke.Common; using Nuke.Common;
using Nuke.Common.CI.AppVeyor; using Nuke.Common.CI.AppVeyor;
@ -43,10 +42,9 @@ namespace LibHacBuild
AbsolutePath TempDirectory => RootDirectory / ".tmp"; AbsolutePath TempDirectory => RootDirectory / ".tmp";
AbsolutePath CliCoreDir => TempDirectory / "hactoolnet_netcoreapp3.1"; AbsolutePath CliCoreDir => TempDirectory / "hactoolnet_netcoreapp3.1";
AbsolutePath CliNativeDir => TempDirectory / $"hactoolnet_{HostOsName}"; AbsolutePath CliNativeDir => TempDirectory / $"hactoolnet_{HostOsName}";
AbsolutePath CliNativeExe => CliNativeDir / $"hactoolnet_native{NativeProgramExtension}"; AbsolutePath CliNativeExe => CliNativeDir / $"hactoolnet{NativeProgramExtension}";
AbsolutePath CliCoreZip => ArtifactsDirectory / $"hactoolnet-{VersionString}-netcore.zip"; AbsolutePath CliCoreZip => ArtifactsDirectory / $"hactoolnet-{VersionString}-netcore.zip";
AbsolutePath CliNativeZip => ArtifactsDirectory / $"hactoolnet-{VersionString}-{HostOsName}.zip"; AbsolutePath CliNativeZip => ArtifactsDirectory / $"hactoolnet-{VersionString}-{HostOsName}.zip";
AbsolutePath NugetConfig => RootDirectory / "nuget.config";
Project LibHacProject => _solution.GetProject("LibHac").NotNull(); Project LibHacProject => _solution.GetProject("LibHac").NotNull();
Project LibHacTestProject => _solution.GetProject("LibHac.Tests").NotNull(); Project LibHacTestProject => _solution.GetProject("LibHac.Tests").NotNull();
@ -61,7 +59,6 @@ namespace LibHacBuild
string VersionString { get; set; } string VersionString { get; set; }
Dictionary<string, object> VersionProps { get; set; } = new Dictionary<string, object>(); Dictionary<string, object> VersionProps { get; set; } = new Dictionary<string, object>();
private const string DotNetFeedSource = "https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json";
const string CertFileName = "cert.pfx"; const string CertFileName = "cert.pfx";
public Build() public Build()
@ -270,6 +267,8 @@ namespace LibHacBuild
.Concat(Directory.EnumerateFiles(CliCoreDir, "*.dll")) .Concat(Directory.EnumerateFiles(CliCoreDir, "*.dll"))
.ToArray(); .ToArray();
EnsureExistingDirectory(ArtifactsDirectory);
ZipFiles(CliCoreZip, namesCore); ZipFiles(CliCoreZip, namesCore);
Logger.Normal($"Created {CliCoreZip}"); Logger.Normal($"Created {CliCoreZip}");
@ -352,58 +351,32 @@ namespace LibHacBuild
[SuppressMessage("ReSharper", "PossibleNullReferenceException")] [SuppressMessage("ReSharper", "PossibleNullReferenceException")]
public void BuildNative() public void BuildNative()
{ {
AbsolutePath nativeProject = HactoolnetProject.Path.Parent / "hactoolnet_native.csproj"; string buildType = Untrimmed ? "native-untrimmed" : "native";
try DotNetPublishSettings publishSettings = new DotNetPublishSettings()
.SetConfiguration(Configuration)
.SetProject(HactoolnetProject)
.SetRuntime(NativeRuntime)
.SetOutput(CliNativeDir)
.SetProperties(VersionProps)
.AddProperty("BuildType", buildType);
DotNetPublish(publishSettings);
if (EnvironmentInfo.IsUnix && !Untrimmed)
{ {
File.Copy(HactoolnetProject, nativeProject, true); File.Copy(CliNativeExe, CliNativeExe + "_unstripped");
DotNet("new nuget --force"); ProcessTasks.StartProcess("strip", CliNativeExe).AssertZeroExitCode();
XDocument doc = XDocument.Load(NugetConfig);
doc.Element("configuration").Element("packageSources").Add(new XElement("add",
new XAttribute("key", "myget"), new XAttribute("value", DotNetFeedSource)));
doc.Save(NugetConfig);
DotNet($"add {nativeProject} package Microsoft.DotNet.ILCompiler --version 1.0.0-alpha-*");
DotNetPublishSettings publishSettings = new DotNetPublishSettings()
.SetConfiguration(Configuration)
.SetProject(nativeProject)
.SetFramework("netcoreapp3.1")
.SetRuntime(NativeRuntime)
.SetOutput(CliNativeDir)
.SetProperties(VersionProps);
if (!Untrimmed)
{
publishSettings = publishSettings
.AddProperty("RootAllApplicationAssemblies", false)
.AddProperty("IlcGenerateCompleteTypeMetadata", false)
.AddProperty("IlcGenerateStackTraceData", false)
.AddProperty("IlcFoldIdenticalMethodBodies", true)
;
}
DotNetPublish(publishSettings);
if (EnvironmentInfo.IsUnix && !Untrimmed)
{
ProcessTasks.StartProcess("strip", CliNativeExe).AssertZeroExitCode();
}
ZipFile(CliNativeZip, CliNativeExe, $"hactoolnet{NativeProgramExtension}");
Logger.Normal($"Created {CliNativeZip}");
if (Host == HostType.AppVeyor)
{
PushArtifact(CliNativeZip);
}
} }
finally
EnsureExistingDirectory(ArtifactsDirectory);
ZipFile(CliNativeZip, CliNativeExe, $"hactoolnet{NativeProgramExtension}");
Logger.Normal($"Created {CliNativeZip}");
if (Host == HostType.AppVeyor)
{ {
File.Delete(nativeProject); PushArtifact(CliNativeZip);
File.Delete(NugetConfig);
} }
} }

6
nuget.config Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="dotnet-core" value="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" />
</packageSources>
</configuration>

View file

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.1</TargetFrameworks> <TargetFramework>netcoreapp3.1</TargetFramework>
<LangVersion>8.0</LangVersion> <LangVersion>8.0</LangVersion>
</PropertyGroup> </PropertyGroup>
@ -20,4 +20,25 @@
<ProjectReference Include="..\LibHac\LibHac.csproj" /> <ProjectReference Include="..\LibHac\LibHac.csproj" />
</ItemGroup> </ItemGroup>
<!-- Options for use with CoreRT -->
<ItemGroup Condition=" $(BuildType.StartsWith('native')) ">
<PackageReference Include="Microsoft.DotNet.ILCompiler" Version="1.0.0-alpha-*" />
</ItemGroup>
<PropertyGroup Condition=" $(BuildType.StartsWith('native')) and '$(BuildType)' != 'native-untrimmed' ">
<IlcFoldIdenticalMethodBodies>true</IlcFoldIdenticalMethodBodies>
<IlcGenerateCompleteTypeMetadata>false</IlcGenerateCompleteTypeMetadata>
<IlcOptimizationPreference>Speed</IlcOptimizationPreference>
<RootAllApplicationAssemblies>false</RootAllApplicationAssemblies>
</PropertyGroup>
<ItemGroup Condition=" $(BuildType.StartsWith('native')) and '$(BuildType)' != 'native-untrimmed' ">
<IlcArg Include="--removefeature:EventSource" />
</ItemGroup>
<!-- No-reflection mode doesn't work yet -->
<PropertyGroup Condition=" '$(BuildType)' == 'native-noreflection' ">
<IlcDisableReflection>true</IlcDisableReflection>
</PropertyGroup>
</Project> </Project>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>netcoreapp3.1</TargetFrameworks> <TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
</PropertyGroup> </PropertyGroup>