[Infrastructure] Use MSBuild v15 extension point to control CL parallelism, abstract...
authorJacek Blaszczynski <biosciencenow@outlook.com>
Sat, 4 Nov 2017 18:11:25 +0000 (19:11 +0100)
committerWes Haggard <weshaggard@users.noreply.github.com>
Sat, 4 Nov 2017 18:11:25 +0000 (11:11 -0700)
commit5a01d8a39576f0d07441e4d123a90138f4ae0735
treef1f4f9e4f368181d8ba3d86ff563100157f8eb73
parent9345244f8172de638223cd7c1e48a5cd169185eb
[Infrastructure] Use MSBuild v15 extension point to control CL parallelism, abstract MSBuild /maxcpucount switch (#14578)

This commit frees -ExtraParameters and uses MSBuild v15 extension point to control CL compiler parallelism.

If MSBuild 15.0 is available - installed with Visual Studio 2017 - CL parallelism control is achieved by using extension point in Microsoft.Common.props file which allows to include Directory.Build.props - for details see [Microsoft.Common.props] [1] file in MSBuild repo. https://github.com/Microsoft/msbuild/blob/b38e4ceeaaec36c5237ae698041e9b9f18c84876/src/Tasks/Microsoft.Common.props#L36.

MSBuild parallelism is controled via abstracted /maxcpucount command line switch
which now is available as -MSBuildNodeCount pass through run.cmd/run.sh command line
argument with default value equal to /maxcpucount (what defaults to number of logical processors).
This allows to control MSBuild parallelism on all supported platforms.

It is possible to control MSBuild parallelism programatically via MSBuild public
API using MaxNodeCount properties available on the following APIs:

Microsoft.Build.Evaluation.ProjectCollection.MaxNodeCount
Microsoft.Build.Execution.BuildParameters.MaxNodeCount
It's use in current build infrastructure would require creating unnecessary
complexity and was ruled out.
12 files changed:
CMakeLists.txt
Directory.Build.props [moved from clr.nativebuild.props with 100% similarity]
build.cmd
config.json
crosscomponents.cmake
functions.cmake
src/ToolBox/superpmi/mcs/CMakeLists.txt
src/ToolBox/superpmi/superpmi-shim-collector/CMakeLists.txt
src/ToolBox/superpmi/superpmi-shim-counter/CMakeLists.txt
src/ToolBox/superpmi/superpmi-shim-simple/CMakeLists.txt
src/ToolBox/superpmi/superpmi/CMakeLists.txt
src/dlls/mscordac/CMakeLists.txt