Add build configuration to generate runtime packs for iOS (#34050)
authorSteve Pfister <steveisok@users.noreply.github.com>
Thu, 2 Apr 2020 17:42:08 +0000 (13:42 -0400)
committerGitHub <noreply@github.com>
Thu, 2 Apr 2020 17:42:08 +0000 (13:42 -0400)
This adds support for generating Microsoft.NETCore.App.Runtime packs for ios-x64, ios-arm, and ios-arm64.

25 files changed:
eng/Subsets.props
eng/liveBuilds.targets
eng/pipelines/common/platform-matrix.yml
eng/pipelines/installer/jobs/base-job.yml
eng/pipelines/runtime-official.yml
eng/pipelines/runtime.yml
eng/referenceFromRuntime.targets
src/installer/Directory.Build.props
src/installer/pkg/packaging/osx/package.targets
src/installer/pkg/projects/Directory.Build.targets
src/installer/pkg/projects/Microsoft.NETCore.DotNetAppHost/Microsoft.NETCore.DotNetAppHost.pkgproj
src/installer/pkg/projects/Microsoft.NETCore.DotNetAppHost/Microsoft.NETCore.DotNetAppHost.props
src/installer/pkg/projects/Microsoft.NETCore.DotNetHost/Microsoft.NETCore.DotNetHost.pkgproj
src/installer/pkg/projects/Microsoft.NETCore.DotNetHostPolicy/Microsoft.NETCore.DotNetHostPolicy.pkgproj
src/installer/pkg/projects/Microsoft.NETCore.DotNetHostPolicy/Microsoft.NETCore.DotNetHostPolicy.props
src/installer/pkg/projects/Microsoft.NETCore.DotNetHostResolver/Microsoft.NETCore.DotNetHostResolver.pkgproj
src/installer/pkg/projects/Microsoft.NETCore.DotNetHostResolver/Microsoft.NETCore.DotNetHostResolver.props
src/installer/pkg/projects/netcoreapp/Directory.Build.props
src/installer/pkg/projects/netcoreapp/pkg/Microsoft.NETCore.App.Crossgen2.pkgproj
src/installer/pkg/projects/netcoreapp/pkg/Microsoft.NETCore.App.Host.pkgproj
src/installer/pkg/projects/netcoreapp/pkg/Microsoft.NETCore.App.Ref.pkgproj
src/installer/pkg/projects/netcoreapp/pkg/Microsoft.NETCore.App.Runtime.pkgproj
src/installer/pkg/projects/netcoreapp/src/netcoreapp.depproj
src/installer/test/Directory.Build.props
src/libraries/restore/runtime/runtime.depproj

index ef7ed62..af31b4c 100644 (file)
 
   <PropertyGroup>
     <DefaultSubsetCategories>libraries-installer-coreclr-mono</DefaultSubsetCategories>
-    <DefaultSubsetCategories Condition="'$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'Android'">libraries-mono</DefaultSubsetCategories>
+    <DefaultSubsetCategories Condition="'$(TargetOS)' == 'iOS'">libraries-installer-mono</DefaultSubsetCategories>
+    <DefaultSubsetCategories Condition="'$(TargetOS)' == 'Android'">libraries-mono</DefaultSubsetCategories>
     <DefaultInstallerSubsets>corehost-managed-depproj-pkgproj-bundle-installers-test</DefaultInstallerSubsets>
+    <DefaultInstallerSubsets Condition="'$(TargetOS)' == 'iOS'">depproj-pkgproj</DefaultInstallerSubsets>
     <!-- TODO: Split into multiple sets. -->
     <DefaultLibrariesSubsets>all</DefaultLibrariesSubsets>
     <DefaultCoreClrSubsets>runtime-linuxdac-corelib-nativecorelib-tools-packages</DefaultCoreClrSubsets>
   </ItemGroup>
 
   <ItemGroup Condition="$(_subsetCategory.Contains('installer')) and $(_subset.Contains('-depproj-'))">
-    <DepprojProjectToBuild Include="$(InstallerProjectRoot)pkg\projects\**\*.depproj" SignPhase="R2RBinaries" BuildInParallel="false" />
+    <DepprojProjectToBuild Condition="'$(RuntimeFlavor)' == 'CoreCLR'" Include="$(InstallerProjectRoot)pkg\projects\**\*.depproj" SignPhase="R2RBinaries" BuildInParallel="false" />
+    <DepprojProjectToBuild Condition="'$(RuntimeFlavor)' == 'Mono'" Include="$(InstallerProjectRoot)pkg\projects\**\*.depproj" SignPhase="Binaries" BuildInParallel="false" />
     <ProjectToBuild Include="@(DepprojProjectToBuild)" />
   </ItemGroup>
 
index 7161aab..ae17986 100644 (file)
     <CoreCLRCrossTargetComponentDirName Condition="'$(TargetArchitecture)' == 'arm' and '$(BuildArchitecture)' != 'arm' and '$(TargetsLinux)' == 'true'">x64</CoreCLRCrossTargetComponentDirName>
   </PropertyGroup>
 
-  <Target Name="ResolveCoreCLRFilesFromLocalBuild">
-    <Error Condition="!Exists('$(CoreCLRArtifactsPath)')" Text="The CoreCLR artifacts path does not exist '$(CoreCLRArtifactsPath)'. The CoreCLR subset category must be built before building this project." />
+  <Target Name="ResolveRuntimeFilesFromLocalBuild">
+    <Error Condition="!Exists('$(CoreCLRArtifactsPath)') and '$(RuntimeFlavor)' == 'CoreCLR'" Text="The CoreCLR artifacts path does not exist '$(CoreCLRArtifactsPath)'. The CoreCLR subset category must be built before building this project." />
+    <Error Condition="!Exists('$(MonoArtifactsPath)') and '$(RuntimeFlavor)' == 'Mono'" Text="The Mono artifacts path does not exist '$(MonoArtifactsPath)'. The Mono subset category must be built before building this project." />
 
-    <PropertyGroup>
+    <PropertyGroup Condition="'$(RuntimeFlavor)' == 'CoreCLR'">
       <CoreCLRArtifactsPath>$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)'))</CoreCLRArtifactsPath>
       <!--
         Even though CoreCLRSharedFrameworkDir is statically initialized, set it again in case the
       <CoreCLRCrossTargetComponentDir
         Condition="'$(CoreCLRCrossTargetComponentDirName)' != ''">$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)','$(CoreCLRCrossTargetComponentDirName)','sharedFramework'))</CoreCLRCrossTargetComponentDir>
     </PropertyGroup>
-    <ItemGroup>
-      <CoreCLRFiles Include="$(CoreCLRSharedFrameworkDir)*.*" />
+    <PropertyGroup Condition="'$(RuntimeFlavor)' == 'Mono'">
+      <MonoArtifactsPath>$([MSBuild]::NormalizeDirectory('$(MonoArtifactsPath)'))</MonoArtifactsPath>
+    </PropertyGroup>
+
+    <ItemGroup Condition="'$(RuntimeFlavor)' == 'CoreCLR'">
+      <RuntimeFiles Include="$(CoreCLRSharedFrameworkDir)*.*" />
       <CoreCLRCrossTargetFiles Condition="'$(CoreCLRCrossTargetComponentDir)' != ''" Include="$(CoreCLRCrossTargetComponentDir)*.*" IsNative="true" />
-      <CoreCLRFiles Include="$(CoreCLRArtifactsPath)Redist/**/*.dll" />
-      <CoreCLRFiles>
+      <RuntimeFiles Include="$(CoreCLRArtifactsPath)Redist/**/*.dll" />
+      <RuntimeFiles>
         <IsNative>true</IsNative>
-      </CoreCLRFiles>
+      </RuntimeFiles>
       <_systemPrivateCoreLib Include="$(CoreCLRArtifactsPath)System.Private.CoreLib.dll"
                              Condition="Exists('$(CoreCLRArtifactsPath)System.Private.CoreLib.dll')" />
       <_systemPrivateCoreLib Include="$(CoreCLRArtifactsPath)IL/System.Private.CoreLib.dll"
                              Condition="Exists('$(CoreCLRArtifactsPath)IL/System.Private.CoreLib.dll') and '@(_systemPrivateCoreLib)' == ''" />
