forked from dotnet/source-build
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This chnage allows source-build to be cloned and built on arm64 machines. It shouldn't affect cross compilation at all, however. I have tested this on RHEL 8 aarch64. This change includes backports of the following pull-requests which have been merged into their respective master branches: - dotnet/aspnetcore#14790 - dotnet/aspnetcore#15354 - dotnet/installer#4102 - dotnet/core-setup#8468 - dotnet/corefx#40453 To support using darc on arm64, this commit removes the customizations of LD_LIBRARY_PATH and instead forces darc to run again a .NET Core 3.0 runtime. This in-turn makes darc pick up the right libgit2sharp automatically for the right set of platforms and architectures. There's a number of existing build configuration that are conditionalized on arm64, such as setting up a root file system. Those they are actually only meant to be invoked when cross-compiling for arm64 (on x86_64). This commit modifies those conditions to not apply when building on an arm64 machine.
- Loading branch information
Showing
15 changed files
with
417 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
33 changes: 33 additions & 0 deletions
33
patches/aspnetcore/0011-Support-global.json-on-arm64-as-well.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
From 84d274a8f3d416b0a5bd999e3d1c43ae1535e38f Mon Sep 17 00:00:00 2001 | ||
From: Omair Majid <omajid@redhat.com> | ||
Date: Wed, 23 Oct 2019 15:43:57 -0400 | ||
Subject: [PATCH] Support global.json on arm64 as well | ||
|
||
arcade uses the runtime section of global.json to decide which | ||
architecture + runtime combination needs to be installed. | ||
|
||
With https://github.com/dotnet/arcade/pull/4132 arcade can install | ||
foreign SDKs in separate locations correctly. | ||
|
||
This change, suggested by @dougbu, makes arcade always install the | ||
runtime for the local architecture (which means it should work on arm64 | ||
and x64) as well as the x86 architecture (skipped on Linux). | ||
|
||
This gets us a working SDK/Runtime combo on arm64. | ||
--- | ||
global.json | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
diff --git a/global.json b/global.json | ||
index 602f4f44e17..40dec559cc9 100644 | ||
--- a/global.json | ||
+++ b/global.json | ||
@@ -5,7 +5,7 @@ | ||
"tools": { | ||
"dotnet": "3.0.100", | ||
"runtimes": { | ||
- "dotnet/x64": [ | ||
+ "dotnet": [ | ||
"$(MicrosoftNETCoreAppRuntimeVersion)" | ||
], | ||
"dotnet/x86": [ |
85 changes: 85 additions & 0 deletions
85
patches/aspnetcore/0012-Support-building-for-arm64-on-arm64-nix.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
From e2946a26c11be7f7f0c223721a5b14f58f2ea240 Mon Sep 17 00:00:00 2001 | ||
From: Omair Majid <omajid@redhat.com> | ||
Date: Mon, 11 Nov 2019 13:37:40 -0500 | ||
Subject: [PATCH] Support building for arm64 on arm64 (*nix) | ||
|
||
This commit allows ASP.NET Core to be built on arm64 machines directly, | ||
without relying on cross-compilation. | ||
|
||
There's a few changes in here: | ||
|
||
1. Ask msbuild to look into the BuildArchitecture | ||
|
||
By default, our build systems assums the machine is x64. This | ||
modifies the build configuration to check the architecture of the | ||
currently running build machine, and set BuildArchitecture to that. | ||
|
||
2. Fix crossgen in Microsoft.AspNetCore.App.Runtime | ||
|
||
We run crossgen for supported architectures (including x64 and | ||
arm64). For that, we need a jit that we can point crossgen to. | ||
Generally, we can rely on the build scripts to find the right | ||
`libclrjit.so`. However, arm64 has multiple `libclirjit.so`, for | ||
different use-cases. There's one for arm64 (for running on arm64) and | ||
there's another one for cross-compiling for arm64 on x64. We need to | ||
figure out and use the right one explicitly rather than assuming the | ||
right one gets picked up. | ||
|
||
See https://github.com/dotnet/core-setup/pull/8468 for similar | ||
changes made in core-setup. | ||
|
||
This also needs https://github.com/aspnet/AspNetCore/pull/14790 to fully | ||
work on arm64. | ||
--- | ||
Directory.Build.props | 1 + | ||
.../src/Microsoft.AspNetCore.App.Runtime.csproj | 12 ++++++++---- | ||
2 files changed, 9 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/Directory.Build.props b/Directory.Build.props | ||
index b3dc903387f..1bd59d73121 100644 | ||
--- a/Directory.Build.props | ||
+++ b/Directory.Build.props | ||
@@ -108,6 +108,7 @@ | ||
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('Windows'))">win</TargetOsName> | ||
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('OSX'))">osx</TargetOsName> | ||
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('Linux'))">linux</TargetOsName> | ||
+ <BuildArchitecture>$([System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture.ToString().ToLowerInvariant())</BuildArchitecture> | ||
<TargetArchitecture Condition="'$(TargetArchitecture)' == ''">x64</TargetArchitecture> | ||
<TargetRuntimeIdentifier>$(TargetOsName)-$(TargetArchitecture)</TargetRuntimeIdentifier> | ||
|
||
diff --git a/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj b/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj | ||
index 4c4298a92da..f843ded1241 100644 | ||
--- a/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj | ||
+++ b/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj | ||
@@ -90,15 +90,17 @@ This package is an internal implementation of the .NET Core SDK and is not meant | ||
<PathSeparator Condition="'$(PathSeparator)' == ''">:</PathSeparator> | ||
<PathSeparator Condition=" '$(TargetOsName)' == 'win' ">%3B</PathSeparator> | ||
|
||
+ <CrossCompileDirectory Condition=" '$(TargetRuntimeIdentifier)' == 'linux-arm' ">x64_arm</CrossCompileDirectory> | ||
+ <CrossCompileDirectory Condition=" '$(TargetArchitecture)' == 'arm64' AND '$(BuildArchitecture)' != 'arm64' ">x64_arm64</CrossCompileDirectory> | ||
+ <CrossCompileDirectory Condition=" '$(TargetRuntimeIdentifier)' == 'win-arm' ">x86_arm</CrossCompileDirectory> | ||
+ | ||
<!-- Crossgen executable name --> | ||
<CrossgenToolFileName>crossgen</CrossgenToolFileName> | ||
<CrossgenToolFileName Condition=" '$(TargetOsName)' == 'win' ">$(CrossgenToolFileName).exe</CrossgenToolFileName> | ||
<!-- Default crossgen executable relative path --> | ||
<CrossgenToolPackagePath>$(CrossgenToolFileName)</CrossgenToolPackagePath> | ||
<!-- Disambiguated RID-specific crossgen executable relative path --> | ||
- <CrossgenToolPackagePath Condition=" '$(TargetRuntimeIdentifier)' == 'linux-arm' ">x64_arm\$(CrossgenToolPackagePath)</CrossgenToolPackagePath> | ||
- <CrossgenToolPackagePath Condition=" '$(TargetRuntimeIdentifier)' == 'linux-arm64' OR '$(TargetRuntimeIdentifier)' == 'linux-musl-arm64' ">x64_arm64\$(CrossgenToolPackagePath)</CrossgenToolPackagePath> | ||
- <CrossgenToolPackagePath Condition=" '$(TargetRuntimeIdentifier)' == 'win-arm' ">x86_arm\$(CrossgenToolPackagePath)</CrossgenToolPackagePath> | ||
+ <CrossgenToolPackagePath Condition=" '$(CrossCompileDirectory)' != '' ">$(CrossCompileDirectory)\$(CrossgenToolPackagePath)</CrossgenToolPackagePath> | ||
|
||
<MicrosoftNETCoreAppRuntimeIdentifier>$(RuntimeIdentifier)</MicrosoftNETCoreAppRuntimeIdentifier> | ||
<MicrosoftNETCoreAppRuntimeIdentifier Condition="'$(TargetOsName)' != 'osx'">$(SourceBuildRuntimeIdentifier)</MicrosoftNETCoreAppRuntimeIdentifier> | ||
@@ -293,7 +295,9 @@ This package is an internal implementation of the .NET Core SDK and is not meant | ||
<PropertyGroup> | ||
<CrossgenToolDir>$(IntermediateOutputPath)crossgen\</CrossgenToolDir> | ||
<CrossgenPlatformAssembliesDir>$(IntermediateOutputPath)platformAssemblies\</CrossgenPlatformAssembliesDir> | ||
- <CoreCLRJitPath>$(CrossgenToolDir)$(LibPrefix)clrjit$(LibExtension)</CoreCLRJitPath> | ||
+ <!-- Pick the right coreclr jit based on whether we are cross-compiling or not --> | ||
+ <CoreCLRJitPath Condition="'$(CrossCompileDirectory)' == ''">$(RuntimePackageRoot)runtimes\$(RuntimeIdentifier)\native\$(LibPrefix)clrjit$(LibExtension)</CoreCLRJitPath> | ||
+ <CoreCLRJitPath Condition="'$(CrossCompileDirectory)' != ''">$(RuntimepackageRoot)runtimes\$(CrossCompileDirectory)\native\$(LibPrefix)clrjit$(LibExtension)</CoreCLRJitPath> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> |
Oops, something went wrong.