diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/Aot.cs b/src/Xamarin.Android.Build.Tasks/Tasks/Aot.cs index 97d7388e193..acc5fef88ca 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/Aot.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/Aot.cs @@ -304,7 +304,7 @@ IEnumerable GetAotConfigs () outdir = Path.Combine (AotOutputDirectory, "arm64-v8a"); mtriple = "aarch64-linux-android"; arch = AndroidTargetArch.Arm64; - break; + break; case "x86": aotCompiler = Path.Combine (sdkBinDirectory, "cross-x86"); @@ -366,21 +366,21 @@ IEnumerable GetAotConfigs () var libs = new List(); if (NdkUtil.UsingClangNDK) { - libs.Add ($"-L{toolchainLibDir}"); - libs.Add ($"-L{androidLibPath}"); + libs.Add ($"-L{toolchainLibDir.TrimEnd ('\\')}"); + libs.Add ($"-L{androidLibPath.TrimEnd ('\\')}"); if (arch == AndroidTargetArch.Arm) { // Needed for -lunwind to work string compilerLibDir = Path.Combine (toolchainPath, "..", "sysroot", "usr", "lib", NdkUtil.GetArchDirName (arch)); - libs.Add ($"-L{compilerLibDir}"); + libs.Add ($"-L{compilerLibDir.TrimEnd ('\\')}"); } } - libs.Add ($"\\\"{Path.Combine (toolchainLibDir, "libgcc.a")}\\\""); - libs.Add ($"\\\"{Path.Combine (androidLibPath, "libc.so")}\\\""); - libs.Add ($"\\\"{Path.Combine (androidLibPath, "libm.so")}\\\""); + libs.Add (Path.Combine (toolchainLibDir, "libgcc.a")); + libs.Add (Path.Combine (androidLibPath, "libc.so")); + libs.Add (Path.Combine (androidLibPath, "libm.so")); - ldFlags = string.Join(";", libs); + ldFlags = $"\\\"{string.Join("\\\";\\\"", libs)}\\\""; } string ldName = String.Empty; @@ -466,7 +466,7 @@ IEnumerable GetAotConfigs () } } } - + bool RunAotCompiler (string assembliesPath, string aotCompiler, string aotOptions, string assembly, string responseFile) { var stdout_completed = new ManualResetEvent (false); @@ -487,7 +487,7 @@ bool RunAotCompiler (string assembliesPath, string aotCompiler, string aotOption WindowStyle=ProcessWindowStyle.Hidden, WorkingDirectory = WorkingDirectory, }; - + // we do not want options to be provided out of band to the cross compilers psi.EnvironmentVariables ["MONO_ENV_OPTIONS"] = String.Empty; // the C code cannot parse all the license details, including the activation code that tell us which license level is allowed diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs index 8b771c94c70..bb8e58a32d1 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs @@ -7,6 +7,7 @@ using Mono.Cecil; using NUnit.Framework; using Xamarin.ProjectTools; +using Xamarin.Android.Build; namespace Xamarin.Android.Build.Tests { @@ -14,6 +15,41 @@ namespace Xamarin.Android.Build.Tests [Parallelizable (ParallelScope.Children)] public class AotTests : BaseTest { + public string SdkWithSpacesPath { + get { + return Path.Combine (Root, "temp", string.Format ("SDK Ümläüts")); + } + } + + [OneTimeSetUp] + public void Setup () + { + if (!IsWindows) + return; + + var sdkPath = AndroidSdkPath; + var ndkPath = AndroidNdkPath; + + var symSdkPath = Path.Combine (SdkWithSpacesPath, "sdk"); + var symNdkPath = Path.Combine (SdkWithSpacesPath, "ndk"); + + SymbolicLink.Create (symSdkPath, sdkPath); + SymbolicLink.Create (symNdkPath, ndkPath); + + Environment.SetEnvironmentVariable ("TEST_ANDROID_SDK_PATH", symSdkPath); + Environment.SetEnvironmentVariable ("TEST_ANDROID_NDK_PATH", symNdkPath); + } + + [OneTimeTearDown] + public void TearDown () + { + if (!IsWindows) + return; + Environment.SetEnvironmentVariable ("TEST_ANDROID_SDK_PATH", ""); + Environment.SetEnvironmentVariable ("TEST_ANDROID_NDK_PATH", ""); + Directory.Delete (SdkWithSpacesPath, recursive: true); + } + [Test, Category ("SmokeTests")] public void BuildBasicApplicationReleaseProfiledAot () { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj index 8cef187dea6..e5564231596 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj @@ -28,6 +28,7 @@ + ..\Expected\GenerateDesignerFileExpected.cs PreserveNewest diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidSdkResolver.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidSdkResolver.cs index c037ec07643..6fdb866bc38 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidSdkResolver.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidSdkResolver.cs @@ -22,7 +22,9 @@ static string GetPathFromRegistry (string valueName) public static string GetAndroidSdkPath () { - var sdkPath = Environment.GetEnvironmentVariable ("ANDROID_SDK_PATH"); + var sdkPath = Environment.GetEnvironmentVariable ("TEST_ANDROID_SDK_PATH"); + if (String.IsNullOrEmpty (sdkPath)) + sdkPath = Environment.GetEnvironmentVariable ("ANDROID_SDK_PATH"); if (String.IsNullOrEmpty (sdkPath)) sdkPath = GetPathFromRegistry ("AndroidSdkDirectory"); if (String.IsNullOrEmpty (sdkPath)) @@ -34,7 +36,9 @@ public static string GetAndroidSdkPath () public static string GetAndroidNdkPath () { - var ndkPath = Environment.GetEnvironmentVariable ("ANDROID_NDK_PATH"); + var ndkPath = Environment.GetEnvironmentVariable ("TEST_ANDROID_NDK_PATH"); + if (String.IsNullOrEmpty (ndkPath)) + ndkPath = Environment.GetEnvironmentVariable ("ANDROID_NDK_PATH"); if (String.IsNullOrEmpty (ndkPath)) ndkPath = GetPathFromRegistry ("AndroidNdkDirectory"); if (String.IsNullOrEmpty (ndkPath))