From 8d1e8739aab9d766996eb3f5721cb19402bc9c10 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 8 May 2024 10:14:01 -0700 Subject: [PATCH] Sourcebuild perf perhaps (#16860) * Sourcebuild perf * proto * publish * tweak * baseline * tweak * fix publish framework * temp * temp * temp * publish * props * UseCurrentRuntimeIdentifier * oops * publishing.props * BUILDING_USING_DOTNET * fsharpqa and ngen * Reqork -norealsig * update yaml * revert realsig changes --- Build.cmd | 2 +- Directory.Build.props | 20 ++--- Directory.Build.targets | 8 ++ FSharpBuild.Directory.Build.targets | 1 - Microsoft.FSharp.Compiler.sln | 14 ++-- Proto.sln | 34 -------- azure-pipelines-PR.yml | 4 +- build.sh | 2 +- buildtools/AssemblyCheck/AssemblyCheck.fsproj | 8 +- buildtools/buildtools.proj | 35 -------- buildtools/fslex/fslex.fsproj | 6 +- buildtools/fsyacc/fsyacc.fsproj | 6 +- eng/Build.ps1 | 16 ++-- eng/SourceBuildPrebuiltBaseline.xml | 5 ++ eng/build-utils.ps1 | 26 +----- eng/build.sh | 63 ++++++-------- eng/targets/NGenBinaries.targets | 83 ------------------- eng/test-determinism.ps1 | 75 +++++++++++------ proto.proj | 36 ++++++++ src/Compiler/FSharp.Compiler.Service.fsproj | 6 +- src/Directory.Build.targets | 2 +- src/FSharp.Build/FSharp.Build.fsproj | 13 +-- src/FSharp.Build/Fsc.fs | 12 +++ src/FSharp.Build/Microsoft.FSharp.Targets | 1 + ...Sharp.Compiler.Interactive.Settings.fsproj | 6 +- src/FSharp.Core/FSharp.Core.fsproj | 17 ++-- .../FSharp.DependencyManager.Nuget.fsproj | 5 +- .../Microsoft.FSharp.Compiler.fsproj | 11 ++- .../Microsoft.FSharp.Compiler.nuspec | 59 +++++++------ src/fsc/fsc.targets | 12 ++- src/fsc/fscAnyCpuProject/fscAnyCpu.fsproj | 2 - src/fsc/fscArm64Project/fscArm64.fsproj | 2 - src/fsc/fscProject/fsc.fsproj | 16 ++-- src/fsi/fsi.targets | 12 ++- src/fsi/fsiAnyCpuProject/fsiAnyCpu.fsproj | 2 - src/fsi/fsiArm64Project/fsiArm64.fsproj | 2 - src/fsi/fsiProject/fsi.fsproj | 16 ++-- tests/Directory.Build.props | 8 +- tests/fsharpqa/run.fsharpqa.test.fsx | 2 +- .../HostedCompilerServer.fsproj | 1 - vsintegration/Templates.Directory.Build.props | 6 ++ vsintegration/tests/UnitTests/Tests.Build.fs | 35 ++++++++ 42 files changed, 325 insertions(+), 367 deletions(-) delete mode 100644 Proto.sln delete mode 100644 buildtools/buildtools.proj delete mode 100644 eng/targets/NGenBinaries.targets create mode 100644 proto.proj diff --git a/Build.cmd b/Build.cmd index e8af08f3935..10845940e24 100644 --- a/Build.cmd +++ b/Build.cmd @@ -1,2 +1,2 @@ @echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0eng\build.ps1""" -build -restore %*" \ No newline at end of file +powershell -ExecutionPolicy ByPass -NoProfile -command "Measure-Command { & """%~dp0eng\build.ps1""" -build -restore %* } | Select-Object TotalMinutes, TotalSeconds" diff --git a/Directory.Build.props b/Directory.Build.props index 424258eef47..47b495dffb2 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -27,19 +27,11 @@ true - - - - $(OtherFlags) --realsig- - - $(OtherFlags) --realsig+ + + + $(OtherFlags) --realsig- + $(OtherFlags) --realsig+ @@ -53,8 +45,8 @@ $(ArtifactsDir)obj/$(MSBuildProjectName)/$(Configuration)/ - $(ArtifactsDir)/bin/fslex/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/fslex.dll - $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/fsyacc.dll + $(ArtifactsDir)/bin/fslex/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(RuntimeIdentifier)/fslex.dll + $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(RuntimeIdentifier)/fsyacc.dll NO_CHECKNULLS;BUILDING_WITH_LKG;NO_NULLCHECKING_LIB_SUPPORT;$(DefineConstants) diff --git a/Directory.Build.targets b/Directory.Build.targets index 079e0e68fd4..cd863377199 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -3,11 +3,19 @@ + + + $(ArtifactsDir)/bin/fslex/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fslex.dll + $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fsyacc.dll + + + diff --git a/FSharpBuild.Directory.Build.targets b/FSharpBuild.Directory.Build.targets index 17802630dc6..d49de27dccc 100644 --- a/FSharpBuild.Directory.Build.targets +++ b/FSharpBuild.Directory.Build.targets @@ -2,7 +2,6 @@ - diff --git a/Microsoft.FSharp.Compiler.sln b/Microsoft.FSharp.Compiler.sln index 7de4ee9f519..75b07e3170b 100644 --- a/Microsoft.FSharp.Compiler.sln +++ b/Microsoft.FSharp.Compiler.sln @@ -1,9 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.1.32113.165 +VisualStudioVersion = 17.10.34710.37 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FSharp.Compiler", "src\Microsoft.FSharp.Compiler\Microsoft.FSharp.Compiler.fsproj", "{BBEDE3FA-6E2C-4C53-8B61-FBB545CD4FFC}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Microsoft.FSharp.Compiler", "src\Microsoft.FSharp.Compiler\Microsoft.FSharp.Compiler.fsproj", "{196088D5-ED51-4A42-9B80-F0014D1ED28C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -11,15 +11,15 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BBEDE3FA-6E2C-4C53-8B61-FBB545CD4FFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BBEDE3FA-6E2C-4C53-8B61-FBB545CD4FFC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BBEDE3FA-6E2C-4C53-8B61-FBB545CD4FFC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BBEDE3FA-6E2C-4C53-8B61-FBB545CD4FFC}.Release|Any CPU.Build.0 = Release|Any CPU + {196088D5-ED51-4A42-9B80-F0014D1ED28C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {196088D5-ED51-4A42-9B80-F0014D1ED28C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {196088D5-ED51-4A42-9B80-F0014D1ED28C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {196088D5-ED51-4A42-9B80-F0014D1ED28C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {6FF31C5A-ED51-45C2-A405-5534CB7D283C} + SolutionGuid = {CBCFE753-E7C1-4FFB-9F8F-26B50E5910E4} EndGlobalSection EndGlobal diff --git a/Proto.sln b/Proto.sln deleted file mode 100644 index d48b1e3d1b6..00000000000 --- a/Proto.sln +++ /dev/null @@ -1,34 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.2.32630.192 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Build", "src\FSharp.Build\FSharp.Build.fsproj", "{C02D44B2-BB67-4A17-9678-9D21D93B3930}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsc", "src\fsc\fscProject\fsc.fsproj", "{5BEC9F77-5AE6-4EC3-BDE9-63CF8E1D0086}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsi", "src\fsi\fsiProject\fsi.fsproj", "{07CB51BF-8E98-4CFF-A7BA-99C4A0BC6037}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "src\FSharp.Core\FSharp.Core.fsproj", "{8A772476-D857-4810-9A9C-E67AC61497AB}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Proto|Any CPU = Proto|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C02D44B2-BB67-4A17-9678-9D21D93B3930}.Proto|Any CPU.ActiveCfg = Proto|Any CPU - {C02D44B2-BB67-4A17-9678-9D21D93B3930}.Proto|Any CPU.Build.0 = Proto|Any CPU - {5BEC9F77-5AE6-4EC3-BDE9-63CF8E1D0086}.Proto|Any CPU.ActiveCfg = Proto|Any CPU - {5BEC9F77-5AE6-4EC3-BDE9-63CF8E1D0086}.Proto|Any CPU.Build.0 = Proto|Any CPU - {07CB51BF-8E98-4CFF-A7BA-99C4A0BC6037}.Proto|Any CPU.ActiveCfg = Proto|Any CPU - {07CB51BF-8E98-4CFF-A7BA-99C4A0BC6037}.Proto|Any CPU.Build.0 = Proto|Any CPU - {8A772476-D857-4810-9A9C-E67AC61497AB}.Proto|Any CPU.ActiveCfg = Proto|Any CPU - {8A772476-D857-4810-9A9C-E67AC61497AB}.Proto|Any CPU.Build.0 = Proto|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {53F11F0A-D5FC-4410-B875-DC432F12B5AF} - EndGlobalSection -EndGlobal diff --git a/azure-pipelines-PR.yml b/azure-pipelines-PR.yml index 2733bc0d56e..efd1253ee81 100644 --- a/azure-pipelines-PR.yml +++ b/azure-pipelines-PR.yml @@ -357,7 +357,7 @@ stages: - checkout: self clean: true - - script: eng\CIBuild.cmd -compressallmetadata -norealsig -testCoreclr -configuration Release + - script: eng\CIBuild.cmd -compressallmetadata -buildnorealsig -testCoreclr -configuration Release env: NativeToolsOnMachine: true displayName: Build @@ -385,7 +385,7 @@ stages: - checkout: self clean: true - - script: eng\CIBuild.cmd -compressallmetadata -norealsig -testDesktop -configuration Release + - script: eng\CIBuild.cmd -compressallmetadata -buildnorealsig -testDesktop -configuration Release env: NativeToolsOnMachine: true displayName: Build diff --git a/build.sh b/build.sh index 6c74895c02c..ed7dcb1de39 100755 --- a/build.sh +++ b/build.sh @@ -13,4 +13,4 @@ while [[ -h $source ]]; do done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -"$scriptroot/eng/build.sh" --build --restore $@ +time "$scriptroot/eng/build.sh" --build --restore $@ diff --git a/buildtools/AssemblyCheck/AssemblyCheck.fsproj b/buildtools/AssemblyCheck/AssemblyCheck.fsproj index 1f01406c734..6cfd3b1103f 100644 --- a/buildtools/AssemblyCheck/AssemblyCheck.fsproj +++ b/buildtools/AssemblyCheck/AssemblyCheck.fsproj @@ -4,13 +4,17 @@ Exe $(FSharpNetCoreProductTargetFramework) true - false + + + + true + true - PreserveNewest + PreserveNewest diff --git a/buildtools/buildtools.proj b/buildtools/buildtools.proj deleted file mode 100644 index 5812bf8869b..00000000000 --- a/buildtools/buildtools.proj +++ /dev/null @@ -1,35 +0,0 @@ - - - - Debug - true - $(NoWarn);NU1504 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/buildtools/fslex/fslex.fsproj b/buildtools/fslex/fslex.fsproj index 50c1e4e3668..03ed6a77a60 100644 --- a/buildtools/fslex/fslex.fsproj +++ b/buildtools/fslex/fslex.fsproj @@ -4,10 +4,14 @@ Exe $(FSharpNetCoreProductTargetFramework) true - false LatestMajor + + true + true + + diff --git a/buildtools/fsyacc/fsyacc.fsproj b/buildtools/fsyacc/fsyacc.fsproj index 0cc67482b3a..621a2f3c7ca 100644 --- a/buildtools/fsyacc/fsyacc.fsproj +++ b/buildtools/fsyacc/fsyacc.fsproj @@ -4,10 +4,14 @@ Exe $(FSharpNetCoreProductTargetFramework) true - false LatestMajor + + true + true + + diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 690b8a58f81..982d5f28717 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -35,7 +35,7 @@ param ( # Options [switch][Alias('proto')]$bootstrap, [string]$bootstrapConfiguration = "Proto", - [string]$bootstrapTfm = "net472", + [string]$bootstrapTfm = "net8.0", [string]$fsharpNetCoreProductTfm = "net8.0", [switch][Alias('bl')]$binaryLog = $true, [switch][Alias('nobl')]$excludeCIBinaryLog = $false, @@ -69,7 +69,7 @@ param ( [switch]$sourceBuild, [switch]$skipBuild, [switch]$compressAllMetadata, - [switch]$norealsig, + [switch]$buildnorealsig, [switch]$verifypackageshipstatus = $false, [parameter(ValueFromRemainingArguments = $true)][string[]]$properties) @@ -132,7 +132,7 @@ function Print-Usage() { Write-Host " -sourceBuild Simulate building for source-build." Write-Host " -skipbuild Skip building product" Write-Host " -compressAllMetadata Build product with compressed metadata" - Write-Host " -norealsig Build product with realsig- (default use realsig+)" + Write-Host " -buildnorealsig Build product with realsig- (default use realsig+, where necessary)" Write-Host " -verifypackageshipstatus Verify whether the packages we are building have already shipped to nuget" Write-Host "" Write-Host "Command line arguments starting with '/p:' are passed through to MSBuild." @@ -212,12 +212,12 @@ function Process-Arguments() { $script:compressAllMetadata = $True; } - if ($norealsig) { - $script:realsig = $False; + if ($buildnorealsig) { + $script:buildnorealsig = $True $env:FSHARP_REALSIG="false" } else { - $script:realsig = $True; + $script:buildnorealsig = $False $env:FSHARP_REALSIG="true" } if ($verifypackageshipstatus) { @@ -298,7 +298,7 @@ function BuildSolution([string] $solutionName, $nopack) { /p:TestTargetFrameworks=$testTargetFrameworks ` /p:DotNetBuildFromSource=$sourceBuild ` /p:CompressAllMetadata=$CompressAllMetadata ` - /p:TestingLegacyInternalSignature=$realsig ` + /p:BuildNoRealsig=$buildnorealsig ` /v:$verbosity ` $suppressExtensionDeployment ` @properties @@ -554,7 +554,7 @@ try { } $script:BuildMessage = "Failure building product" - if ($restore -or $build -or $rebuild -or $pack -or $sign -or $publish -and -not $skipBuild) { + if ($restore -or $build -or $rebuild -or $pack -or $sign -or $publish -and -not $skipBuild -and -not $sourceBuild) { if ($noVisualStudio) { BuildSolution "FSharp.sln" $False } diff --git a/eng/SourceBuildPrebuiltBaseline.xml b/eng/SourceBuildPrebuiltBaseline.xml index 31c0ad52ed2..bd4b7f794d0 100644 --- a/eng/SourceBuildPrebuiltBaseline.xml +++ b/eng/SourceBuildPrebuiltBaseline.xml @@ -16,6 +16,11 @@ + + + + + diff --git a/eng/build-utils.ps1 b/eng/build-utils.ps1 index f73195c7ccd..61016da9aa9 100644 --- a/eng/build-utils.ps1 +++ b/eng/build-utils.ps1 @@ -240,33 +240,15 @@ function Make-BootstrapBuild() { # prepare FsLex and Fsyacc and AssemblyCheck $dotnetPath = InitializeDotNetCli $dotnetExe = Join-Path $dotnetPath "dotnet.exe" - $buildToolsProject = "`"$RepoRoot\buildtools\buildtools.proj`"" - - $argNoRestore = if ($norestore) { " --no-restore" } else { "" } - $argNoIncremental = if ($rebuild) { " --no-incremental" } else { "" } - - $args = "build $buildToolsProject -c $bootstrapConfiguration -v $verbosity" + $argNoRestore + $argNoIncremental - if ($binaryLog) { - $logFilePath = Join-Path $LogDir "toolsBootstrapLog.binlog" - $args += " /bl:`"$logFilePath`"" - } - Exec-Console $dotnetExe $args - - Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\$fsharpNetCoreProductTfm" -Destination "$dir\fslex" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\$fsharpNetCoreProductTfm" -Destination "$dir\fsyacc" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\AssemblyCheck\$bootstrapConfiguration\$fsharpNetCoreProductTfm" -Destination "$dir\AssemblyCheck" -Force -Recurse # prepare compiler - $protoProject = "`"$RepoRoot\proto.sln`"" - $args = "build $protoProject -c $bootstrapConfiguration -v $verbosity " + $argNoRestore + $argNoIncremental + $projectpath = "$RepoRoot" + "proto.proj" + $args = "publish $projectpath -c $bootstrapConfiguration" if ($binaryLog) { - $logFilePath = Join-Path $LogDir "protoBootstrapLog.binlog" + $logFilePath = Join-Path $LogDir "bootstrap.binlog" $args += " /bl:`"$logFilePath`"" } + Write-Host "$dotnetExe $args" Exec-Console $dotnetExe $args - - Copy-Item "$ArtifactsDir\bin\fsc\$bootstrapConfiguration\$bootstrapTfm" -Destination "$dir\fsc" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\fsi\$bootstrapConfiguration\$bootstrapTfm" -Destination "$dir\fsi" -Force -Recurse - return $dir } diff --git a/eng/build.sh b/eng/build.sh index f8db4462ff7..886eb598c1e 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -34,7 +34,7 @@ usage() echo " --skipBuild Do not run the build" echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --sourceBuild Simulate building for source-build" - echo " --norealsig Build product with realsig- (default use realsig+)" + echo " --buildnorealsig Build product with realsig- (default use realsig+ where necessary)" echo " --tfm Override the default target framework" echo "" echo "Command line arguments starting with '/p:' are passed through to MSBuild." @@ -69,7 +69,7 @@ skip_analyzers=false skip_build=false prepare_machine=false source_build=false -realsig=true +buildnorealsig=false properties="" docker=false @@ -154,8 +154,8 @@ while [[ $# > 0 ]]; do --sourcebuild) source_build=true ;; - --norealsig) - realsig=false + --buildnorealsig) + buildnorealsig=true ;; --tfm) tfm=$2 @@ -227,8 +227,6 @@ function BuildSolution { BUILDING_USING_DOTNET=false BuildCategory="Build" BuildMessage="Error preparing build" - local solution="FSharp.sln" - echo "$solution:" InitializeToolset local toolset_build_proj=$_InitializeToolset @@ -238,7 +236,9 @@ function BuildSolution { bl="/bl:\"$log_dir/Build.binlog\"" fi - local projects="$repo_root/$solution" + local projects="$repo_root/FSharp.sln" + + echo "$projects:" # https://github.com/dotnet/roslyn/issues/23736 local enable_analyzers=!$skip_analyzers @@ -262,37 +262,26 @@ function BuildSolution { node_reuse=false # build bootstrap tools - # source_build=true means we are currently in the outer/wrapper source-build, - # and building bootstrap needs to wait. The source-build targets will run this - # script again without setting source_build=true when it is done setting up - # the build environment. See 'eng/SourceBuild.props'. - if [[ "$source_build" != true ]]; then - bootstrap_config=Proto - bootstrap_dir=$artifacts_dir/Bootstrap - if [[ "$force_bootstrap" == true ]]; then - rm -fr $bootstrap_dir - fi - if [ ! -f "$bootstrap_dir/fslex.dll" ]; then - local bltools="" - if [[ "$bl" != "" ]]; then - bltools=$bl+".lex.binlog" - fi - BuildMessage="Error building tools" - MSBuild "$repo_root/buildtools/buildtools.proj" /restore "$bltools" /p:Configuration=$bootstrap_config - - mkdir -p "$bootstrap_dir" - cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/$tfm $bootstrap_dir/fslex - cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/$tfm $bootstrap_dir/fsyacc + # source_build=In source build proto does no work, except cause sourcebuild in wrapper to build + bootstrap_dir=$artifacts_dir/Bootstrap + if [[ "$force_bootstrap" == true ]]; then + rm -fr $bootstrap_dir + fi + if [ ! -f "$bootstrap_dir/fslex/fslex.dll" ]; then + local bltools="" + if [[ "$bl" != "" ]]; then + bltools=$bl+".proto.binlog" fi - if [ ! -f "$bootstrap_dir/fsc.exe" ]; then - local bltools="" - if [[ "$bl" != "" ]]; then - bltools=$bl+".bootstrap.binlog" - fi - BuildMessage="Error building bootstrap" - MSBuild "$repo_root/Proto.sln" /restore "$bltools" /p:Configuration=$bootstrap_config - cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/$tfm $bootstrap_dir/fsc + + local blrestore="" + if [[ "$source_build" != "true" ]]; then + blrestore="/restore" fi + + BuildMessage="Error building tools" + local args=" publish $repo_root/proto.proj $blrestore $bltools /p:Configuration=Proto /p:ArcadeBuildFromSource=$source_build" + echo $args + "$DOTNET_INSTALL_DIR/dotnet" $args #$args || exit $? fi if [[ "$skip_build" != true ]]; then @@ -313,7 +302,7 @@ function BuildSolution { /p:QuietRestore=$quiet_restore \ /p:QuietRestoreBinaryLog="$binary_log" \ /p:ArcadeBuildFromSource=$source_build \ - /p:TestingLegacyInternalSignature=$realsig \ + /p:BuildNoRealsig=$buildnorealsig \ $properties fi } diff --git a/eng/targets/NGenBinaries.targets b/eng/targets/NGenBinaries.targets deleted file mode 100644 index e0529d3bb61..00000000000 --- a/eng/targets/NGenBinaries.targets +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - false - true - - - - - - - true - false - - - - - - - $(windir)\Microsoft.NET\Framework\v4.0.30319\ngen.exe - $(windir)\Microsoft.NET\Framework64\v4.0.30319\ngen.exe - $(windir)\Microsoft.NET\FrameworkArm64\v4.0.30319\ngen.exe - - - - - - - - - - - - - - - - - - - - $(WindowsSDK_ExecutablePath_x86)\sn.exe - $(WindowsSDK_ExecutablePath_x64)\sn.exe - $(WindowsSDK_ExecutablePath_Arm64)\sn.exe - - - - - - - - diff --git a/eng/test-determinism.ps1 b/eng/test-determinism.ps1 index 499c1187a0d..05c0417b1ec 100644 --- a/eng/test-determinism.ps1 +++ b/eng/test-determinism.ps1 @@ -25,31 +25,43 @@ if ($help) { # List of binary names that should be skipped because they have a known issue that # makes them non-deterministic. $script:skipList = @() -function Run-Build([string]$rootDir, [string]$logFileName) { +function Run-Build([string]$rootDir, [string]$increment) { + + $logFileName = $increment # Clean out the previous run Write-Host "Cleaning binaries in $rootDir" - $binDir = Get-BinDir $rootDir - $objDir = Get-ObjDir $rootDir + $binDir = Get-BinDir (Get-ArtifactsDir $rootDir) + $objDir = Get-ObjDir (Get-ArtifactsDir $rootDir) + $incrementDir = Get-LeafDir (Get-ArtifactsDir $rootDir) $increment + $stopWatch = [System.Diagnostics.StopWatch]::StartNew() + Write-Host "Cleaning binaries in $binDir" Remove-Item -Recurse $binDir -ErrorAction SilentlyContinue + Write-Host "Cleaning binaries in $objDir" Remove-Item -Recurse $objDir -ErrorAction SilentlyContinue + + Write-Host "Cleaning binaries in $incrementDir" + Remove-Item -Recurse $incrementDir -ErrorAction SilentlyContinue + $stopWatch.Stop() + Write-Host "Cleaning took $($stopWatch.Elapsed)" $solution = Join-Path $rootDir "Microsoft.FSharp.Compiler.sln" if ($logFileName -eq "") { - $logFileName = [IO.Path]::GetFileNameWithoutExtension($projectFilePath) + $logFileName = [IO.Path]::GetFileNameWithoutExtension($solution) } + $logFileName = [IO.Path]::ChangeExtension($logFileName, ".binlog") $logFilePath = Join-Path $LogDir $logFileName Stop-Processes - Write-Host "Building $solution using $bootstrapDir" + Write-Host "Building $solution using $bootstrapDir into '$increment' $incrementDir" MSBuild $toolsetBuildProj ` /p:Configuration=$configuration ` /p:Projects=$solution ` @@ -71,27 +83,39 @@ function Run-Build([string]$rootDir, [string]$logFileName) { /p:DebugDeterminism=true ` /p:Features="debug-determinism" ` /p:DeployExtension=false ` - /p:BootstrapBuildPath=$bootstrapDir ` /p:RunAnalyzers=false ` /p:RunAnalyzersDuringBuild=false ` /p:BUILDING_USING_DOTNET=false ` /bl:$logFilePath + Write-Host "Copy-Item -Path $binDir -Destination $incrementDir -ErrorAction SilentlyContinue -Recurse" + Copy-Item -Path $binDir -Destination $incrementDir -ErrorAction SilentlyContinue -Recurse + Stop-Processes } -function Get-ObjDir([string]$rootDir) { - return Join-Path $rootDir "artifacts\obj" + +function Get-LeafDir([string]$dir, [string]$leaf) { + return Join-Path $dir $leaf +} + +function Get-ArtifactsDir([string]$dir) { + return Get-LeafDir $dir "artifacts" +} + +function Get-ObjDir([string]$dir) { + return Get-LeafDir $dir "obj" } -function Get-BinDir([string]$rootDir) { - return Join-Path $rootDir "artifacts\bin" +function Get-BinDir([string]$dir) { + return Get-LeafDir $dir "bin" } # Return all of the files that need to be processed for determinism under the given # directory. -function Get-FilesToProcess([string]$rootDir) { - $objDir = Get-ObjDir $rootDir +function Get-FilesToProcess([string]$rootDir, [string]$increment) { + $objDir = Get-LeafDir (Get-ArtifactsDir $rootDir) $increment + foreach ($item in Get-ChildItem -re -in *.dll, *.exe, *.pdb, *.sourcelink.json $objDir) { $filePath = $item.FullName $fileName = Split-Path -leaf $filePath @@ -132,12 +156,13 @@ function Get-FilesToProcess([string]$rootDir) { } # This will build up the map of all of the binaries and their respective hashes. -function Record-Binaries([string]$rootDir) { +function Record-Binaries([string]$rootDir, [string]$increment) { $stopWatch = [System.Diagnostics.StopWatch]::StartNew() Write-Host "Recording file hashes" $map = @{ } - foreach ($fileData in Get-FilesToProcess $rootDir) { + Write-Host "Get-FilesToProcess $rootDir $increment" + foreach ($fileData in Get-FilesToProcess $rootDir $increment) { Write-Host "`t$($fileData.FileId) = $($fileData.Hash)" $map[$fileData.FileId] = $fileData } @@ -177,15 +202,16 @@ function Test-MapContents($dataMap) { } } -function Test-Build([string]$rootDir, $dataMap, [string]$logFileName) { - Run-Build $rootDir -logFile $logFileName +function Test-Build([string]$rootDir, $dataMap, [string]$increment) { + $logFileName = $increment + Run-Build $rootDir -increment $increment $errorList = @() $allGood = $true - Write-Host "Testing the binaries" + Write-Host "Testing the binaries: $rootDir" $stopWatch = [System.Diagnostics.StopWatch]::StartNew() - foreach ($fileData in Get-FilesToProcess $rootDir) { + foreach ($fileData in Get-FilesToProcess $rootDir $increment) { $fileId = $fileData.FileId $fileName = $fileData.FileName $filePath = $fileData.FilePath @@ -248,12 +274,13 @@ function Test-Build([string]$rootDir, $dataMap, [string]$logFileName) { function Run-Test() { # Run the initial build so that we can populate the maps - Run-Build $RepoRoot -logFileName "Initial" -useBootstrap - $dataMap = Record-Binaries $RepoRoot + Run-Build $RepoRoot -increment "Initial" -useBootstrap + + $dataMap = Record-Binaries $RepoRoot "Initial" Test-MapContents $dataMap # Run a test against the source in the same directory location - Test-Build -rootDir $RepoRoot -dataMap $dataMap -logFileName "test1" + Test-Build -rootDir $RepoRoot -dataMap $dataMap -increment "Test1" # Run another build in a different source location and verify that path mapping # allows the build to be identical. To do this we'll copy the entire source @@ -377,12 +404,8 @@ try { $script:bootstrap = $true $script:bootstrapConfiguration = "Proto" - $script:bootstrapTfm = "net472" $script:fsharpNetCoreProductTfm = "net8.0" - - if ($script:msbuildEngine -eq "dotnet") { - $script.bootstrapTfm = $script:fsharpNetCoreProductTfm - } + $script:bootstrapTfm = $script:fsharpNetCoreProductTfm $bootstrapDir = Make-BootstrapBuild diff --git a/proto.proj b/proto.proj new file mode 100644 index 00000000000..2d07b389fa6 --- /dev/null +++ b/proto.proj @@ -0,0 +1,36 @@ + + + + Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Compiler/FSharp.Compiler.Service.fsproj b/src/Compiler/FSharp.Compiler.Service.fsproj index 770e7a1aee6..63428be3f11 100644 --- a/src/Compiler/FSharp.Compiler.Service.fsproj +++ b/src/Compiler/FSharp.Compiler.Service.fsproj @@ -25,12 +25,14 @@ $(IntermediateOutputPath)$(TargetFramework)\ $(IntermediateOutputPath)$(TargetFramework)\ false - Debug;Release;ReleaseCompressed + Debug;Release - false + false + false + false diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index 068f4dc3c51..5937c5678c8 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -1,4 +1,4 @@ - + diff --git a/src/FSharp.Build/FSharp.Build.fsproj b/src/FSharp.Build/FSharp.Build.fsproj index f8fbc7138ef..70f2f534c30 100644 --- a/src/FSharp.Build/FSharp.Build.fsproj +++ b/src/FSharp.Build/FSharp.Build.fsproj @@ -13,13 +13,14 @@ $(NoWarn);NU1701;FS0075 true 7.0 - Debug;Release;Proto;ReleaseCompressed + Debug;Release;Proto - - false - true + + true + false + true @@ -50,13 +51,13 @@ {{FSCorePackageVersionValue}} $(FSharpCoreShippedPackageVersionValue) - + Microsoft.FSharp.Core.NetSdk.props Release\ {{FSCorePackageVersionValue}} $(FSCorePackageVersionValue) - + Microsoft.FSharp.Core.NetSdk.props Shipping\ {{FSCorePackageVersionValue}} diff --git a/src/FSharp.Build/Fsc.fs b/src/FSharp.Build/Fsc.fs index 614a6b4f392..74e499ad86e 100644 --- a/src/FSharp.Build/Fsc.fs +++ b/src/FSharp.Build/Fsc.fs @@ -56,6 +56,7 @@ type public Fsc() as this = let mutable preferredUILang: string MaybeNull = null let mutable publicSign: bool = false let mutable provideCommandLineArgs: bool = false + let mutable realsig: bool = false let mutable references: ITaskItem[] = [||] let mutable referencePath: string MaybeNull = null let mutable refOnly: bool = false @@ -194,6 +195,12 @@ type public Fsc() as this = else builder.AppendSwitch("--optimize-") + // realsig + if realsig then + builder.AppendSwitch("--realsig+") + else + builder.AppendSwitch("--realsig-") + // Tailcalls if not tailcalls then builder.AppendSwitch("--tailcalls-") @@ -530,6 +537,11 @@ type public Fsc() as this = with get () = publicSign and set (s) = publicSign <- s + // --realsig[+-] + member _.RealSig + with get () = realsig + and set (b) = realsig <- b + // -r : Reference an F# or .NET assembly. member _.References with get () = references diff --git a/src/FSharp.Build/Microsoft.FSharp.Targets b/src/FSharp.Build/Microsoft.FSharp.Targets index 26999e6a646..0ac058e30ba 100644 --- a/src/FSharp.Build/Microsoft.FSharp.Targets +++ b/src/FSharp.Build/Microsoft.FSharp.Targets @@ -387,6 +387,7 @@ this file. PreferredUILang="$(PreferredUILang)" ProvideCommandLineArgs="$(ProvideCommandLineArgs)" PublicSign="$(PublicSign)" + RealSig="$(RealSig)" References="@(ReferencePathWithRefAssemblies)" ReferencePath="$(ReferencePathWithRefAssemblies)" RefOnly="$(ProduceOnlyReferenceAssembly)" diff --git a/src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj b/src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj index 8c159c34f01..85814ac6e5f 100644 --- a/src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj +++ b/src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj @@ -11,8 +11,10 @@ - - false + + true + false + true diff --git a/src/FSharp.Core/FSharp.Core.fsproj b/src/FSharp.Core/FSharp.Core.fsproj index da433ca2293..dbfbf0006e6 100644 --- a/src/FSharp.Core/FSharp.Core.fsproj +++ b/src/FSharp.Core/FSharp.Core.fsproj @@ -4,7 +4,8 @@ Library - netstandard2.1;netstandard2.0 + netstandard2.0 + netstandard2.0;netstandard2.1 $(NoWarn);62 $(NoWarn);75 $(NoWarn);1204 @@ -25,11 +26,8 @@ $(OtherFlags) --nowarn:3513 $(OtherFlags) --compiling-fslib --compiling-fslib-40 --maxerrors:100 --extraoptimizationloops:1 - - $(OtherFlags) --realsig- true - true true FSharp.Core $(FSCorePackageVersion) @@ -37,12 +35,19 @@ true FSharp.Core redistributables from F# Tools version $(FSProductVersionPrefix) For F# $(FSLanguageVersion). Contains code from the F# Software Foundation. /blob/main/release-notes.md#FSharp-Core-$(FSCoreReleaseNotesVersion) - Debug;Release;Proto;ReleaseCompressed + Debug;Release;Proto + + + + + $(OtherFlags) --realsig- - false + false + false + false diff --git a/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj b/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj index 3d15f45e103..7b5aad10dba 100644 --- a/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj +++ b/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj @@ -14,9 +14,10 @@ - + true - false + false + true diff --git a/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.fsproj b/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.fsproj index 7c186a76bb4..a33eeaa8d39 100644 --- a/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.fsproj +++ b/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.fsproj @@ -28,12 +28,8 @@ - - Configuration=ReleaseCompressed;CompressAllMetadata=true - - - Configuration=ReleaseCompressed;CompressAllMetadata=true - + + @@ -52,6 +48,9 @@ TargetFrameworks=netstandard2.0 + + TargetFrameworks=netstandard2.0 + diff --git a/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec b/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec index 24df391b69f..2c31f40e583 100644 --- a/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec +++ b/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec @@ -26,43 +26,42 @@ this approach gives a very small deployment. Which is kind of necessary. --> - - - - - - - + + + + + + - - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/fsc/fsc.targets b/src/fsc/fsc.targets index 2973feb613e..1c67ceb393a 100644 --- a/src/fsc/fsc.targets +++ b/src/fsc/fsc.targets @@ -4,19 +4,17 @@ Exe + Debug;Release;Proto $(NoWarn);44 $(NoWarn);75 true - true - true - false - - true - true - false + + true + true + true diff --git a/src/fsc/fscAnyCpuProject/fscAnyCpu.fsproj b/src/fsc/fscAnyCpuProject/fscAnyCpu.fsproj index b792e01777d..3fac5305cae 100644 --- a/src/fsc/fscAnyCpuProject/fscAnyCpu.fsproj +++ b/src/fsc/fscAnyCpuProject/fscAnyCpu.fsproj @@ -5,9 +5,7 @@ net472 anycpu - .exe true - Debug;Release;ReleaseCompressed diff --git a/src/fsc/fscArm64Project/fscArm64.fsproj b/src/fsc/fscArm64Project/fscArm64.fsproj index a87677d9f55..c7c42ca1adf 100644 --- a/src/fsc/fscArm64Project/fscArm64.fsproj +++ b/src/fsc/fscArm64Project/fscArm64.fsproj @@ -5,9 +5,7 @@ net472 arm64 - .exe true - Debug;Release;ReleaseCompressed diff --git a/src/fsc/fscProject/fsc.fsproj b/src/fsc/fscProject/fsc.fsproj index b382709200d..5f30ad30579 100644 --- a/src/fsc/fscProject/fsc.fsproj +++ b/src/fsc/fscProject/fsc.fsproj @@ -2,19 +2,23 @@ - + net472;$(FSharpNetCoreProductTargetFramework) $(FSharpNetCoreProductTargetFramework) x86 - Debug;Release;Proto;ReleaseCompressed - - net472 - $(FSharpNetCoreProductTargetFramework) - x86 + + $(FSharpNetCoreProductTargetFramework) + true + true + + + + + $(ArtifactsDir)/bin/$(MSBuildProjectName)/$(Configuration)/ $(ArtifactsDir)obj/$(MSBuildProjectName)/$(Configuration)/ diff --git a/src/fsi/fsi.targets b/src/fsi/fsi.targets index 2f38a20ecc3..1fb29b4bff6 100644 --- a/src/fsi/fsi.targets +++ b/src/fsi/fsi.targets @@ -4,13 +4,11 @@ Exe + Debug;Release;Proto $(NoWarn);44 true $(OtherFlags) --warnon:1182 $(MSBuildThisFileDirectory)fsi.res - true - true - false @@ -18,10 +16,10 @@ - - true - true - false + + true + true + true diff --git a/src/fsi/fsiAnyCpuProject/fsiAnyCpu.fsproj b/src/fsi/fsiAnyCpuProject/fsiAnyCpu.fsproj index a77d45ffeec..f11e2783e44 100644 --- a/src/fsi/fsiAnyCpuProject/fsiAnyCpu.fsproj +++ b/src/fsi/fsiAnyCpuProject/fsiAnyCpu.fsproj @@ -5,10 +5,8 @@ net472 anycpu - .exe true $(DefineConstants);FSI_SHADOW_COPY_REFERENCES;FSI_SERVER - Debug;Release;ReleaseCompressed diff --git a/src/fsi/fsiArm64Project/fsiArm64.fsproj b/src/fsi/fsiArm64Project/fsiArm64.fsproj index 6c183d4a611..07e19f49d5e 100644 --- a/src/fsi/fsiArm64Project/fsiArm64.fsproj +++ b/src/fsi/fsiArm64Project/fsiArm64.fsproj @@ -5,10 +5,8 @@ net472 arm64 - .exe true $(DefineConstants);FSI_SHADOW_COPY_REFERENCES;FSI_SERVER - Debug;Release;ReleaseCompressed diff --git a/src/fsi/fsiProject/fsi.fsproj b/src/fsi/fsiProject/fsi.fsproj index 653122fc76d..639ab45af17 100644 --- a/src/fsi/fsiProject/fsi.fsproj +++ b/src/fsi/fsiProject/fsi.fsproj @@ -2,19 +2,23 @@ - + net472;$(FSharpNetCoreProductTargetFramework) $(FSharpNetCoreProductTargetFramework) x86 - Debug;Release;Proto;ReleaseCompressed - - net472 - $(FSharpNetCoreProductTargetFramework) - x86 + + $(FSharpNetCoreProductTargetFramework) + true + true + + + + + $(ArtifactsDir)/bin/$(MSBuildProjectName)/$(Configuration)/ $(ArtifactsDir)obj/$(MSBuildProjectName)/$(Configuration)/ diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index 91c969b0ec6..06697bc35ed 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -7,9 +7,15 @@ portable - + + + false + false + true + + diff --git a/tests/fsharpqa/run.fsharpqa.test.fsx b/tests/fsharpqa/run.fsharpqa.test.fsx index 0d87d742401..4c821e00d61 100644 --- a/tests/fsharpqa/run.fsharpqa.test.fsx +++ b/tests/fsharpqa/run.fsharpqa.test.fsx @@ -22,7 +22,7 @@ let nugetCache = | null -> Path.Combine(System.Environment.GetEnvironmentVariable "USERPROFILE", ".nuget", "packages") | path -> path let rootFolder = Path.Combine(__SOURCE_DIRECTORY__, "..", "..") -let compilerBinFolder = Path.Combine(rootFolder, "artifacts", "bin", "fsc", releaseOrDebug, "net472") +let compilerBinFolder = Path.Combine(rootFolder, "artifacts", "bin", "fsc", releaseOrDebug, "net8.0") setEnvVar "CSC_PIPE" (Path.Combine(nugetCache, "Microsoft.Net.Compilers", "4.3.0-1.22220.8", "tools", "csc.exe")) setEnvVar "FSC" (Path.Combine(compilerBinFolder, "fsc.exe")) setEnvVar "FSCOREDLLPATH" (Path.Combine(compilerBinFolder, "FSharp.Core.dll")) diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj index f67562799e0..b7781a00d54 100644 --- a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj +++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj @@ -11,7 +11,6 @@ $(NoWarn);44 AnyCPU true - true diff --git a/vsintegration/Templates.Directory.Build.props b/vsintegration/Templates.Directory.Build.props index 3801f7748c8..4ba654b8fac 100644 --- a/vsintegration/Templates.Directory.Build.props +++ b/vsintegration/Templates.Directory.Build.props @@ -31,4 +31,10 @@ false + + true + false + false + + diff --git a/vsintegration/tests/UnitTests/Tests.Build.fs b/vsintegration/tests/UnitTests/Tests.Build.fs index 19f4bffd569..07831f79dcb 100644 --- a/vsintegration/tests/UnitTests/Tests.Build.fs +++ b/vsintegration/tests/UnitTests/Tests.Build.fs @@ -79,6 +79,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--codepage:65001" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -94,6 +95,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("-g" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -109,6 +111,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--debug:pdbonly" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -126,6 +129,7 @@ type Build() = AssertEqual ("--define:FOO=3" + Environment.NewLine + "--define:BAR=4" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -140,6 +144,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--nowarn:52,109" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -155,6 +160,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -169,6 +175,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--warnaserror-:52,109" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -184,6 +191,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--versionfile:src/version" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -200,6 +208,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--doc:foo.xml" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -215,6 +224,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--sig:foo.fsi" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -230,6 +240,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--keyfile:key.txt" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -245,6 +256,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--noframework" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -259,6 +271,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize-" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -274,6 +287,7 @@ type Build() = printfn "cmd=\"%s\"" cmd // REVIEW we don't put the default, is that desired? AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -288,6 +302,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -305,6 +320,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("-o:oUt.dll" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -319,6 +335,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--pdb:out.pdb" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -334,6 +351,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--platform:x64" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -349,6 +367,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--platform:x86" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -365,6 +384,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "-r:" + dll + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -381,6 +401,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--lib:c:\\sd\\staging\\tools\\nunit\\,c:\\Foo" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -397,6 +418,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--lib:c:\\program files,c:\\sd\\staging\\tools\\nunit,c:\\Foo" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -412,6 +434,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--resource:Foo.resources" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -429,6 +452,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -446,6 +470,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--target:library" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -461,6 +486,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--target:winexe" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -476,6 +502,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--target:module" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -490,6 +517,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--utf8output" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -504,6 +532,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--win32res:foo.res" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -518,6 +547,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--win32manifest:foo.manifest" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -532,6 +562,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva+" + Environment.NewLine + @@ -545,6 +576,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--subsystemversion:6.02" + Environment.NewLine + @@ -599,6 +631,7 @@ type Build() = "--sig:foo.fsi" + Environment.NewLine + "--keyfile:key.txt" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--pdb:out.pdb" + Environment.NewLine + "--platform:anycpu" + Environment.NewLine + "--resource:MyRes.resources" + Environment.NewLine + @@ -642,6 +675,7 @@ type Build() = "--sig:foo.fsi" "--keyfile:key.txt" "--optimize+" + "--realsig-" "--pdb:out.pdb" "--platform:anycpu" "--resource:MyRes.resources" @@ -685,6 +719,7 @@ type Build() = let expected = "--optimize+" + Environment.NewLine + + "--realsig-" + Environment.NewLine + "--nowarn:52,109,110,73,85" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine +