Use Arcade-provided IBCMerge support for System.Private.CoreLib. (#2308)
authorJeremy Koritzinsky <jekoritz@microsoft.com>
Wed, 29 Jan 2020 22:49:13 +0000 (14:49 -0800)
committerGitHub <noreply@github.com>
Wed, 29 Jan 2020 22:49:13 +0000 (14:49 -0800)
* Use Arcade-provided IBCMerge support.

* Clean up build.sh as well.

* Restore internal tools on Windows and Unix instead of just Windows.

* Remove unused item metadata.

eng/Version.Details.xml
eng/Versions.props
eng/codeOptimization.targets
eng/pipelines/coreclr/templates/build-job.yml
eng/restore/optimizationData.targets
src/coreclr/build.cmd
src/coreclr/build.sh
src/coreclr/src/.nuget/optdata/ibcmerge.csproj [deleted file]
src/coreclr/src/.nuget/optdata/optdata.csproj
src/coreclr/src/System.Private.CoreLib/System.Private.CoreLib.csproj

index 3c4fc0a..d6f0129 100644 (file)
       <Uri>https://dev.azure.com/dnceng/internal/_git/dotnet-optimization</Uri>
       <Sha>d0bb63d2ec7060714e63ee4082fac48f2e57f3e2</Sha>
     </Dependency>
-    <Dependency Name="optimization.IBC.CoreCLR" Version="99.99.99-master-20190716.1">
+    <Dependency Name="optimization.linux-x64.IBC.CoreFx" Version="99.99.99-master-20190716.1">
+      <Uri>https://dev.azure.com/dnceng/internal/_git/dotnet-optimization</Uri>
+      <Sha>d0bb63d2ec7060714e63ee4082fac48f2e57f3e2</Sha>
+    </Dependency>
+    <Dependency Name="optimization.windows_nt-x64.IBC.CoreCLR" Version="99.99.99-master-20190716.1">
+      <Uri>https://dev.azure.com/dnceng/internal/_git/dotnet-optimization</Uri>
+      <Sha>d0bb63d2ec7060714e63ee4082fac48f2e57f3e2</Sha>
+    </Dependency>
+    <Dependency Name="optimization.linux-x64.IBC.CoreCLR" Version="99.99.99-master-20190716.1">
       <Uri>https://dev.azure.com/dnceng/internal/_git/dotnet-optimization</Uri>
       <Sha>d0bb63d2ec7060714e63ee4082fac48f2e57f3e2</Sha>
     </Dependency>
index 1964b0f..f8489a8 100644 (file)
@@ -20,7 +20,7 @@
     <UsingToolIbcOptimization>true</UsingToolIbcOptimization>
     <UsingToolXliff>false</UsingToolXliff>
     <!-- Paths used during restore -->
-    <EnableNgenOptimization Condition="'$(EnableNgenOptimization)' == '' and '$(ConfigurationGroup)' == 'Release'">true</EnableNgenOptimization>
+    <EnableNgenOptimization Condition="'$(EnableNgenOptimization)' == '' and ('$(ConfigurationGroup)' == 'Release' or '$(Configuration)' == 'Release')">true</EnableNgenOptimization>
     <IbcOptimizationDataDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'ibc'))</IbcOptimizationDataDir>
     <XmlDocDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'docs'))</XmlDocDir>
     <!-- Blob storage container that has the "Latest" channel to publish to. -->
@@ -96,7 +96,9 @@
     <NETStandardLibraryVersion>2.2.0-prerelease.19564.1</NETStandardLibraryVersion>
     <!-- dotnet-optimization dependencies -->
     <optimizationwindows_ntx64IBCCoreFxVersion>99.99.99-master-20190716.1</optimizationwindows_ntx64IBCCoreFxVersion>
-    <optimizationIBCCoreCLRVersion>99.99.99-master-20190716.1</optimizationIBCCoreCLRVersion>
+    <optimizationlinuxx64IBCCoreFxVersion>99.99.99-master-20190716.1</optimizationlinuxx64IBCCoreFxVersion>
+    <optimizationwindows_ntx64IBCCoreCLRVersion>99.99.99-master-20190716.1</optimizationwindows_ntx64IBCCoreCLRVersion>
+    <optimizationlinuxx64IBCCoreCLRVersion>99.99.99-master-20190716.1</optimizationlinuxx64IBCCoreCLRVersion>
     <optimizationPGOCoreCLRVersion>99.99.99-master-20190716.1</optimizationPGOCoreCLRVersion>
     <!-- Not auto-updated. -->
     <MicrosoftTargetingPackPrivateWinRTVersion>1.0.5</MicrosoftTargetingPackPrivateWinRTVersion>
     <MicrosoftPrivateIntellisensePackage>microsoft.private.intellisense</MicrosoftPrivateIntellisensePackage>
     <MicrosoftDotNetXUnitConsoleRunnerPackage>Microsoft.DotNet.XUnitConsoleRunner</MicrosoftDotNetXUnitConsoleRunnerPackage>
     <MicrosoftNETCoreAppPackage>Microsoft.NETCore.App</MicrosoftNETCoreAppPackage>
