diff --git a/Makefile b/Makefile
index e6cfa5044bc..6a2d8966393 100644
--- a/Makefile
+++ b/Makefile
@@ -81,10 +81,7 @@ include build-tools/scripts/runtime-helpers.mk
.PHONY: prepare
prepare: install-dotnet
- $(call SYSTEM_DOTNET_BINLOG,prepare-bootstrap) Xamarin.Android.BootstrapTasks.sln
- $(call SYSTEM_DOTNET_BINLOG,prepare-workloads) src/workloads/workloads.csproj
- $(call DOTNET_BINLOG,prepare-java.interop) $(SOLUTION) -t:PrepareJavaInterop
- $(call SYSTEM_DOTNET_BINLOG,prepare-build-tools-inventory) build-tools/build-tools-inventory/build-tools-inventory.proj
+ $(call SYSTEM_DOTNET_BINLOG,prepare) build-tools/scripts/Prepare.proj -t:Prepare
.PHONY: install-dotnet
install-dotnet:
diff --git a/Xamarin.Android.BootstrapTasks.sln b/Xamarin.Android.BootstrapTasks.sln
deleted file mode 100644
index 032ccf098ac..00000000000
--- a/Xamarin.Android.BootstrapTasks.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29411.108
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "xa-prep-tasks", "build-tools\xa-prep-tasks\xa-prep-tasks.csproj", "{7CE69551-BD73-4726-ACAA-AAF89C84BAF8}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.Tools.BootstrapTasks", "build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj", "{E8492EFB-D14A-4F32-AA28-88848322ECEA}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {7CE69551-BD73-4726-ACAA-AAF89C84BAF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7CE69551-BD73-4726-ACAA-AAF89C84BAF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7CE69551-BD73-4726-ACAA-AAF89C84BAF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7CE69551-BD73-4726-ACAA-AAF89C84BAF8}.Release|Any CPU.Build.0 = Release|Any CPU
- {E8492EFB-D14A-4F32-AA28-88848322ECEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E8492EFB-D14A-4F32-AA28-88848322ECEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E8492EFB-D14A-4F32-AA28-88848322ECEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E8492EFB-D14A-4F32-AA28-88848322ECEA}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {368B5B8B-7CA0-4D02-B36A-95CF69A960CD}
- EndGlobalSection
-EndGlobal
diff --git a/before.Xamarin.Android.sln.targets b/before.Xamarin.Android.sln.targets
index 2df7f564816..6aaaa1674a1 100644
--- a/before.Xamarin.Android.sln.targets
+++ b/before.Xamarin.Android.sln.targets
@@ -1,7 +1,6 @@
-
+
-
\ No newline at end of file
diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
index c53a9f415f1..2c266329791 100644
--- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
+++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
@@ -19,7 +19,6 @@
-
diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.cs
deleted file mode 100644
index 65a1f15ad31..00000000000
--- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-using Xamarin.Android.BuildTools.PrepTasks;
-
-namespace Xamarin.Android.Tools.BootstrapTasks
-{
- public class Android : PathToolTask
- {
- public string Arguments { get; set; }
-
- [Output]
- public string[] Output { get; set; }
-
- protected virtual bool LogTaskMessages {
- get { return true; }
- }
-
- protected override string ToolBaseName {
- get { return "android"; }
- }
-
- List lines;
- List Lines {
- get { return lines ?? (lines = new List ()); }
- }
-
- public override bool Execute ()
- {
- if (LogTaskMessages) {
- Log.LogMessage (MessageImportance.Low, $"Task {nameof (Android)}");
- Log.LogMessage (MessageImportance.Low, $" {nameof (Arguments)}: {Arguments}");
- }
-
- base.Execute ();
-
- Output = lines?.ToArray ();
-
- if (LogTaskMessages) {
- Log.LogMessage (MessageImportance.Low, $" [Output] {nameof (Output)}:");
- foreach (var line in (Output ?? Array.Empty ()))
- Log.LogMessage (MessageImportance.Low, $" {line}");
- }
-
- return !Log.HasLoggedErrors;
- }
-
- protected override string GenerateCommandLineCommands ()
- {
- return Arguments;
- }
-
- protected override void LogEventsFromTextOutput (string singleLine, MessageImportance messageImportance)
- {
- base.LogEventsFromTextOutput (singleLine, messageImportance);
- Lines.Add (singleLine);
- }
- }
-}
-
diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs
index 64bf1e29dd5..fc13f6ca746 100644
--- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs
+++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs
@@ -267,7 +267,7 @@ void dataReceived (object sender, DataReceivedEventArgs args)
LogError ($"CheckApiCompatibility found nonacceptable Api breakages for ApiLevel: {ApiLevel}.{Environment.NewLine}{string.Join (Environment.NewLine, lines)}");
ReportMissingLines (acceptableIssuesFile.FullName, lines);
- var missingItems = CodeGenDiff.GenerateMissingItems (CodeGenPath, contractAssembly.FullName, implementationAssembly.FullName, JdkInfo.CreateTaskLogger (this));
+ var missingItems = CodeGenDiff.GenerateMissingItems (CodeGenPath, contractAssembly.FullName, implementationAssembly.FullName, CreateTaskLogger (this));
if (missingItems.Any ()) {
Log.LogMessage (MessageImportance.High, $"{Environment.NewLine}*** CodeGen missing items***{Environment.NewLine}");
var indent = 0;
@@ -291,6 +291,23 @@ void dataReceived (object sender, DataReceivedEventArgs args)
}
}
+ static Action CreateTaskLogger (Task task)
+ {
+ return (level, value) => {
+ switch (level) {
+ case TraceLevel.Error:
+ task.Log.LogError (value);
+ break;
+ case TraceLevel.Warning:
+ task.Log.LogWarning (value);
+ break;
+ default:
+ task.Log.LogMessage (MessageImportance.Low, "{0}", value);
+ break;
+ }
+ };
+ }
+
void ReportMissingLines (string acceptableIssuesFile, List lines)
{
if (string.IsNullOrWhiteSpace (LinesToAdd)) {
diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.cs
deleted file mode 100644
index 4e0c40a8252..00000000000
--- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-using Xamarin.Android.BuildTools.PrepTasks;
-
-namespace Xamarin.Android.Tools.BootstrapTasks
-{
- public class Emulator : PathToolTask
- {
- public string Arguments { get; set; }
-
- [Output]
- public string[] Output { get; set; }
-
- protected virtual bool LogTaskMessages {
- get { return true; }
- }
-
- protected override string ToolBaseName {
- get { return "emulator"; }
- }
-
- List lines;
- List Lines {
- get { return lines ?? (lines = new List ()); }
- }
-
- public override bool Execute ()
- {
- if (LogTaskMessages) {
- Log.LogMessage (MessageImportance.Low, $"Task {nameof (Emulator)}");
- Log.LogMessage (MessageImportance.Low, $" {nameof (Arguments)}: {Arguments}");
- }
-
- base.Execute ();
-
- Output = lines?.ToArray ();
-
- if (LogTaskMessages) {
- Log.LogMessage (MessageImportance.Low, $" [Output] {nameof (Output)}:");
- foreach (var line in (Output ?? Array.Empty ()))
- Log.LogMessage (MessageImportance.Low, $" {line}");
- }
-
- return !Log.HasLoggedErrors;
- }
-
- protected override string GenerateCommandLineCommands ()
- {
- return Arguments;
- }
-
- protected override void LogEventsFromTextOutput (string singleLine, MessageImportance messageImportance)
- {
- base.LogEventsFromTextOutput (singleLine, messageImportance);
- Lines.Add (singleLine);
- }
- }
-}
-
diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.cs
index 72ec0abe662..805e5c445e9 100644
--- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.cs
+++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.cs
@@ -2,7 +2,6 @@
using System;
using System.IO;
-using System.Globalization;
using System.Linq;
using System.Xml;
using Microsoft.Build.Framework;
@@ -44,10 +43,18 @@ public override bool Execute ()
var minVersion = ToVersion (MinimumApiLevel);
var targetVersion = ToVersion (TargetApiLevel);
- var versions = new AndroidVersions (AndroidApiInfo.Select (ToAndroidVersion));
+ var versions = AndroidApiInfo.Select (ToAndroidVersion).ToArray ();
+ var stableVersions = versions
+ .Where (version => version.Stable)
+ .ToArray ();
+ if (stableVersions.Length == 0) {
+ Log.LogError ("No @(AndroidApiInfo) items are marked as stable.");
+ return false;
+ }
+ var maxStableVersion = stableVersions.MaxBy (version => version.TargetFrameworkVersion);
var targetApiLevel = targetVersion != null && targetVersion.Major > 0
? targetVersion
- : versions.MaxStableVersion!.VersionCodeFull;
+ : maxStableVersion.VersionCodeFull;
var settings = new XmlWriterSettings {
OmitXmlDeclaration = true,
Indent = true,
@@ -81,11 +88,11 @@ public override bool Execute ()
writer.WriteEndElement (); //
writer.WriteStartElement ("ItemGroup");
- foreach (Version versionCode in versions.InstalledBindingVersions
- .Where (v => v.VersionCodeFull >= minVersion)
- .Select (v => v.VersionCodeFull)
+ foreach (Version versionCode in versions
+ .Select (version => version.VersionCodeFull)
+ .Where (version => version >= minVersion)
.Distinct ()
- .OrderBy (v => v)) {
+ .OrderBy (version => version)) {
writer.WriteStartElement ("AndroidSdkSupportedTargetPlatformVersion");
writer.WriteAttributeString ("Include", versionCode.ToString ());
if (versionCode < targetVersion) {
@@ -116,7 +123,7 @@ public override bool Execute ()
return null;
}
- static AndroidVersion ToAndroidVersion (ITaskItem item)
+ static (Version VersionCodeFull, Version TargetFrameworkVersion, bool Stable) ToAndroidVersion (ITaskItem item)
{
/*
@@ -131,9 +138,12 @@ static AndroidVersion ToAndroidVersion (ITaskItem item)
if (!Version.TryParse (item.GetMetadata ("VersionCodeFull"), out var versionCodeFull)) {
throw new ArgumentException ($"Invalid VersionCodeFull '{item.GetMetadata ("VersionCodeFull")}' for item '{item.ItemSpec}'");
}
+ if (!Version.TryParse (item.ItemSpec.TrimStart ('v'), out var targetFrameworkVersion)) {
+ throw new ArgumentException ($"Invalid framework version '{item.ItemSpec}'");
+ }
bool.TryParse (item.GetMetadata ("Stable"), out bool stable);
- return new AndroidVersion (versionCodeFull, item.ItemSpec.TrimStart ('v'), item.GetMetadata ("Name"), item.GetMetadata ("Id"), stable);
+ return (versionCodeFull, targetFrameworkVersion, stable);
}
}
}
diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.cs
deleted file mode 100644
index 2d5d88ecaf0..00000000000
--- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-namespace Xamarin.Android.Tools.BootstrapTasks
-{
- public class JdkInfo : Task
- {
- [Required]
- public ITaskItem Output { get; set; }
-
- public string AndroidNdkPath { get; set; }
-
- public string AndroidSdkPath { get; set; }
-
- public string JavaSdkPath { get; set; }
-
- public string MaxJdkVersion { get; set; }
-
- [Output]
- public string JavaSdkDirectory { get; set; }
-
- public override bool Execute ()
- {
- var logger = CreateTaskLogger (this);
- var androidSdk = new AndroidSdkInfo (logger, AndroidSdkPath, AndroidNdkPath, JavaSdkPath);
- try {
- Log.LogMessage (MessageImportance.Low, $" {nameof (androidSdk.JavaSdkPath)}: {androidSdk.JavaSdkPath}");
-
- Version maxVersion;
- if (string.IsNullOrEmpty (MaxJdkVersion)) {
- maxVersion = new Version ("8.0");
- } else {
- maxVersion = new Version (MaxJdkVersion);
- }
-
- var defaultJdk = new [] { new Tools.JdkInfo (androidSdk.JavaSdkPath) };
- var jdk = defaultJdk.Concat (Tools.JdkInfo.GetKnownSystemJdkInfos (logger))
- .Where (j => maxVersion != null ? j.Version <= maxVersion : true)
- .Where (j => j.IncludePath.Any ())
- .FirstOrDefault ();
-
- if (jdk == null) {
- Log.LogError ($"Could not determine a valid JavaSdkPath, `{androidSdk.JavaSdkPath}` was not compatible with the .NET for Android build.");
- return false;
- } else {
- Log.LogMessage (MessageImportance.Low, $" {nameof (jdk.HomePath)}: {jdk.HomePath}");
- }
-
- var includes = new List (jdk.IncludePath);
- var includeXmlTags = new StringBuilder ();
- foreach (var include in includes) {
- includeXmlTags.AppendLine ($"");
- }
-
- Directory.CreateDirectory (Path.GetDirectoryName (Output.ItemSpec));
- File.WriteAllText (Output.ItemSpec, $@"
-
-
-
- {jdk.JdkJvmPath}
-
-
- {includeXmlTags}
-
-
-
-
- {jdk.JavacPath}
- {jdk.JarPath}
-
-");
-
- JavaSdkDirectory = jdk.HomePath;
- Log.LogMessage (MessageImportance.Low, $" [Output] {nameof (JavaSdkDirectory)}: {JavaSdkDirectory}");
-
- return !Log.HasLoggedErrors;
- }
- finally {
- }
- }
-
- internal static Action CreateTaskLogger (Task task)
- {
- Action logger = (level, value) => {
- switch (level) {
- case TraceLevel.Error:
- task.Log.LogError (value);
- break;
- case TraceLevel.Warning:
- task.Log.LogWarning (value);
- break;
- default:
- task.Log.LogMessage (MessageImportance.Low, "{0}", value);
- break;
- }
- };
- return logger;
- }
- }
-}
diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml
index d7406c1f7c0..6f723944fa5 100644
--- a/build-tools/automation/azure-pipelines.yaml
+++ b/build-tools/automation/azure-pipelines.yaml
@@ -395,9 +395,9 @@ extends:
destinationPath: $(Build.StagingDirectory)\nuget-signed
- task: DotNetCoreCLI@2
- displayName: build Xamarin.Android.Tools.BootstrapTasks.sln
+ displayName: build Xamarin.Android.Tools.BootstrapTasks.csproj
inputs:
- projects: $(System.DefaultWorkingDirectory)\Xamarin.Android.BootstrapTasks.sln
+ projects: $(System.DefaultWorkingDirectory)\build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj
arguments: -c $(XA.Build.Configuration) -bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\bootstrap.binlog
condition: and(succeeded(), eq('${{ parameters.pushXAPackagesToMaestro }}', 'true'))
diff --git a/build-tools/scripts/PrepareWindows.targets b/build-tools/scripts/Prepare.proj
similarity index 52%
rename from build-tools/scripts/PrepareWindows.targets
rename to build-tools/scripts/Prepare.proj
index f4d0954e0ed..f2622ff1313 100644
--- a/build-tools/scripts/PrepareWindows.targets
+++ b/build-tools/scripts/Prepare.proj
@@ -1,26 +1,38 @@
-
- Debug
<_TopDir>$(MSBuildThisFileDirectory)..\..
-
+
+
+
+
+ DependsOnTargets="_InstallDotNet">
+
+
-
-
-
+