diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets index de6970db4d0..685e42403f5 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets @@ -7,9 +7,13 @@ This file contains the NativeAOT-specific MSBuild logic for .NET for Android. --> + + <_AndroidRuntimePackRuntime>NativeAOT + + true @@ -32,16 +36,14 @@ This file contains the NativeAOT-specific MSBuild logic for .NET for Android. <_NdkAbi Condition=" '$(RuntimeIdentifier)' == 'android-arm64' ">aarch64 <_NdkAbi Condition=" '$(RuntimeIdentifier)' == 'android-x64' ">x86_64 - <_NdkSysrootAbi>$(_NdkAbi)-linux-android - <_NdkClangPrefix>$(_NdkAbi)-linux-android21- + <_NdkSysrootAbi>$(_NdkAbi)-linux-android <_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('windows')) ">windows-x86_64 <_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('osx')) ">darwin-x86_64 <_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('linux')) ">linux-x86_64 <_NdkSysrootDir>$(_AndroidNdkDirectory)toolchains/llvm/prebuilt/$(_NdkPrebuiltAbi)/sysroot/usr/lib/$(_NdkSysrootAbi)/ <_NdkBinDir>$(_AndroidNdkDirectory)toolchains/llvm/prebuilt/$(_NdkPrebuiltAbi)/bin/ - $(_NdkBinDir)$(_NdkClangPrefix)clang++ - $(CppCompilerAndLinker) - $(_NdkBinDir)llvm-objcopy + clang++ + llvm-objcopy true @@ -66,6 +68,8 @@ This file contains the NativeAOT-specific MSBuild logic for .NET for Android. lld + + diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/SetNdkPathForIlc.cs b/src/Xamarin.Android.Build.Tasks/Tasks/SetNdkPathForIlc.cs new file mode 100644 index 00000000000..d301d8b12cb --- /dev/null +++ b/src/Xamarin.Android.Build.Tasks/Tasks/SetNdkPathForIlc.cs @@ -0,0 +1,27 @@ +using System; +using System.IO; +using Microsoft.Android.Build.Tasks; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +namespace Xamarin.Android.Tasks; + +/// +/// NativeAOT's compiler (ILC) expects to find tooling in $PATH +/// +public class SetNdkPathForIlc : AndroidTask +{ + public override string TaskPrefix => "SILC"; + + [Required] + public string NdkBinDirectory { get; set; } = ""; + + public override bool RunTask () + { + var ndkbin = Path.GetFullPath (NdkBinDirectory); + var path = $"{ndkbin}{Path.PathSeparator}{Environment.GetEnvironmentVariable ("PATH")}"; + Log.LogDebugMessage ($"Setting $PATH to: {path}"); + Environment.SetEnvironmentVariable ("PATH", path); + return !Log.HasLoggedErrors; + } +} diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs index 59f618eb39c..539142c14b8 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs @@ -108,12 +108,6 @@ public void BuildBasicApplication ([Values (true, false)] bool isRelease, [Value [Test] public void NativeAOT () { - if (IsWindows) { - // Microsoft.NETCore.Native.Publish.targets(61,5): Cross-OS native compilation is not supported. - // Set $(DisableUnsupportedError)=true, Microsoft.NETCore.Native.Unix.targets(296,5): error : Platform linker ('C:\Android\android-sdk\ndk\26.3.11579264\toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android21-clang++' or 'gcc') not found in PATH. Ensure you have all the required prerequisites documented at https://aka.ms/nativeaot-prerequisites. - Assert.Ignore ("This test is not valid on Windows."); - } - var proj = new XamarinAndroidApplicationProject { ProjectName = "Hello", IsRelease = true,