-    <optimizationIBCCoreCLRPackage>optimization.IBC.CoreCLR</optimizationIBCCoreCLRPackage>
+    <WindowsOptimizationIBCCoreCLRPackage>optimization.windows_nt-x64.IBC.CoreCLR</WindowsOptimizationIBCCoreCLRPackage>
+    <LinuxOptimizationIBCCoreCLRPackage>optimization.linux-x64.IBC.CoreCLR</LinuxOptimizationIBCCoreCLRPackage>
     <optimizationPGOCoreCLRPackage>optimization.PGO.CoreCLR</optimizationPGOCoreCLRPackage>
     <MicrosoftDotNetBuildTasksFeedPackage>Microsoft.DotNet.Build.Tasks.Feed</MicrosoftDotNetBuildTasksFeedPackage>
     <MicrosoftNETCoreTargetsPackage>Microsoft.NETCore.Targets</MicrosoftNETCoreTargetsPackage>
index ae1cd7c..e40af28 100644 (file)
@@ -10,8 +10,8 @@
           Condition="'$(IsEligibleForNgenOptimization)' == 'true'"
           BeforeTargets="CoreCompile">
     <PropertyGroup>
-      <IbcOptimizationDataDir Condition="'$(OSGroup)' == 'Unix' or '$(OSGroup)' == 'Linux'">$(IbcOptimizationDataDir)$(LinuxCoreFxOptimizationDataPackage)\</IbcOptimizationDataDir>
-      <IbcOptimizationDataDir Condition="'$(OSGroup)' != 'Unix' and '$(OSGroup)' != 'Linux'">$(IbcOptimizationDataDir)$(WindowsCoreFxOptimizationDataPackage)\</IbcOptimizationDataDir>
+      <IbcOptimizationDataDir Condition="'$(OSGroup)' == 'Unix' or '$(OSGroup)' == 'Linux'">$(IbcOptimizationDataDir)Linux\</IbcOptimizationDataDir>
+      <IbcOptimizationDataDir Condition="'$(OSGroup)' != 'Unix' and '$(OSGroup)' != 'Linux'">$(IbcOptimizationDataDir)Windows\</IbcOptimizationDataDir>
     </PropertyGroup>
     <ItemGroup>
       <_optimizationDataAssembly Include="$(IbcOptimizationDataDir)**\$(TargetFileName)" />
index 59dc010..9e3eb69 100644 (file)
@@ -84,16 +84,9 @@ jobs:
         value: true
     - name: officialBuildIdArg
       value: ''
-    - name: ibcOptimizeArg
-      value: ''
     - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}:
       - name: officialBuildIdArg
         value: '-officialbuildid=$(Build.BuildNumber)'
-
-      # IBCMerge is currently Windows-only and x86/x64-only
-      - ${{ if and(eq(parameters.osGroup, 'Windows_NT'), or(eq(parameters.archType, 'x64'), eq(parameters.archType, 'x86'))) }}:
-        - name: ibcOptimizeArg
-          value: '-ibcoptimize'
     - name: enforcePgoArg
       value: ''
     # The EnforcePGO script is only supported on Windows and is not supported on arm or arm64.
@@ -121,7 +114,7 @@ jobs:
     # # Since our internal tools are behind an authenticated feed,
     # # we need to use the DotNetCli AzDO task to restore from the feed using a service connection.
     # # We can't do this from within the build, so we need to do this as a separate step.
