diff --git a/FSharp.sln b/FSharp.sln
index c34abdba39a..e1c47795e8d 100644
--- a/FSharp.sln
+++ b/FSharp.sln
@@ -16,9 +16,6 @@ EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Interactive.Settings", "src\fsharp\FSharp.Compiler.Interactive.Settings\FSharp.Compiler.Interactive.Settings.fsproj", "{649FA588-F02E-457C-9FCF-87E46407481E}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsi", "src\fsharp\fsi\fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}"
- ProjectSection(ProjectDependencies) = postProject
- {649FA588-F02E-457C-9FCF-87E46407481E} = {649FA588-F02E-457C-9FCF-87E46407481E}
- EndProjectSection
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharpSuite.Tests", "tests\fsharp\FSharpSuite.Tests.fsproj", "{C163E892-5BF7-4B59-AA99-B0E8079C67C4}"
EndProject
diff --git a/FSharpBuild.Directory.Build.props b/FSharpBuild.Directory.Build.props
index a1ba7ab156d..515de9bbdc7 100644
--- a/FSharpBuild.Directory.Build.props
+++ b/FSharpBuild.Directory.Build.props
@@ -11,8 +11,7 @@
$(RepoRoot)src
$(ArtifactsDir)\SymStore
- $(ArtifactsDir)\Bootstrap
- $(ArtifactsDir)/fsc/Proto/netcoreapp2.1
+ $(ArtifactsDir)\Bootstrap
4.4.0
1182;0025;$(WarningsAsErrors)
@@ -96,10 +95,10 @@
- $(ProtoOutputPath)\Microsoft.FSharp.Targets
- $(ProtoOutputPath)\Microsoft.FSharp.NetSdk.props
- $(ProtoOutputPath)\Microsoft.FSharp.NetSdk.targets
- $(ProtoOutputPath)\Microsoft.FSharp.Overrides.NetSdk.targets
+ $(ProtoOutputPath)\fsc\Microsoft.FSharp.Targets
+ $(ProtoOutputPath)\fsc\Microsoft.FSharp.NetSdk.props
+ $(ProtoOutputPath)\fsc\Microsoft.FSharp.NetSdk.targets
+ $(ProtoOutputPath)\fsc\Microsoft.FSharp.Overrides.NetSdk.targets
diff --git a/FSharpTests.Directory.Build.props b/FSharpTests.Directory.Build.props
index 7c00805dda5..8a7a832a43e 100644
--- a/FSharpTests.Directory.Build.props
+++ b/FSharpTests.Directory.Build.props
@@ -32,9 +32,9 @@
- <_FSharpBuildTargetFramework Condition="'$(FSharpTestCompilerVersion)' == 'net40'">net472
- <_FSharpBuildTargetFramework Condition="'$(FSharpTestCompilerVersion)' == 'coreclr'">netcoreapp2.1
- <_FSharpBuildBinPath>$(MSBuildThisFileDirectory)artifacts\bin\FSharp.Build\$(Configuration)\$(_FSharpBuildTargetFramework)
+ <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'!='Core'">net472
+ <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'=='Core'">netcoreapp2.1
+ <_FSharpBuildBinPath>$(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\$(_FSharpBuildTargetFramework)
$(_FSharpBuildBinPath)\FSharp.Build.dll
diff --git a/eng/Build.ps1 b/eng/Build.ps1
index a296764692d..54e6ff5e2b7 100644
--- a/eng/Build.ps1
+++ b/eng/Build.ps1
@@ -68,6 +68,7 @@ function Print-Usage() {
Write-Host ""
Write-Host "Actions:"
Write-Host " -restore Restore packages (short: -r)"
+ Write-Host " -norestore Don't restore packages"
Write-Host " -build Build main solution (short: -b)"
Write-Host " -rebuild Rebuild main solution"
Write-Host " -pack Build NuGet packages, VS insertion manifests and installer"
@@ -106,6 +107,7 @@ function Process-Arguments() {
Print-Usage
exit 0
}
+ $script:nodeReuse = $False;
if ($testAll) {
$script:testDesktop = $True
@@ -143,7 +145,7 @@ function Process-Arguments() {
}
function Update-Arguments() {
- if (-Not (Test-Path "$ArtifactsDir\Bootstrap\fsc.exe")) {
+ if (-Not (Test-Path "$ArtifactsDir\Bootstrap\fsc\fsc.exe")) {
$script:bootstrap = $True
}
}
@@ -177,7 +179,6 @@ function BuildSolution() {
/p:Publish=$publish `
/p:ContinuousIntegrationBuild=$ci `
/p:OfficialBuildId=$officialBuildId `
- /p:BootstrapBuildPath=$bootstrapDir `
/p:QuietRestore=$quietRestore `
/p:QuietRestoreBinaryLog=$binaryLog `
/p:TestTargetFrameworks=$testTargetFrameworks `
@@ -211,7 +212,7 @@ function UpdatePath() {
}
function VerifyAssemblyVersions() {
- $fsiPath = Join-Path $ArtifactsDir "bin\fsi\Proto\net472\fsi.exe"
+ $fsiPath = Join-Path $ArtifactsDir "bin\fsi\Proto\net472\publish\fsi.exe"
# Only verify versions on CI or official build
if ($ci -or $official) {
diff --git a/eng/build-utils.ps1 b/eng/build-utils.ps1
index d1e5dd85d55..335379b2f73 100644
--- a/eng/build-utils.ps1
+++ b/eng/build-utils.ps1
@@ -178,7 +178,7 @@ function Get-PackageDir([string]$name, [string]$version = "") {
return $p
}
-function Run-MSBuild([string]$projectFilePath, [string]$buildArgs = "", [string]$logFileName = "", [switch]$parallel = $true, [switch]$summary = $true, [switch]$warnAsError = $true, [string]$configuration = $script:configuration) {
+function Run-MSBuild([string]$projectFilePath, [string]$buildArgs = "", [string]$logFileName = "", [switch]$parallel = $true, [switch]$summary = $true, [switch]$warnAsError = $true, [string]$configuration = $script:configuration, [string]$verbosity = $script:verbosity) {
# Because we override the C#/VB toolset to build against our LKG package, it is important
# that we do not reuse MSBuild nodes from other jobs/builds on the machine. Otherwise,
# we'll run into issues such as https://github.com/dotnet/roslyn/issues/6211.
@@ -216,10 +216,6 @@ function Run-MSBuild([string]$projectFilePath, [string]$buildArgs = "", [string]
$args += " /p:ContinuousIntegrationBuild=true"
}
- if ($bootstrapDir -ne "") {
- $args += " /p:BootstrapBuildPath=$bootstrapDir"
- }
-
$args += " $buildArgs"
$args += " $projectFilePath"
$args += " $properties"
@@ -241,15 +237,15 @@ function Make-BootstrapBuild() {
Create-Directory $dir
# prepare FsLex and Fsyacc
- Run-MSBuild "$RepoRoot\src\buildtools\buildtools.proj" "/restore /t:Build" -logFileName "BuildTools" -configuration $bootstrapConfiguration
- Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\netcoreapp2.1\*" -Destination $dir
- Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\netcoreapp2.1\*" -Destination $dir
+ Run-MSBuild "$RepoRoot\src\buildtools\buildtools.proj" "/restore /t:Publish" -logFileName "BuildTools" -configuration $bootstrapConfiguration
+ Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\netcoreapp2.1\publish" -Destination "$dir\fslex" -Force -Recurse
+ Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\netcoreapp2.1\publish" -Destination "$dir\fsyacc" -Force -Recurse
# prepare compiler
$projectPath = "$RepoRoot\proto.proj"
- Run-MSBuild $projectPath "/restore /t:Build" -logFileName "Bootstrap" -configuration $bootstrapConfiguration
- Copy-Item "$ArtifactsDir\bin\fsc\$bootstrapConfiguration\$bootstrapTfm\*" -Destination $dir
- Copy-Item "$ArtifactsDir\bin\fsi\$bootstrapConfiguration\$bootstrapTfm\*" -Destination $dir
+ Run-MSBuild $projectPath "/restore /t:Publish" -logFileName "Bootstrap" -configuration $bootstrapConfiguration
+ Copy-Item "$ArtifactsDir\bin\fsc\$bootstrapConfiguration\$bootstrapTfm\publish" -Destination "$dir\fsc" -Force -Recurse
+ Copy-Item "$ArtifactsDir\bin\fsi\$bootstrapConfiguration\$bootstrapTfm\publish" -Destination "$dir\fsi" -Force -Recurse
return $dir
}
diff --git a/eng/build.sh b/eng/build.sh
index 8ce74bfa523..c467296d3d3 100755
--- a/eng/build.sh
+++ b/eng/build.sh
@@ -13,7 +13,9 @@ usage()
echo " --binaryLog Create MSBuild binary log (short: -bl)"
echo ""
echo "Actions:"
+ echo " --bootstrap Force the build of the bootstrap compiler"
echo " --restore Restore projects required to build (short: -r)"
+ echo " --norestore Don't restore projects required to build"
echo " --build Build all projects (short: -b)"
echo " --rebuild Rebuild all projects"
echo " --pack Build nuget packages"
@@ -54,6 +56,7 @@ test_core_clr=false
configuration="Debug"
verbosity='minimal'
binary_log=false
+force_bootstrap=false
ci=false
skip_analyzers=false
prepare_machine=false
@@ -88,6 +91,9 @@ while [[ $# > 0 ]]; do
--binarylog|-bl)
binary_log=true
;;
+ --bootstrap)
+ force_bootstrap=true
+ ;;
--restore|-r)
restore=true
;;
@@ -205,17 +211,33 @@ function BuildSolution {
quiet_restore=true
fi
+ # Node reuse fails because multiple different versions of FSharp.Build.dll get loaded into MSBuild nodes
+ node_reuse=false
+
# build bootstrap tools
bootstrap_config=Proto
- MSBuild "$repo_root/src/buildtools/buildtools.proj" \
- /restore \
- /p:Configuration=$bootstrap_config \
- /t:Build
-
bootstrap_dir=$artifacts_dir/Bootstrap
- mkdir -p "$bootstrap_dir"
- cp $artifacts_dir/bin/fslex/$bootstrap_config/netcoreapp2.1/* $bootstrap_dir
- cp $artifacts_dir/bin/fsyacc/$bootstrap_config/netcoreapp2.1/* $bootstrap_dir
+ if [[ "$force_bootstrap" == true ]]; then
+ rm -fr $bootstrap_dir
+ fi
+ if [ ! -f "$bootstrap_dir/fslex.dll" ]; then
+ MSBuild "$repo_root/src/buildtools/buildtools.proj" \
+ /restore \
+ /p:Configuration=$bootstrap_config \
+ /t:Publish
+
+ mkdir -p "$bootstrap_dir"
+ cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/netcoreapp2.1/publish $bootstrap_dir/fslex
+ cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/netcoreapp2.1/publish $bootstrap_dir/fsyacc
+ fi
+ if [ ! -f "$bootstrap_dir/fsc.exe" ]; then
+ MSBuild "$repo_root/proto.proj" \
+ /restore \
+ /p:Configuration=$bootstrap_config \
+ /t:Publish
+
+ cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/netcoreapp2.1/publish $bootstrap_dir/fsc
+ fi
# do real build
MSBuild $toolset_build_proj \
diff --git a/fcs/Directory.Build.props b/fcs/Directory.Build.props
index c56fd7cba6d..2841a5fb34f 100644
--- a/fcs/Directory.Build.props
+++ b/fcs/Directory.Build.props
@@ -31,7 +31,6 @@
$(FSharpSourcesRoot)\..\packages\FSharp.Compiler.Tools.4.1.27\tools
fsi.exe
- $(ArtifactsBinDir)\FSharp.Build\Proto\net472
4.6.2
net461
diff --git a/proto.proj b/proto.proj
index 84103f6fdf8..b0ee288977f 100644
--- a/proto.proj
+++ b/proto.proj
@@ -28,6 +28,10 @@
+
+
+
+
diff --git a/src/buildtools/buildtools.proj b/src/buildtools/buildtools.proj
index 593f086dd07..630bb678561 100644
--- a/src/buildtools/buildtools.proj
+++ b/src/buildtools/buildtools.proj
@@ -2,7 +2,8 @@
Debug
-
+ true
+
@@ -10,23 +11,23 @@
-
+
-
+
-
+
-
+
-
+
diff --git a/src/buildtools/buildtools.targets b/src/buildtools/buildtools.targets
index 303ab00825d..185fd4d0599 100644
--- a/src/buildtools/buildtools.targets
+++ b/src/buildtools/buildtools.targets
@@ -20,7 +20,7 @@
BeforeTargets="CoreCompile">
- $(ArtifactsDir)\Bootstrap\fslex.dll
+ $(ArtifactsDir)\Bootstrap\fslex\fslex.dll
@@ -43,7 +43,7 @@
BeforeTargets="CoreCompile">
- $(ArtifactsDir)\Bootstrap\fsyacc.dll
+ $(ArtifactsDir)\Bootstrap\fsyacc\fsyacc.dll
diff --git a/src/fsharp/fsi/fsi.fsproj b/src/fsharp/fsi/fsi.fsproj
index d091baf9f93..cdc65b92dc7 100644
--- a/src/fsharp/fsi/fsi.fsproj
+++ b/src/fsharp/fsi/fsi.fsproj
@@ -29,12 +29,12 @@
-
-
-
+
+
+
-
+