Fix using the nopgooptimize flag in the CoreCLR build scripts. (#31931)
authorJeremy Koritzinsky <jekoritz@microsoft.com>
Fri, 7 Feb 2020 21:38:56 +0000 (13:38 -0800)
committerGitHub <noreply@github.com>
Fri, 7 Feb 2020 21:38:56 +0000 (13:38 -0800)
* Only try to resolve PGO package path when PGOOptimize is enabled.

* Don't resolve PGO files unless we're optimizing with PGO.

* Only get the PgoDataPackagePath whne PGOOptimize is enabled.

src/coreclr/build.cmd
src/coreclr/build.sh
src/coreclr/pgosupport.cmake

index 7e8a3d7..4f23a96 100644 (file)
@@ -388,24 +388,26 @@ if %__RestoreOptData% EQU 1 (
         goto ExitWithCode
     )
 )
+set __PgoOptDataPath=
+if %__PgoOptimize% EQU 1 (
+    set PgoDataPackagePathOutputFile="%__IntermediatesDir%\optdatapath.txt"
 
-set PgoDataPackagePathOutputFile="%__IntermediatesDir%\optdatapath.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%^
+        "%OptDataProjectFilePath%" /t:DumpPgoDataPackagePath %__CommonMSBuildArgs% /p:PgoDataPackagePathOutputFile="!PgoDataPackagePathOutputFile!"
 
-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%^
-    "%OptDataProjectFilePath%" /t:DumpPgoDataPackagePath %__CommonMSBuildArgs% /p:PgoDataPackagePathOutputFile="!PgoDataPackagePathOutputFile!"
+    if not !errorlevel! == 0 (
+        echo %__ErrMsgPrefix%Failed to get PGO data package path.
+        set __exitCode=!errorlevel!
+        goto ExitWithCode
+    )
+    if not exist "!PgoDataPackagePathOutputFile!" (
+        echo %__ErrMsgPrefix%Failed to get PGO data package path.
+        goto ExitWithError
+    )
 
- if not !errorlevel! == 0 (
-    echo %__ErrMsgPrefix%Failed to get PGO data package path.
-    set __exitCode=!errorlevel!
-    goto ExitWithCode
+    set /p __PgoOptDataPath=<"!PgoDataPackagePathOutputFile!"
 )
-if not exist "!PgoDataPackagePathOutputFile!" (
-    echo %__ErrMsgPrefix%Failed to get PGO data package path.
-    goto ExitWithError
-)
-
-set /p __PgoOptDataPath=<"!PgoDataPackagePathOutputFile!"
 
 REM =========================================================================================
 REM ===
index 131fd7c..c7e32b7 100755 (executable)
@@ -62,7 +62,7 @@ restore_optdata()
         fi
     fi
 
-    if [[ "$__IsMSBuildOnNETCoreSupported" == 1 ]]; then
+    if [[ "$__PgoOptimize" == 1 && "$__IsMSBuildOnNETCoreSupported" == 1 ]]; then
         # Parse the optdata package versions out of msbuild so that we can pass them on to CMake
 
         local PgoDataPackagePathOutputFile="${__IntermediatesDir}/optdatapath.txt"
index f5a2d2f..7e24b7d 100644 (file)
@@ -3,17 +3,6 @@ check_ipo_supported(RESULT HAVE_LTO)
 
 # Adds Profile Guided Optimization (PGO) flags to the current target
 function(add_pgo TargetName)
-    if(CLR_CMAKE_HOST_WIN32)
-        set(ProfileFileName "${TargetName}.pgd")
-    else(CLR_CMAKE_HOST_WIN32)
-        set(ProfileFileName "${TargetName}.profdata")
-    endif(CLR_CMAKE_HOST_WIN32)
-
-    file(TO_NATIVE_PATH
-        "${CLR_CMAKE_OPTDATA_PATH}/data/${ProfileFileName}"
-        ProfilePath
-    )
-
     if(CLR_CMAKE_PGO_INSTRUMENT)
         if(CLR_CMAKE_HOST_WIN32)
             set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS_RELEASE        " /LTCG /GENPROFILE")
@@ -25,6 +14,17 @@ function(add_pgo TargetName)
             endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELEASE OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELWITHDEBINFO)
         endif(CLR_CMAKE_HOST_WIN32)
     elseif(CLR_CMAKE_PGO_OPTIMIZE)
+        if(CLR_CMAKE_HOST_WIN32)
+            set(ProfileFileName "${TargetName}.pgd")
+        else(CLR_CMAKE_HOST_WIN32)
+            set(ProfileFileName "${TargetName}.profdata")
+        endif(CLR_CMAKE_HOST_WIN32)
+
+        file(TO_NATIVE_PATH
+            "${CLR_CMAKE_OPTDATA_PATH}/data/${ProfileFileName}"
+            ProfilePath
+        )
+
         # If we don't have profile data availble, gracefully fall back to a non-PGO opt build
         if(NOT EXISTS ${ProfilePath})
             message("PGO data file NOT found: ${ProfilePath}")