This PR is a part of #35123.
This PR achieves two things:
1. Migrates Apple and Android AppBuilder and TestRunner binaries to `<repo-root>/artifacts/bin`
2. Add property paths for Apple and Android AppBuilder and TestRunner projects and binaries
After changes, when building `./build.sh -os iOS -subset Mono+Libs+Libs.Tests`, binary files are no longer produced in `<repo-root>/src/mono/msbuild/`. Instead, they can be found in `<repo-root>/artifacts/bin/`
<_withoutCategories Condition="!$(_withCategories.Contains('failing'))">$(_withoutCategories);failing</_withoutCategories>
</PropertyGroup>
+ <PropertyGroup>
+ <AppleAppBuilder>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AppleAppBuilder'))</AppleAppBuilder>
+ <AppleTestRunner>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AppleTestRunner'))</AppleTestRunner>
+ <AndroidAppBuilder>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AndroidAppBuilder'))</AndroidAppBuilder>
+ <AndroidTestRunner>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AndroidTestRunner'))</AndroidTestRunner>
+ </PropertyGroup>
+
<!--
Unit/Functional/Integration test support.
Supported runners: xunit.
<!-- Generate a self-contained app bundle for Android with tests.
This target is executed once build is done for a test lib (after CopyFilesToOutputDirectory target) -->
<UsingTask TaskName="AndroidAppBuilderTask"
- AssemblyFile="$(ArtifactsObjDir)mono\AndroidAppBuilder\$(HostArch)\$(Configuration)\AndroidAppBuilder.dll" />
+ AssemblyFile="$(AndroidAppBuilder)\$(HostArch)\$(Configuration)\AndroidAppBuilder.dll" />
<Target Condition="'$(TargetOS)' == 'Android'" Name="BundleTestAndroidApp" AfterTargets="CopyFilesToOutputDirectory">
<PropertyGroup>
<BundleDir>$(OutDir)\Bundle</BundleDir>
- <AndroidTestRunner>$(RepoRoot)\src\mono\msbuild\AndroidTestRunner\bin</AndroidTestRunner>
<AndroidAbi Condition="'$(TargetArchitecture)'=='arm64'">arm64-v8a</AndroidAbi>
<AndroidAbi Condition="'$(TargetArchitecture)'=='arm'">armeabi</AndroidAbi>
<AndroidAbi Condition="'$(TargetArchitecture)'=='x64'">x86_64</AndroidAbi>
<!-- Generate a self-contained app bundle for iOS with tests.
This target is executed once build is done for a test lib (after CopyFilesToOutputDirectory target) -->
<UsingTask TaskName="AppleAppBuilderTask"
- AssemblyFile="$(ArtifactsObjDir)mono\AppleAppBuilder\$(HostArch)\$(Configuration)\AppleAppBuilder.dll" />
+ AssemblyFile="$(AppleAppBuilder)\$(HostArch)\$(Configuration)\AppleAppBuilder.dll" />
<Target Condition="'$(TargetOS)' == 'iOS'" Name="BundleTestAppleApp" AfterTargets="CopyFilesToOutputDirectory">
<PropertyGroup>
<BundleDir>$(OutDir)\Bundle</BundleDir>
- <AppleTestRunner>$(RepoRoot)\src\mono\msbuild\AppleTestRunner\bin</AppleTestRunner>
</PropertyGroup>
<!-- We need to copy additional stuff into $(OutDir)\Bundle
1) The whole BCL
<MonoObjDir>$(ArtifactsObjDir)mono/$(PlatformConfigPathPart)/</MonoObjDir>
<MonoLLVMDir Condition="('$(MonoEnableLLVM)' == 'true' or '$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'tvOS' or '$(TargetOS)' == 'Browser') and '$(MonoLLVMDir)' == ''">$(MonoObjDir)llvm</MonoLLVMDir>
</PropertyGroup>
+
+ <!-- Paths for Mobile App Projects -->
+ <PropertyGroup>
+ <AppleAppBuilderProjDirectory>$([MSBuild]::NormalizeDirectory('$(MonoProjectRoot)', 'msbuild', 'AppleAppBuilder'))</AppleAppBuilderProjDirectory>
+ <AppleTestRunnerProjDirectory>$([MSBuild]::NormalizeDirectory('$(MonoProjectRoot)', 'msbuild', 'AppleTestRunner'))</AppleTestRunnerProjDirectory>
+ <AndroidAppBuilderProjDirectory>$([MSBuild]::NormalizeDirectory('$(MonoProjectRoot)', 'msbuild', 'AndroidAppBuilder'))</AndroidAppBuilderProjDirectory>
+ <AndroidTestRunnerProjDirectory>$([MSBuild]::NormalizeDirectory('$(MonoProjectRoot)', 'msbuild', 'AndroidTestRunner'))</AndroidTestRunnerProjDirectory>
+ </PropertyGroup>
</Project>
<Import Project="Directory.Build.targets" />
<Target Name="BuildAppleAppBuilder">
- <MSBuild Projects="$(MonoProjectRoot)msbuild\AppleAppBuilder\AppleAppBuilder.csproj"
+ <MSBuild Projects="$(AppleAppBuilderProjDirectory)AppleAppBuilder.csproj"
Properties="Configuration=$(Configuration);Platform=$(HostArch)"
Targets="Restore;Build" />
- <MSBuild Projects="$(MonoProjectRoot)msbuild\AppleTestRunner\AppleTestRunner.csproj"
+ <MSBuild Projects="$(AppleTestRunnerProjDirectory)AppleTestRunner.csproj"
Properties="Configuration=$(Configuration)"
Targets="Restore;Build" />
</Target>
<Target Name="BuildAndroidAppBuilder">
- <MSBuild Projects="$(MonoProjectRoot)msbuild\AndroidAppBuilder\AndroidAppBuilder.csproj"
+ <MSBuild Projects="$(AndroidAppBuilderProjDirectory)AndroidAppBuilder.csproj"
Properties="Configuration=$(Configuration);Platform=$(HostArch)"
Targets="Restore;Build" />
- <MSBuild Projects="$(MonoProjectRoot)msbuild\AndroidTestRunner\AndroidTestRunner.csproj"
+ <MSBuild Projects="$(AndroidTestRunnerProjDirectory)AndroidTestRunner.csproj"
Properties="Configuration=$(Configuration)"
Targets="Restore;Build" />
</Target>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
- <OutputPath>bin</OutputPath>
+ <OutputPath>$(AndroidAppBuilder)</OutputPath>
<TargetFramework>$(NetCoreAppCurrent)</TargetFramework>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
- <OutputPath>bin</OutputPath>
+ <OutputPath>$(AndroidTestRunner)</OutputPath>
<TargetFramework>$(NetCoreAppCurrent)</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
- <OutputPath>bin</OutputPath>
+ <OutputPath>$(AppleAppBuilder)</OutputPath>
<TargetFramework>$(NetCoreAppCurrent)</TargetFramework>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
- <OutputPath>bin</OutputPath>
+ <OutputPath>$(AppleTestRunner)</OutputPath>
<TargetFramework>$(NetCoreAppCurrent)</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<TargetArchitecture Condition="'$(TargetArchitecture)'==''">x64</TargetArchitecture>
<RuntimePackDir>$(ArtifactsDir)bin\lib-runtime-packs\runtimes\android-$(TargetArchitecture)</RuntimePackDir>
<BundleDir>$(MSBuildThisFileDirectory)\bin\bundle</BundleDir>
+ <AndroidAppBuilder>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AndroidAppBuilder'))</AndroidAppBuilder>
</PropertyGroup>
<Target Name="RebuildAndroidAppBuilder">
- <MSBuild Projects="$(RepoRoot)src\mono\msbuild\AndroidAppBuilder\AndroidAppBuilder.csproj"
- Properties="Configuration=$(Configuration)" Targets="Restore;Build" />
+ <MSBuild Projects="$(AndroidAppBuilderProjDirectory)\AndroidAppBuilder.csproj"
+ Properties="Configuration=$(Configuration);Platform=$(HostArch)" Targets="Restore;Build" />
</Target>
<UsingTask TaskName="AndroidAppBuilderTask"
- AssemblyFile="$(ArtifactsObjDir)mono\AndroidAppBuilder\$(TargetArchitecture)\$(Configuration)\AndroidAppBuilder.dll" />
+ AssemblyFile="$(AndroidAppBuilder)\$(HostArch)\$(Configuration)\AndroidAppBuilder.dll" />
<Target Name="BuildAppBundle" DependsOnTargets="RebuildAndroidAppBuilder">
<PropertyGroup>
<RuntimePackDir>$(ArtifactsDir)bin\lib-runtime-packs\runtimes\ios-$(TargetArchitecture)</RuntimePackDir>
<MonoRuntimeDir>$(ArtifactsDir)bin\mono\iOS.$(TargetArchitecture).$(Configuration)</MonoRuntimeDir>
<BundleDir>$(MSBuildThisFileDirectory)\bin\bundle</BundleDir>
+ <AppleAppBuilder>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AppleAppBuilder'))</AppleAppBuilder>
</PropertyGroup>
<Target Name="RebuildAppleAppBuilder">
- <MSBuild Projects="$(RepoRoot)src\mono\msbuild\AppleAppBuilder\AppleAppBuilder.csproj"
- Properties="Configuration=$(Configuration)" Targets="Restore;Build" />
+ <MSBuild Projects="$(AppleAppBuilderProjDirectory)AppleAppBuilder.csproj"
+ Properties="Configuration=$(Configuration);Platform=$(HostArch)" Targets="Restore;Build" />
</Target>
<UsingTask TaskName="AppleAppBuilderTask"
- AssemblyFile="$(ArtifactsObjDir)mono\AppleAppBuilder\$(TargetArchitecture)\$(Configuration)\AppleAppBuilder.dll" />
+ AssemblyFile="$(AppleAppBuilder)\$(HostArch)\$(Configuration)\AppleAppBuilder.dll" />
<Target Name="BuildAppBundle" DependsOnTargets="RebuildAppleAppBuilder">
<PropertyGroup>