-      <CoreCLRFiles Include="@(_systemPrivateCoreLib)" />
-      <CoreCLRFiles
+      <RuntimeFiles Include="@(_systemPrivateCoreLib)" />
+      <RuntimeFiles
         Include="
           $(CoreCLRSharedFrameworkDir)PDB/*.pdb;
           $(CoreCLRSharedFrameworkDir)PDB/*.dbg;
           $(CoreCLRSharedFrameworkDir)PDB/*.dwarf" />
-      <CoreCLRFiles
+      <RuntimeFiles
         Include="$(CoreCLRArtifactsPath)PDB/System.Private.CoreLib.pdb;" />
-      <CoreCLRFiles Condition="Exists('$(CoreCLRArtifactsPath)PDB/System.Private.CoreLib.ni.pdb')"
+      <RuntimeFiles Condition="Exists('$(CoreCLRArtifactsPath)PDB/System.Private.CoreLib.ni.pdb')"
         Include="$(CoreCLRArtifactsPath)PDB/System.Private.CoreLib.ni.pdb" />
       <CoreCLRCrossTargetFiles Condition="'$(CoreCLRCrossTargetComponentDir)' != ''"
         Include="
         <TargetPath>runtime/$(CoreCLRCrossTargetComponentDirName)_$(TargetArchitecture)/native</TargetPath>
       </CoreCLRCrossTargetFiles>
     </ItemGroup>
+    <ItemGroup Condition="'$(RuntimeFlavor)' == 'Mono'">
+      <RuntimeFiles Include="$(MonoArtifactsPath)\*.*" />
+      <RuntimeFiles>
+        <IsNative>true</IsNative>
+      </RuntimeFiles>
 
-    <Error Condition="'@(CoreCLRFiles)' == ''" Text="The CoreCLR subset category must be built before building this project." />
-  </Target>
-
-  <Target Name="ResolveMonoFilesFromLocalBuild">
-    <Error Condition="!Exists('$(MonoArtifactsPath)')" Text="The Mono artifacts path does not exist '$(MonoArtifactsPath)'. The Mono subset category must be built before building this project." />
-
-    <ItemGroup>
-      <MonoFiles Include="$(MonoArtifactsPath)\*.*" />
+      <MonoCrossFiles Condition="'$(TargetOS)' == 'iOS'"
+        Include="$(MonoArtifactsPath)\cross\*.*" />
+      <MonoIncludeFiles Condition="'$(TargetOS)' == 'iOS'"
+        Include="$(MonoArtifactsPath)\include\**\*.*" />
     </ItemGroup>
 
-    <Error Condition="'@(MonoFiles)' == ''" Text="The Mono subset category must be built before building this project." />
+    <Error Condition="'@(RuntimeFiles)' == ''" Text="The $(RuntimeFlavor) subset category must be built before building this project." />
   </Target>
 
   <Target Name="EnsureLocalArtifactsExist">
index 83ef0b4..b0753c0 100644 (file)
@@ -315,7 +315,7 @@ jobs:
       helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
       osGroup: iOS
       archType: arm
-      platform: iOS_x64
+      platform: iOS_arm
       jobParameters:
         runtimeFlavor: mono
         stagedBuild: ${{ parameters.stagedBuild }}
@@ -335,7 +335,7 @@ jobs:
       helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
       osGroup: iOS
       archType: arm64
-      platform: iOS_x64
+      platform: iOS_arm64
       jobParameters:
         runtimeFlavor: mono
         stagedBuild: ${{ parameters.stagedBuild }}
index d15750a..274928c 100644 (file)
@@ -127,6 +127,24 @@ jobs:
         $(CommonMSBuildArgs)
         $(OfficialBuildArg)
 
+  - ${{ if eq(parameters.osGroup, 'iOS') }}:
+
+    - name: CommonMSBuildArgs
+      value: >-
+        /p:PortableBuild=true
+        /p:SkipTests=$(SkipTests)
+
+    - name: BaseJobBuildCommand
+      value: >-
+        $(Build.SourcesDirectory)/installer.sh --restore --build --ci --test
+        -configuration $(_BuildConfig)
+        -os ${{ parameters.osGroup }}
+        -arch ${{ parameters.archType }}
+        /p:StripSymbols=true
+        $(LiveOverridePathArgs)
+        $(CommonMSBuildArgs)
+        $(OfficialBuildArg)
+
   - ${{ if eq(parameters.osGroup, 'Linux') }}:
 
     # Preserve the NuGet authentication env vars into the Docker container.
@@ -170,9 +188,6 @@ jobs:
     - name: _PortableBuild
       value: ${{ eq(parameters.osSubgroup, '') }}
 
-    - name: _DisableCrossgen
-      value: false
-
     - ${{ if and(eq(parameters.osSubgroup, '_musl'), eq(parameters.osGroup, 'Linux')) }}:
       # Set output RID manually: musl isn't properly detected. Make sure to also convert linux to
       # lowercase for RID format. (Detection normally converts, but we're preventing it.)
@@ -185,7 +200,6 @@ jobs:
       value: >-
         --restore --build --ci --test
         /p:CrossBuild=${{ ne(parameters.crossrootfsDir, '') }}
-        /p:DisableCrossgen=$(_DisableCrossgen)
         /p:PortableBuild=$(_PortableBuild)
         /p:SkipTests=$(SkipTests)
         $(LiveOverridePathArgs)
index 380e9cc..b21261e 100644 (file)
@@ -190,6 +190,23 @@ stages:
       - Windows_NT_arm
       - Windows_NT_arm64
 
+    #
+    # Installer Build for platforms using Mono
+    #
+  - template: /eng/pipelines/installer/installer-matrix.yml
+    parameters:
+      jobParameters:
+        liveRuntimeBuildConfig: release
+        liveLibrariesBuildConfig: Release
+        isOfficialBuild: ${{ variables.isOfficialBuild }}
+        useOfficialAllConfigurations: false
+        buildFullPlatformManifest: false
+      runtimeFlavor: mono
+      platforms:
+      - iOS_arm
+      - iOS_arm64
+      - iOS_x64
+
 - ${{ if eq(variables.isOfficialBuild, true) }}:
   - template: /eng/pipelines/official/stages/publish.yml
     parameters:
index 418f191..7183442 100644 (file)
@@ -518,6 +518,18 @@ jobs:
       liveRuntimeBuildConfig: release
       liveLibrariesBuildConfig: ${{ variables.debugOnPrReleaseOnRolling }}
 
+- template: /eng/pipelines/installer/installer-matrix.yml
+  parameters:
+    buildConfig: ${{ variables.debugOnPrReleaseOnRolling }}
+    runtimeFlavor: mono
+    platforms:
+      - iOS_x64
+      - iOS_arm
+      - iOS_arm64
+    jobParameters:
+      liveRuntimeBuildConfig: release
+      liveLibrariesBuildConfig: ${{ variables.debugOnPrReleaseOnRolling }}
+
 #
 # Libraries Test Build
 # Only when CoreCLR, Mono or Libraries is changed
index e2cd929..873e7e5 100644 (file)
@@ -33,8 +33,7 @@
 
   <Target Name="GetFilesFromRuntime" Returns="@(RuntimeFiles)" DependsOnTargets="GetFilesFromCoreClr;GetFilesFromMono">
     <ItemGroup>
-      <RuntimeFiles Include="@(CoreCLRFiles)" Condition="'$(RuntimeFlavor)' != 'Mono'" />
-      <RuntimeFiles Include="@(MonoFiles)" Condition="'$(RuntimeFlavor)' == 'Mono'" />
+      <RuntimeFiles Include="@(RuntimeFiles)" />
     </ItemGroup>
   </Target>
 
   -->
   <Target Name="GetFilesFromCoreCLR" 
           Condition="'$(RuntimeFlavor)' != 'Mono'"
-          Returns="@(CoreCLRFiles)"
-          DependsOnTargets="ResolveCoreCLRFilesFromLocalBuild" />
+          Returns="@(RuntimeFiles)"
+          DependsOnTargets="ResolveRuntimeFilesFromLocalBuild" />
 
   <Target Name="GetFilesFromMono" 
           Condition="'$(RuntimeFlavor)' == 'Mono'"
-          Returns="@(MonoFiles)"
-          DependsOnTargets="ResolveMonoFilesFromLocalBuild" />
+          Returns="@(RuntimeFiles)"
+          DependsOnTargets="ResolveRuntimeFilesFromLocalBuild" />
 
   <Target Name="FilterReferenceFromRuntime"
           AfterTargets="ResolveProjectReferences"
index 17b91f5..256dadb 100644 (file)
@@ -94,6 +94,7 @@
     <OutputRid Condition="'$(TargetOS)' == 'OSX'">osx-$(TargetArchitecture)</OutputRid>
     <OutputRid Condition="'$(TargetOS)' == 'Linux'">linux-$(TargetArchitecture)</OutputRid>
     <OutputRid Condition="'$(TargetOS)' == 'FreeBSD'">freebsd-$(TargetArchitecture)</OutputRid>
+    <OutputRid Condition="'$(TargetOS)' == 'iOS'">ios-$(TargetArchitecture)</OutputRid>
   </PropertyGroup>
 
   <PropertyGroup>
 
   <PropertyGroup>
     <DisableCrossgen>false</DisableCrossgen>
+    <DisableCrossgen Condition="'$(RuntimeFlavor)' == 'Mono'">true</DisableCrossgen>
     <!-- Disable cross-gen on FreeBSD for now. This can be revisited when we have full support. -->
     <DisableCrossgen Condition="'$(TargetOS)'=='FreeBSD'">true</DisableCrossgen>
     <OutputVersionBadge>$(AssetOutputPath)sharedfx_$(OutputRid)_$(Configuration)_version_badge.svg</OutputVersionBadge>
   <PropertyGroup>
     <TargetsWindows>false</TargetsWindows>
     <TargetsOSX>false</TargetsOSX>
+    <TargetsiOS>false</TargetsiOS>
     <TargetsLinux>false</TargetsLinux>
     <TargetsUnix>false</TargetsUnix>
     <TargetsUbuntu>false</TargetsUbuntu>
         <TargetsUnix>true</TargetsUnix>
       </PropertyGroup>
     </When>
+    <When Condition="$(OutputRid.StartsWith('ios'))">
+      <PropertyGroup>
+        <TargetsiOS>true</TargetsiOS>
+        <TargetsUnix>true</TargetsUnix>
+      </PropertyGroup>
+    </When>
     <When Condition="$(OutputRid.StartsWith('debian'))">
       <PropertyGroup>
         <TargetsDebian>true</TargetsDebian>
     <LibPrefix Condition="'$(TargetOS)' != 'Windows_NT'">lib</LibPrefix>
     <LibSuffix>.so</LibSuffix>
     <LibSuffix Condition="'$(TargetOS)' == 'Windows_NT'">.dll</LibSuffix>
-    <LibSuffix Condition="'$(TargetOS)' == 'OSX'">.dylib</LibSuffix>
+    <LibSuffix Condition="'$(TargetOS)' == 'OSX' or '$(TargetOS)' == 'iOS'">.dylib</LibSuffix>
     <StaticLibPrefix>lib</StaticLibPrefix>
     <StaticLibSuffix>.a</StaticLibSuffix>
     <StaticLibSuffix Condition="'$(TargetOS)' == 'Windows_NT'">.lib</StaticLibSuffix>
     <CrossGenSymbolExtension>.map</CrossGenSymbolExtension>
     <CrossGenSymbolExtension Condition="'$(TargetOS)' == 'Windows_NT'">.ni.pdb</CrossGenSymbolExtension>
     <!-- OSX doesn't have crossgen symbols, yet -->
-    <CrossGenSymbolExtension Condition="'$(TargetOS)' == 'OSX'"></CrossGenSymbolExtension>
+    <CrossGenSymbolExtension Condition="'$(TargetOS)' == 'OSX' or '$(TargetOS)' == 'iOS'"></CrossGenSymbolExtension>
   </PropertyGroup>
 
 </Project>
index fd039da..1256a20 100644 (file)
@@ -5,13 +5,13 @@
   <UsingTask TaskName="ReplaceFileContents" AssemblyFile="$(InstallerTasksAssemblyPath)"/>
 
   <Target Name="InitPkg"
-          Condition="'$(TargetOS)' == 'OSX'">
+          Condition="'$(TargetOS)' == 'OSX' or '$(TargetOS)' == 'iOS'">
     <MakeDir Condition="!Exists('$(PackagesIntermediateDir)')"
              Directories="$(PackagesIntermediateDir)" />
   </Target>
 
   <Target Name="GeneratePkgs"
-          Condition="'$(TargetOS)' == 'OSX'"
+          Condition="'$(TargetOS)' == 'OSX' or '$(TargetOS)' == 'iOS'"
           DependsOnTargets="GetInstallerBrandingNames;InitPkg">
     <ItemGroup>
         <OSXPackages Include="sharedframework">
index 24e1366..665fcbf 100644 (file)
   </PropertyGroup>
 
   <!--
+    For mobile targets, we do not need the host, so allow depproj's to opt 
+    out and skip building. 
+  -->
+  <Target Name="MobileSkipBuildProps" 
+          Condition="'$(SkipBuildOnRuntimePackOnlyOS)' == 'true' and '$(TargetOS)' == 'iOS'"
+          BeforeTargets="GetSkipBuildProps">
+    <PropertyGroup>
+      <SkipBuild>true</SkipBuild>
+    </PropertyGroup>
+  </Target>
+
+  <!--
     For any Dependency items with a VersionProp, set it to the property by that name given by the
     version generation target. For any with a VersionFromProject, query the ProductVersion from that
     project file and use it as the dependency's version.
index b66c807..a363542 100644 (file)
@@ -1,9 +1,8 @@
 <Project Sdk="Microsoft.NET.Sdk">
-
   <PropertyGroup>
     <VersionProp>AppHostVersion</VersionProp>
+    <SkipBuildOnRuntimePackOnlyOS>true</SkipBuildOnRuntimePackOnlyOS>
   </PropertyGroup>
 
   <Import Project="$(MSBuildProjectName).props" />
-
 </Project>
index cdf7d96..27384ce 100644 (file)
@@ -2,7 +2,7 @@
 <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
   <Import
-    Condition="'$(PackageTargetRuntime)' != ''"
+    Condition="'$(PackageTargetRuntime)' != '' and Exists('$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildThisFile)')"
     Project="$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildThisFile)" />
 
 </Project>
index 4e2bfe3..002cc4c 100644 (file)
@@ -5,6 +5,7 @@
 
     <InstallerName>dotnet-host</InstallerName>
     <GenerateSharedFrameworkPart>true</GenerateSharedFrameworkPart>
+    <SkipBuildOnRuntimePackOnlyOS>true</SkipBuildOnRuntimePackOnlyOS>
   </PropertyGroup>
 
   <Target Name="SetupHostSpecificWixBuild"
@@ -47,6 +48,8 @@
     </ItemGroup>
   </Target>
 
-  <Import Condition="'$(PackageTargetRuntime)' != ''" Project="$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildProjectName).props" />
+  <Import 
+    Condition="'$(PackageTargetRuntime)' != '' and Exists('$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildProjectName).props')"
+    Project="$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildProjectName).props" />
 
 </Project>
index 751acd3..ccca328 100644 (file)
@@ -2,6 +2,7 @@
 
   <PropertyGroup>
     <VersionProp>HostPolicyVersion</VersionProp>
+    <SkipBuildOnRuntimePackOnlyOS>true</SkipBuildOnRuntimePackOnlyOS>
   </PropertyGroup>
 
   <ItemGroup>
@@ -9,5 +10,4 @@
   </ItemGroup>
 
   <Import Project="$(MSBuildProjectName).props" />
-
 </Project>
index cdf7d96..27384ce 100644 (file)
@@ -2,7 +2,7 @@
 <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
   <Import
-    Condition="'$(PackageTargetRuntime)' != ''"
+    Condition="'$(PackageTargetRuntime)' != '' and Exists('$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildThisFile)')"
     Project="$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildThisFile)" />
 
 </Project>
index e9df60e..bb16d54 100644 (file)
@@ -5,6 +5,7 @@
 
     <InstallerName>dotnet-hostfxr</InstallerName>
     <GenerateSharedFrameworkPart>true</GenerateSharedFrameworkPart>
+    <SkipBuildOnRuntimePackOnlyOS>true</SkipBuildOnRuntimePackOnlyOS>
   </PropertyGroup>
 
   <ItemGroup>
index cdf7d96..27384ce 100644 (file)
@@ -2,7 +2,7 @@
 <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
   <Import
-    Condition="'$(PackageTargetRuntime)' != ''"
+    Condition="'$(PackageTargetRuntime)' != '' and Exists('$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildThisFile)')"
     Project="$(MSBuildThisFileDirectory)runtime.$(TargetOS).$(MSBuildThisFile)" />
 
 </Project>
index 8449804..d09f6f3 100644 (file)
@@ -9,6 +9,7 @@
     <CoreCLRTargetOS Condition="'$(TargetsWindows)' == 'true'">Windows_NT</CoreCLRTargetOS>
     <CoreCLRTargetOS Condition="'$(TargetsLinux)' == 'true'">Linux</CoreCLRTargetOS>
     <CoreCLRTargetOS Condition="'$(TargetsOSX)' == 'true'">OSX</CoreCLRTargetOS>
+    <CoreCLRTargetOS Condition="'$(TargetsiOS)' == 'true'">iOS</CoreCLRTargetOS>
     <CoreCLRTargetOS Condition="'$(TargetsFreeBSD)' == 'true'">FreeBSD</CoreCLRTargetOS>
     <LibrariesTargetOS>$(CoreCLRTargetOS)</LibrariesTargetOS>
   </PropertyGroup>
index ce1ab04..7eacc16 100644 (file)
@@ -7,6 +7,7 @@
   <PropertyGroup>
     <FrameworkPackType>crossgen2</FrameworkPackType>
     <BuildRidSpecificPacks>true</BuildRidSpecificPacks>
+    <SkipBuildOnRuntimePackOnlyOS>true</SkipBuildOnRuntimePackOnlyOS>
   </PropertyGroup>
 
   <!--
index f3c1983..10915e8 100644 (file)
@@ -26,4 +26,7 @@
     <CrossArchSdkMsiInstallerArch Include="x64;x86" />
   </ItemGroup>
 
+  <PropertyGroup>
+    <SkipBuildOnRuntimePackOnlyOS>true</SkipBuildOnRuntimePackOnlyOS>
+  </PropertyGroup>
 </Project>
\ No newline at end of file
index ece93f9..450e841 100644 (file)
@@ -5,4 +5,7 @@
     <File Include="PackageOverrides.txt" TargetPath="data/" />
   </ItemGroup>
 
+  <PropertyGroup>
+    <SkipBuildOnRuntimePackOnlyOS>true</SkipBuildOnRuntimePackOnlyOS>
+  </PropertyGroup>
 </Project>
index 7e68f22..b026723 100644 (file)
@@ -1,10 +1,18 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <!--
+    Don't include host resolver or host policy in iOS or Android runtime packs, because there is no
+    shared framework on those platforms.
+  -->
+  <PropertyGroup>
+    <ExcludeHostAssets Condition="'$(TargetOS)' == 'iOS'">true</ExcludeHostAssets>
+    <ExcludeHostAssets Condition="'$(TargetOS)' == 'Android'">true</ExcludeHostAssets>
+  </PropertyGroup>
+  <!--
     Include HostPolicy and HostResolver based on legacy packages. This can be collapsed once the
     legacy packages are no longer used.
   -->
-  <Import Project="..\..\Microsoft.NETCore.DotNetHostPolicy\Microsoft.NETCore.DotNetHostPolicy.props" />
-  <Import Project="..\..\Microsoft.NETCore.DotNetHostResolver\Microsoft.NETCore.DotNetHostResolver.props" />
+  <Import Condition="'$(ExcludeHostAssets)' != 'true'" Project="..\..\Microsoft.NETCore.DotNetHostPolicy\Microsoft.NETCore.DotNetHostPolicy.props" />
+  <Import Condition="'$(ExcludeHostAssets)' != 'true'" Project="..\..\Microsoft.NETCore.DotNetHostResolver\Microsoft.NETCore.DotNetHostResolver.props" />
 
 </Project>
index 3193f12..405fa17 100644 (file)
 
   <Target Name="GetDependencyVersionFiles" />
 
-  <Target Name="AddRuntimeFilesToPackage" DependsOnTargets="ResolveCoreCLRFilesFromLocalBuild" BeforeTargets="GetFilesFromPackageResolve">
+  <Target Name="AddRuntimeFilesToPackage" DependsOnTargets="ResolveRuntimeFilesFromLocalBuild" BeforeTargets="GetFilesFromPackageResolve">
     <ItemGroup>
-      <CoreCLRFiles>
+      <RuntimeFiles>
         <TargetPath>runtimes/$(PackageRID)/native</TargetPath>
-      </CoreCLRFiles>
+      </RuntimeFiles>
 
-      <CoreCLRFiles Condition="'%(FileName)' == 'crossgen'">
+      <RuntimeFiles Condition="'%(FileName)' == 'crossgen'">
         <TargetPath>tools</TargetPath>
-      </CoreCLRFiles>
+      </RuntimeFiles>
+
+      <RuntimeFiles Condition="'$(TargetOS)' == 'iOS'"
+        Include="@(MonoCrossFiles)">
+        <TargetPath>runtimes/$(PackageRID)/native/cross</TargetPath>
+      </RuntimeFiles>
+      <RuntimeFiles Condition="'$(TargetOS)' == 'iOS'"
+        Include="@(MonoIncludeFiles)">
+        <TargetPath>runtimes/$(PackageRID)/native/include/%(RecursiveDir)</TargetPath>
+      </RuntimeFiles>
 
       <CoreCLRCrossTargetFiles Condition="'%(FileName)' == 'clrjit' or '%(FileName)' == 'libclrjit'">
         <TargetPath>runtimes/$(CoreCLRCrossTargetComponentDirName)_$(TargetArchitecture)/native</TargetPath>
@@ -79,7 +88,7 @@
       <CoreCLRCrossTargetFiles Condition="'%(FileName)%(Extension)' == 'mscordbi.dll' and '$(TargetsWindows)' == 'true'">
         <TargetPath>tools/$(CoreCLRCrossTargetComponentDirName)_$(TargetArchitecture)</TargetPath>
       </CoreCLRCrossTargetFiles>
-      <ReferenceCopyLocalPaths Include="@(CoreCLRFiles);@(CoreCLRCrossTargetFiles)" />
+      <ReferenceCopyLocalPaths Include="@(RuntimeFiles);@(CoreCLRCrossTargetFiles);" />
     </ItemGroup>
   </Target>
 
index 060df32..54393a3 100644 (file)
@@ -15,7 +15,7 @@
   <PropertyGroup>
     <TargetOSTrait Condition="'$(TargetOS)' == 'Windows_NT'">nonwindowstests</TargetOSTrait>
     <TargetOSTrait Condition="'$(TargetOS)' == 'Linux'">nonlinuxtests</TargetOSTrait>
-    <TargetOSTrait Condition="'$(TargetOS)' == 'OSX'">nonosxtests</TargetOSTrait>
+    <TargetOSTrait Condition="'$(TargetOS)' == 'OSX' or '$(TargetOS)' == 'iOS'">nonosxtests</TargetOSTrait>
     <TargetOSTrait Condition="'$(TargetOS)' == 'FreeBSD'">nonfreebsdtests</TargetOSTrait>
     <TargetOSTrait Condition="'$(TargetOS)' == 'NetBSD'">nonnetbsdtests</TargetOSTrait>
 
index 0b8925e..18a776f 100644 (file)
   </Target>
 
   <Target Name="OverrideRuntimeCoreCLR"
-          DependsOnTargets="ResolveCoreCLRFilesFromLocalBuild"
+          DependsOnTargets="ResolveRuntimeFilesFromLocalBuild"
           AfterTargets="AfterResolveReferences;FilterNugetPackages"
           Condition="'$(RuntimeFlavor)' != 'Mono'">
     <ItemGroup>
       <!-- CoreRun is not used for testing anymore, but we still use it for benchmarking and profiling -->
-      <CoreCLRFiles Include="$(CoreCLRArtifactsPath)/corerun*" />
-      <CoreCLRFiles Include="$(CoreCLRArtifactsPath)/PDB/corerun*" />
-      <ReferenceCopyLocalPaths Include="@(CoreCLRFiles)" />
+      <RuntimeFiles Include="$(CoreCLRArtifactsPath)/corerun*" />
+      <RuntimeFiles Include="$(CoreCLRArtifactsPath)/PDB/corerun*" />
+      <ReferenceCopyLocalPaths Include="@(RuntimeFiles)" />
     </ItemGroup>
   </Target>
 
   <Target Name="OverrideRuntimeMono"
-          DependsOnTargets="ResolveMonoFilesFromLocalBuild"
+          DependsOnTargets="ResolveRuntimeFilesFromLocalBuild"
           AfterTargets="AfterResolveReferences;FilterNugetPackages"
           Condition="'$(RuntimeFlavor)' == 'Mono'">
     <ItemGroup>
-      <ReferenceCopyLocalPaths Include="@(MonoFiles)" />
+      <ReferenceCopyLocalPaths Include="@(RuntimeFiles)" />
     </ItemGroup>
   </Target>
 
-  <Target Name="GetCoreCLRILFiles" DependsOnTargets="ResolveCoreCLRFilesFromLocalBuild">
+  <Target Name="GetCoreCLRILFiles" DependsOnTargets="ResolveRuntimeFilesFromLocalBuild">
     <ItemGroup>
       <CoreCLRILFiles Include="$(CoreCLRArtifactsPath)/IL/*.*" />
     </ItemGroup>