-    - ${{ if and(and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')), eq(parameters.osGroup, 'Windows_NT')) }}:
+    - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}:
       - template: /eng/pipelines/common/restore-internal-tools.yml
         parameters:
           installDotnet: true
@@ -131,7 +124,7 @@ jobs:
       - script: $(coreClrRepoRootDir)build$(scriptExt) $(buildConfig) $(archType) $(crossArg) -ci -skipnuget $(clangArg) $(stripSymbolsArg) $(officialBuildIdArg)
         displayName: Build product
     - ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
-      - script: set __TestIntermediateDir=int&&$(coreClrRepoRootDir)build$(scriptExt) $(buildConfig) $(archType) -ci -skiptests -skipbuildpackages $(officialBuildIdArg) $(ibcOptimizeArg) $(enforcePgoArg)
+      - script: set __TestIntermediateDir=int&&$(coreClrRepoRootDir)build$(scriptExt) $(buildConfig) $(archType) -ci -skiptests -skipbuildpackages $(officialBuildIdArg) $(enforcePgoArg)
         displayName: Build product
 
     # Build native test components
index e4bac71..47c81d6 100644 (file)
@@ -2,23 +2,30 @@
 
   <ItemGroup>
     <IBCPackage Include="$(WindowsCoreFxOptimizationDataPackage)" Version="$(optimizationwindows_ntx64IBCCoreFxVersion)" />
-    <IBCPackage Include="$(LinuxCoreFxOptimizationDataPackage)" Version="$(optimizationwindows_ntx64IBCCoreFxVersion)" />
+    <IBCPackage Include="$(LinuxCoreFxOptimizationDataPackage)" Version="$(optimizationlinuxx64IBCCoreFxVersion)" />
+    <IBCPackage Include="$(WindowsOptimizationIBCCoreCLRPackage)" Version="$(optimizationwindows_ntx64IBCCoreCLRVersion)" />
+    <IBCPackage Include="$(LinuxOptimizationIBCCoreCLRPackage)" Version="$(optimizationlinuxx64IBCCoreCLRVersion)" />
     <PackageReference Include="@(IBCPackage)" PrivateAssets="all" IsImplicitlyDefined="true" />
   </ItemGroup>
-  
+
   <!-- IBC data packages don't follow NuGet conventions.  -->
   <Target Name="GetIBCData"
           AfterTargets="Restore">
-    
+
     <ItemGroup>
       <IBCPackage>
         <PackagePath>$(NuGetPackageRoot)%(IBCPackage.Identity)\%(IBCPackage.Version)</PackagePath>
       </IBCPackage>
-      <_optimizationDataSourceFile Include="%(IBCPackage.PackagePath)\**\*.dll;%(IBCPackage.PackagePath)\**\*.ibc" Package="%(IBCPackage.Identity)" />
+      <IBCPackage Condition="$([System.String]::new('%(Identity)').ToLower().Contains('windows_nt'))">
+        <SubdirectoryName>Windows</SubdirectoryName>
+      </IBCPackage>
+      <IBCPackage Condition="$([System.String]::new('%(Identity)').ToLower().Contains('linux'))">
+        <SubdirectoryName>Linux</SubdirectoryName>
+      </IBCPackage>
+      <_optimizationDataSourceFile Include="%(IBCPackage.PackagePath)\**\*.dll;%(IBCPackage.PackagePath)\**\*.ibc" SubdirectoryName="%(IBCPackage.SubdirectoryName)" />
     </ItemGroup>
-
     <Copy SourceFiles="@(_optimizationDataSourceFile)"
-          DestinationFiles="@(_optimizationDataSourceFile->'$(IbcOptimizationDataDir)%(Package)\%(RecursiveDir)%(Filename)%(Extension)')"
+          DestinationFiles="@(_optimizationDataSourceFile->'$(IbcOptimizationDataDir)%(SubdirectoryName)\%(RecursiveDir)%(Filename)%(Extension)')"
           SkipUnchangedFiles="true"
           UseHardlinksIfPossible="true" />
 
index 7fb4cd3..3ca2cff 100644 (file)
@@ -69,8 +69,6 @@ set __PgoInstrument=0
 set __PgoOptimize=1
 set __EnforcePgo=0
 set __IbcTuning=
-set __IbcOptimize=0
-set __IbcOnly=0
 
 REM __PassThroughArgs is a set of things that will be passed through to nested calls to build.cmd
 REM when using "all".
@@ -97,8 +95,6 @@ set __SkipRestoreArg=/p:RestoreDuringBuild=true
 set __OfficialBuildIdArg=
 set __CrossArch=
 set __PgoOptDataPath=
-set __IbcOptDataPath=
-set __IbcMergePath=
 
 @REM CMD has a nasty habit of eating "=" on the argument list, so passing:
 @REM    -priority=1
@@ -185,8 +181,6 @@ if /i "%1" == "-usenmakemakefiles"   (set __NMakeMakefiles=1&set __ConfigureOnly
 if /i "%1" == "-pgoinstrument"       (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
 if /i "%1" == "-enforcepgo"          (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
 if /i "%1" == "-nopgooptimize"       (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
-if /i "%1" == "-ibcoptimize"         (set __IbcOptimize=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
-if /i "%1" == "-ibconly"             (set __IbcOptimize=1&set __IbcOnly=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
 if /i "%1" == "-ibcinstrument"       (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
 if /i "%1" == "-crossgenaltjit"      (set __CrossgenAltJit=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
 REM TODO remove these once they are no longer used in buildpipeline
@@ -214,7 +208,6 @@ if /i "%1" == "usenmakemakefiles"   (set __NMakeMakefiles=1&set __ConfigureOnly=
 if /i "%1" == "pgoinstrument"       (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
 if /i "%1" == "nopgooptimize"       (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
 if /i "%1" == "enforcepgo"          (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
-if /i "%1" == "ibcoptimize"         (set __IbcOptimize=1&set __PartialNgen=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
 if /i "%1" == "ibcinstrument"       (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
 if /i "%1" == "crossgenaltjit"      (set __CrossgenAltJit=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
 REM TODO remove this once it's no longer used in buildpipeline
@@ -296,9 +289,7 @@ if %__SkipCrossArchNative% EQU 0 (
 REM Set the remaining variables based upon the determined build configuration
 
 if %__PgoOptimize%==0 (
-    if %__IbcOptimize% == 0 (
-        set __RestoreOptData=0
-    )
+    set __RestoreOptData=0
 )
 
 set "__BinDir=%__RootBinDir%\bin\coreclr\%__BuildOS%.%__BuildArch%.%__BuildType%"
@@ -398,7 +389,6 @@ if %__RestoreOptData% EQU 1 (
 )
 
 set PgoDataPackagePathOutputFile="%__IntermediatesDir%\optdatapath.txt"
-set IbcDataPackagePathOutputFile="%__IntermediatesDir%\ibcoptdatapath.txt"
 
 REM Parse the optdata package versions out of msbuild so that we can pass them on to CMake
 powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__RepoRootDir%\eng\common\msbuild.ps1" /clp:nosummary %__ArcadeScriptArgs%^
@@ -416,22 +406,6 @@ if not exist "!PgoDataPackagePathOutputFile!" (
 
 set /p __PgoOptDataPath=<"!PgoDataPackagePathOutputFile!"
 
-powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__RepoRootDir%\eng\common\msbuild.ps1" /clp:nosummary %__ArcadeScriptArgs%^
-    "%OptDataProjectFilePath%" /t:DumpIbcDataPackagePath /nologo %__CommonMSBuildArgs% /p:IbcDataPackagePathOutputFile="!IbcDataPackagePathOutputFile!"
-
- if not !errorlevel! == 0 (
-    echo %__ErrMsgPrefix%Failed to get IBC data package path.
-    set __exitCode=!errorlevel!
-    goto ExitWithCode
-)
-
-if not exist "!IbcDataPackagePathOutputFile!" (
-    echo %__ErrMsgPrefix%Failed to get IBC data package path.
-    goto ExitWithError
-)
-
-set /p __IbcOptDataPath=<"!IbcDataPackagePathOutputFile!"
-
 REM =========================================================================================
 REM ===
 REM === Generate source files for eventing
@@ -566,7 +540,7 @@ if %__BuildNative% EQU 1 (
         echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate native component build project!
         goto ExitWithError
     )
-    
+
     @if defined _echo @echo on
 
 :SkipConfigure
@@ -610,171 +584,66 @@ if %__BuildCoreLib% EQU 1 (
     REM Scope environment changes start {
     setlocal
 
-    if %__IbcOnly% EQU 0 (
-        echo %__MsgPrefix%Commencing build of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
-        rem Explicitly set Platform causes conflicts in CoreLib project files. Clear it to allow building from VS x64 Native Tools Command Prompt
-        set Platform=
+    echo %__MsgPrefix%Commencing build of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
+    rem Explicitly set Platform causes conflicts in CoreLib project files. Clear it to allow building from VS x64 Native Tools Command Prompt
+    set Platform=
 
-        set __ExtraBuildArgs=
+    set __ExtraBuildArgs=
 
-        if "%__BuildManagedTools%" == "1" (
-            set __ExtraBuildArgs=!__ExtraBuildArgs! /p:BuildManagedTools=true
-        )
+    if "%__BuildManagedTools%" == "1" (
+        set __ExtraBuildArgs=!__ExtraBuildArgs! /p:BuildManagedTools=true
+    )
 
-        set __BuildLogRootName=System.Private.CoreLib
-        set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
-        set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
-        set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
-        set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
-        set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
-        set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
-        set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
-
-        powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__RepoRootDir%\eng\common\msbuild.ps1" /clp:nosummary %__ArcadeScriptArgs%^
-            %__ProjectDir%\src\build.proj /t:Restore^
-            /nodeReuse:false /p:PortableBuild=true /maxcpucount /p:IncludeRestoreOnlyProjects=true^
-            !__Logging! %__CommonMSBuildArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
-        if not !errorlevel! == 0 (
-            echo %__ErrMsgPrefix%%__MsgPrefix%Error: Managed Product assemblies restore failed. Refer to the build log files for details.
-            echo     !__BuildLog!
-            echo     !__BuildWrn!
-            echo     !__BuildErr!
-            set __exitCode=!errorlevel!
-            goto ExitWithCode
-        )
+    set __BuildLogRootName=System.Private.CoreLib
+    set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
+    set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
+    set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
+    set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
+    set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
+    set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
+    set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
 
-        powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -Command "%__RepoRootDir%\eng\common\msbuild.ps1" /clp:nosummary %__ArcadeScriptArgs%^
-            %__ProjectDir%\src\build.proj /nodeReuse:false /p:PortableBuild=true /maxcpucount^
-            '!__MsbuildLog!' '!__MsbuildWrn!' '!__MsbuildErr!' %__CommonMSBuildArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
-        if not !errorlevel! == 0 (
-            echo %__ErrMsgPrefix%%__MsgPrefix%Error: Managed Product assemblies build failed. Refer to the build log files for details.
-            echo     !__BuildLog!
-            echo     !__BuildWrn!
-            echo     !__BuildErr!
-            set __exitCode=!errorlevel!
-            goto ExitWithCode
-        )
+    powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__RepoRootDir%\eng\common\msbuild.ps1" /clp:nosummary %__ArcadeScriptArgs%^
+        %__ProjectDir%\src\build.proj /t:Restore^
+        /nodeReuse:false /p:PortableBuild=true /maxcpucount /p:IncludeRestoreOnlyProjects=true^
+        !__Logging! %__CommonMSBuildArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
+    if not !errorlevel! == 0 (
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: Managed Product assemblies restore failed. Refer to the build log files for details.
+        echo     !__BuildLog!
+        echo     !__BuildWrn!
+        echo     !__BuildErr!
+        set __exitCode=!errorlevel!
+        goto ExitWithCode
+    )
 
-        if "%__BuildManagedTools%" == "1" (
-            echo %__MsgPrefix%Publishing crossgen2...
-            call %__RepoRootDir%\dotnet.cmd publish --self-contained -r win-%__BuildArch% -c %__BuildType% -o "%__BinDir%\crossgen2" "%__ProjectDir%\src\tools\crossgen2\crossgen2\crossgen2.csproj" /nologo /p:BuildArch=%__BuildArch%
-
-            if not !errorlevel! == 0 (
-                echo %__ErrMsgPrefix%%__MsgPrefix%Error: Failed to build crossgen2.
-                echo     !__BuildLog!
-                echo     !__BuildWrn!
-                echo     !__BuildErr!
-                set __exitCode=!errorlevel!
-                goto ExitWithCode
-            )
-
-            copy /Y "%__BinDir%\clrjit.dll" "%__BinDir%\crossgen2\clrjitilc.dll"  | find /i /v "file(s) copied"
-            copy /Y "%__BinDir%\jitinterface.dll" "%__BinDir%\crossgen2\jitinterface.dll" | find /i /v "file(s) copied"
-        )
+    powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -Command "%__RepoRootDir%\eng\common\msbuild.ps1" /clp:nosummary %__ArcadeScriptArgs%^
+        %__ProjectDir%\src\build.proj /nodeReuse:false /p:PortableBuild=true /maxcpucount^
+        '!__MsbuildLog!' '!__MsbuildWrn!' '!__MsbuildErr!' %__CommonMSBuildArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
+    if not !errorlevel! == 0 (
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: Managed Product assemblies build failed. Refer to the build log files for details.
+        echo     !__BuildLog!
+        echo     !__BuildWrn!
+        echo     !__BuildErr!
+        set __exitCode=!errorlevel!
+        goto ExitWithCode
     )
-    if %__IbcOptimize% EQU 1 (
-        echo %__MsgPrefix%Commencing IBCMerge of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
-        set IbcMergeProjectFilePath=%__ProjectDir%\src\.nuget\optdata\ibcmerge.csproj
-        set IbcMergePackagePathOutputFile="%__IntermediatesDir%\ibcmergepath.txt"
-        powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__RepoRootDir%\eng\common\msbuild.ps1" /clp:nosummary %__ArcadeScriptArgs%^
-            "!IbcMergeProjectFilePath!" /t:DumpIbcMergePackagePath /nologo %__CommonMSBuildArgs% /p:IbcMergePackagePathOutputFile="!IbcMergePackagePathOutputFile!"
+
+    if "%__BuildManagedTools%" == "1" (
+        echo %__MsgPrefix%Publishing crossgen2...
+        call %__RepoRootDir%\dotnet.cmd publish --self-contained -r win-%__BuildArch% -c %__BuildType% -o "%__BinDir%\crossgen2" "%__ProjectDir%\src\tools\crossgen2\crossgen2\crossgen2.csproj" /nologo /p:BuildArch=%__BuildArch%
 
         if not !errorlevel! == 0 (
-            echo %__ErrMsgPrefix%Failed to determine IBC Merge path.
+            echo %__ErrMsgPrefix%%__MsgPrefix%Error: Failed to build crossgen2.
+            echo     !__BuildLog!
+            echo     !__BuildWrn!
+            echo     !__BuildErr!
             set __exitCode=!errorlevel!
             goto ExitWithCode
         )
-        if not exist "!IbcMergePackagePathOutputFile!" (
-            echo %__ErrMsgPrefix%Failed to determine IBC Merge path.
-            goto ExitWithError
-        )
 
-        set /p __IbcMergePath=<"!IbcMergePackagePathOutputFile!"
-
-        set IbcMergePath=!__IbcMergePath!\tools\netcoreapp2.0\ibcmerge.dll
-        if exist !IbcMergePath! (
-            echo %__MsgPrefix%Optimizing using IBC training data
-            set OptimizationDataDir=!__IbcOptDataPath!\data\System.Private.CoreLib.dll\
-            set InputAssemblyFile=!OptimizationDataDir!System.Private.CoreLib.dll
-            set TargetOptimizationDataFile=!OptimizationDataDir!System.Private.CoreLib.pgo
-
-            if exist "!InputAssemblyFile!" (
-                set RawOptimizationDataFilePattern=!OptimizationDataDir!*.ibc
-                set RawOptimizationDataFile=
-                for %%x in (!RawOptimizationDataFilePattern!) do @(
-                  if [!RawOptimizationDataFile!] == [] (
-                    set RawOptimizationDataFile="%%x"
-                  ) else (
-                    set RawOptimizationDataFile=!RawOptimizationDataFile! "%%x"
-                  )
-                )
-
-                set IBCMergeCommand=%__RepoRootDir%\dotnet.cmd --roll-forward-on-no-candidate-fx 2 "!IbcMergePath!"
-
-                REM Merge the optimization data into the source DLL
-                set NEXTCMD=!IBCMergeCommand! -q -f -delete -mo "!InputAssemblyFile!" !RawOptimizationDataFile!
-                echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
-                call !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
-                if NOT !errorlevel! == 0 (
-                    echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
-                    REM Put it in the same log, helpful for Jenkins
-                    type %__CrossGenCoreLibLog%
-                    goto ExitWithError
-                )
-
-                REM Verify that the optimization data has been merged
-                set NEXTCMD=!IBCMergeCommand! -mi "!InputAssemblyFile!"
-                echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
-                call !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
-                if NOT !errorlevel! == 0 (
-                    echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
-                    REM Put it in the same log, helpful for Jenkins
-                    type %__CrossGenCoreLibLog%
-                    goto ExitWithError
-                )
-
-                REM Save the module as *.pgo to match the convention expected
-                copy /y !InputAssemblyFile! !TargetOptimizationDataFile!
-            )
-
-            if exist "!TargetOptimizationDataFile!" (
-                REM Customize IBCMerge's arguments depending on input props
-                set IBCMergeArguments=-q -f -delete -mo "%__BinDir%\IL\System.Private.CoreLib.dll" -incremental "!TargetOptimizationDataFile!"
-
-                REM Apply optimization data to the compiled assembly
-                set NEXTCMD=!IBCMergeCommand! !IBCMergeArguments!
-                echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
-                call !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
-                if NOT !errorlevel! == 0 (
-                    echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
-                    REM Put it in the same log, helpful for Jenkins
-                    type %__CrossGenCoreLibLog%
-                    goto ExitWithError
-                )
-
-                REM Verify that the optimization data has been applied
-                set NEXTCMD=!IBCMergeCommand! -mi "%__BinDir%\IL\System.Private.CoreLib.dll"
-                echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
-                call !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
-                if NOT !errorlevel! == 0 (
-                    echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
-                    REM Put it in the same log, helpful for Jenkins
-                    type %__CrossGenCoreLibLog%
-                    goto ExitWithError
-                )
-            ) else (
-                echo %__MsgPrefix%!TargetOptimizationDataFile! does not exist >> %__CrossGenCoreLibLog%
-                echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
-                REM Put it in the same log, helpful for Jenkins
-                type %__CrossGenCoreLibLog%
-                goto ExitWithError
-            )
-        ) else (
-          echo Could not find IBCMerge at !IbcMergePath!. Have you restored src/.nuget/optdata/ibcmerge.csproj?
-          goto ExitWithError
-        )
+        copy /Y "%__BinDir%\clrjit.dll" "%__BinDir%\crossgen2\clrjitilc.dll"  | find /i /v "file(s) copied"
+        copy /Y "%__BinDir%\jitinterface.dll" "%__BinDir%\crossgen2\jitinterface.dll" | find /i /v "file(s) copied"
     )
-
     REM } Scope environment changes end
     endlocal
 )
@@ -1050,8 +919,6 @@ echo -nopgooptimize: do not use profile guided optimizations.
 echo -enforcepgo: verify after the build that PGO was used for key DLLs, and fail the build if not
 echo -pgoinstrument: generate instrumented code for profile guided optimization enabled binaries.
 echo -ibcinstrument: generate IBC-tuning-enabled native images when invoking crossgen.
-echo -ibcoptimize: use IBC data to optimize System.Private.CoreLib.dll
-echo -ibconly: only run the ibcoptimize step. Assumes an appropriate build already exists
 echo -configureonly: skip all builds; only run CMake ^(default: CMake and builds are run^)
 echo -skipconfigure: skip CMake ^(default: CMake is run^)
 echo -skipmscorlib: skip building System.Private.CoreLib ^(default: System.Private.CoreLib is built^).
index 6c54d81..e9e3532 100755 (executable)
@@ -65,7 +65,6 @@ restore_optdata()
         # Parse the optdata package versions out of msbuild so that we can pass them on to CMake
 
         local PgoDataPackagePathOutputFile="${__IntermediatesDir}/optdatapath.txt"
-        local IbcDataPackagePathOutputFile="${__IntermediatesDir}/ibcoptdatapath.txt"
 
         # Writes into ${PgoDataPackagePathOutputFile}
         "$__RepoRootDir/eng/common/msbuild.sh" /clp:nosummary $__ArcadeScriptArgs $OptDataProjectFilePath /t:DumpPgoDataPackagePath ${__CommonMSBuildArgs} /p:PgoDataPackagePathOutputFile=${PgoDataPackagePathOutputFile} > /dev/null 2>&1
@@ -76,16 +75,6 @@ restore_optdata()
         fi
 
         __PgoOptDataPath=$(<"${PgoDataPackagePathOutputFile}")
-
-        # Writes into ${IbcDataPackagePathOutputFile}
-        "$__RepoRootDir/eng/common/msbuild.sh" /clp:nosummary $__ArcadeScriptArgs $OptDataProjectFilePath /t:DumpIbcDataPackagePath ${__CommonMSBuildArgs} /p:IbcDataPackagePathOutputFile=${IbcDataPackagePathOutputFile} > /dev/null 2>&1
-        local exit_code="$?"
-        if [[ "$exit_code" != 0 || ! -f "${IbcDataPackagePathOutputFile}" ]]; then
-            echo "${__ErrMsgPrefix}Failed to get IBC data package path."
-            exit "$exit_code"
-        fi
-
-        __IbcOptDataPath=$(<"${IbcDataPackagePathOutputFile}")
     fi
 }
 
@@ -189,10 +178,6 @@ build_CoreLib()
 
     # Invoke MSBuild
     __ExtraBuildArgs=""
-    if [[ -z "$__IbcTuning"  ]]; then
-        __ExtraBuildArgs="$__ExtraBuildArgs /p:OptimizationDataDir=\"$__IbcOptDataPath/data\""
-        __ExtraBuildArgs="$__ExtraBuildArgs /p:EnableProfileGuidedOptimization=true"
-    fi
 
     if [[ "$__BuildManagedTools" -eq "1" ]]; then
         __ExtraBuildArgs="$__ExtraBuildArgs /p:BuildManagedTools=true"
diff --git a/src/coreclr/src/.nuget/optdata/ibcmerge.csproj b/src/coreclr/src/.nuget/optdata/ibcmerge.csproj
deleted file mode 100644 (file)
index ced214a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-  <PropertyGroup>
-    <TargetFramework>netstandard2.0</TargetFramework>
-    <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
-    <RuntimeIdentifiers>win7-x64;win7-x86;linux-x64</RuntimeIdentifiers>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.DotNet.IBCMerge" Version="$(MicrosoftDotNetIBCMergeVersion)" />
-  </ItemGroup>
-
-  <!--                                                                       -->
-  <!-- Task: DumpIbcMergePackagePath                                         -->
-  <!--                                                                       -->
-  <!-- Notes:                                                                -->
-  <!--                                                                       -->
-  <!-- DumpIbcMergePackagePath is used by build.sh and build.cmd to pass     -->
-  <!-- the path information to cmake. The task will write a file to be       -->
-  <!-- read back by build.cmd/sh. The path for the file is:                  -->
-  <!-- $(IbcMergePackagePathOutputFile)                                      -->
-  <!--                                                                       -->
-  <Target Name="DumpIbcMergePackagePath">
-    <!-- Error if IbcMergePackagePathOutputFile is not set. -->
-    <Error Condition="'$(IbcMergePackagePathOutputFile)'==''" Text="IbcMergePackagePathOutputFile must be passed as a property." />
-
-    <PropertyGroup>
-      <IbcMergePath>$(NuGetPackageRoot)microsoft.dotnet.ibcmerge\$(MicrosoftDotNetIBCMergeVersion)</IbcMergePath>
-    </PropertyGroup>
-
-    <!-- Cleanup old path file -->
-    <Delete Files="$(IbcMergePackagePathOutputFile)" Condition="Exists('$(IbcMergePackagePathOutputFile)')" />
-    <WriteLinesToFile File="$(IbcMergePackagePathOutputFile)" Lines="$(IbcMergePath)" Overwrite="true"/>
-    <Message Text="MicrosoftDotNetIBCMergePath: $(IbcMergePath) written to: $(IbcMergePackagePathOutputFile)" Importance="High" />
-  </Target>
-
-</Project>
index 0596049..4249df1 100644 (file)
       Version="$(optimizationPGOCoreCLRVersion)"
       Condition="'$(optimizationPGOCoreCLRVersion)'!='' And '$(OptimizationDataSupported)'!=''"
       GeneratePathProperty="true" />
-    <PackageReference Include="optimization.IBC.CoreCLR"
-      Version="$(optimizationIBCCoreCLRVersion)"
-      Condition="'$(optimizationIBCCoreCLRVersion)'!='' And '$(OptimizationDataSupported)'!=''"
-      GeneratePathProperty="true" />
   </ItemGroup>
 
   <!--                                                                       -->
@@ -34,7 +30,7 @@
   <Target Name="DumpPgoDataPackagePath">
     <!-- Error if PgoDataPackagePathOutputFile is not set. -->
     <Error Condition="'$(PgoDataPackagePathOutputFile)'==''" Text="PgoDataPackagePathOutputFile must be passed as a property." />
-    
+
     <PropertyGroup>
       <PgoPackagePath>$([MSBuild]::NormalizePath($(Pkgoptimization_PGO_CoreCLR),../../,optimization.$(_BuildOSArchLowercase).pgo.coreclr,$(optimizationPGOCoreCLRVersion)))</PgoPackagePath>
     </PropertyGroup>
     <WriteLinesToFile File="$(PgoDataPackagePathOutputFile)" Lines="" Condition="'$(OptimizationDataSupported)' != 'True'" Overwrite="true"/>
     <Message Text="optimizationPGOCoreCLR Package path: $(PgoPackagePath) written to: $(PgoDataPackagePathOutputFile)" Importance="High" />
   </Target>
-
-  <!--                                                                       -->
-  <!-- Task: DumpIbcDataPackagePath                                          -->
-  <!--                                                                       -->
-  <!-- Notes:                                                                -->
-  <!--                                                                       -->
-  <!-- DumpIbcDataPackagePath is used by build.sh and build.cmd to pass      -->
-  <!-- the path information to cmake. The task will write a file to be       -->
-  <!-- read back by build.cmd/sh. The path for the file is:                  -->
-  <!-- $(IbcDataPackagePathOutputFile)                                       -->
-  <!--                                                                       -->
-  <Target Name="DumpIbcDataPackagePath">
-    <!-- Error if IbcDataPackagePathOutputFile is not set. -->
-    <Error Condition="'$(IbcDataPackagePathOutputFile)'==''" Text="IbcDataPackagePathOutputFile must be passed as a property." />
-
-    <PropertyGroup>
-      <IbcPackagePath>$([MSBuild]::NormalizePath($(Pkgoptimization_IBC_CoreCLR),../../,optimization.$(_BuildOSArchLowercase).ibc.coreclr,$(optimizationIBCCoreCLRVersion)))</IbcPackagePath>
-    </PropertyGroup>
-
-    <Error Condition="!Exists('$(IbcPackagePath)') And '$(OptimizationDataSupported)' == 'True'" Text="Unable to locate restored IBC package. Maybe the platform-specific package naming changed?" />
-
-    <!-- Cleanup old version file -->
-    <Delete Files="$(IbcDataPackagePathOutputFile)" Condition="Exists('$(IbcDataPackagePathOutputFile)')" />
-
-    <WriteLinesToFile File="$(IbcDataPackagePathOutputFile)" Lines="$(IbcPackagePath)" Condition="'$(OptimizationDataSupported)' == 'True'" Overwrite="true"/>
-    <WriteLinesToFile File="$(IbcDataPackagePathOutputFile)" Lines="" Condition="'$(OptimizationDataSupported)' != 'True'" Overwrite="true"/>
-    <Message Text="optimizationIBCCoreCLRVersion: $(IbcPackagePath) written to: $(IbcDataPackagePathOutputFile)" Importance="High" />
-  </Target>
-
 </Project>
index 21f3c13..c13163e 100644 (file)
   <Import Project="CreateRuntimeRootILLinkDescriptorFile.targets" />
 
   <Target Name="CreateRuntimeRootIlLinkDescFile" BeforeTargets="CoreCompile" DependsOnTargets="_CreateILLinkRuntimeRootDescriptorFile"/>
+
+  <Import Project="$(RepositoryEngineeringDir)codeOptimization.targets" />
 </Project>