[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[win-pv-devel] [PATCH] Re-work PowerShell build scripts



* build.ps1 has been renamed to msbuild.ps1 and made into a more basic
  wrapper for invoking msbuild
* A new build.ps1 has been created to mirror the functionality of build.py
* package.ps1 has been folded into msbuild.ps1

All scripts have also had some level of cosmetic tidying and have been tested
in both the rs2 and rs5 EWDKs (with VS2015 and VS2017 respectively).

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 build.ps1    | 142 +++++++++++++++++++++++++----------------------------------
 genfiles.ps1 |  54 +++++++++++++----------
 msbuild.ps1  | 105 +++++++++++++++++++++++++++++++++++++++++++
 package.ps1  |  69 -----------------------------
 symstore.ps1 |  35 ++++++---------
 5 files changed, 209 insertions(+), 196 deletions(-)
 create mode 100644 msbuild.ps1
 delete mode 100644 package.ps1

diff --git a/build.ps1 b/build.ps1
index a18292d..bea93cc 100644
--- a/build.ps1
+++ b/build.ps1
@@ -1,103 +1,83 @@
 #
-# Wrapper script for MSBuild
-# Also creates the final package(s) (if specified) and bumps the build number
+# Main build script
 #
+
 param(
-       [string]$SolutionDir = "vs2017",
-       [string]$DriverName = "xenbus",
-       [string]$ConfigurationBase = "Windows 10",
-       [switch]$Free,
-       [switch]$Checked,
-       [switch]$Sdv,
-       [switch]$Package,
-       [switch]$DontBumpBuild
+       [Parameter(Mandatory = $true)]
+       [string]$Type,
+       [switch]$Sdv
 )
 
-Function Run-MSBuild {
+#
+# Script Body
+#
+
+Function Build {
        param(
-               [string]$SolutionDir,
-               [string]$SolutionName,
-               [string]$Configuration,
-               [string]$Platform,
-               [string]$Target = "Build",
-               [string]$Inputs = ""
+               [string]$Arch,
+               [string]$Type
        )
 
-       $c=[string]::Format("/p:Configuration=`"{0}`"", $Configuration)
-       $p=[string]::Format("/p:Platform=`"{0}`"", $Platform)
-       $t=[string]::Format("/t:`"{0}`"", $Target)
-       $s=[string]::Format("{0}\{1}", $SolutionDir, $SolutionName)
-       if ($Inputs) {
-               $i=[string]::Format("/p:Inputs=`"{0}`"", $Inputs)
-               Write-Host "msbuild.exe" "/m:1" $c $p $t $i $s
-               & "msbuild.exe" "/m:1" $c $p $t $s $i
-       } else {
-               Write-Host "msbuild.exe" "/m:1" $c $p $t $s
-               & "msbuild.exe" "/m:1" $c $p $t $s
+       $visualstudioversion = $Env:VisualStudioVersion
+       $solutiondir = @{ "14.0" = "vs2015"; "15.0" = "vs2017"; }
+       $configurationbase = @{ "14.0" = "Windows 10"; "15.0" = "Windows 10"; }
+
+       $params = @{
+               SolutionDir = $solutiondir[$visualstudioversion];
+               Arch = $Arch;
        }
-}
+       & ".\genfiles.ps1" @params
 
-Function Run-MSBuildSDV {
-       param(
-               [string]$SolutionDir,
-               [string]$ProjectName
-       )
+       $params = @{
+               SolutionDir = $solutiondir[$visualstudioversion];
+               ConfigurationBase = $configurationbase[$visualstudioversion];
+               Arch = $Arch;
+               Type = $Type
+               }
+       & ".\msbuild.ps1" @params
 
-       $basepath = Get-Location
-       $projpath = Join-Path -Path $SolutionDir -ChildPath $ProjectName
-       Set-Location $projpath
+       $params = @{
+               Arch = $Arch;
+       }
+       & ".\symstore.ps1" @params
+}
 
-       $project = [string]::Format("{0}.vcxproj", $ProjectName)
-       Run-MSBuild $projpath $project "Windows 10 Release" "x64" "Build"
-       Run-MSBuild $projpath $project "Windows 10 Release" "x64" "sdv" "/clean"
-       Run-MSBuild $projpath $project "Windows 10 Release" "x64" "sdv" 
"/check:default.sdv /debug"
-       Run-MSBuild $projpath $project "Windows 10 Release" "x64" "dvl"
+Function SdvBuild {
+       $visualstudioversion = $Env:VisualStudioVersion
+       $solutiondir = @{ "14.0" = "vs2015"; "15.0" = "vs2017"; }
+       $configurationbase = @{ "14.0" = "Windows 10"; "15.0" = "Windows 10"; }
+       $arch = "x64"
 
-       $refine = Join-Path -Path $projpath -ChildPath "refine.sdv"
-       if (Test-Path -Path $refine -PathType Leaf) {
-               Run-MSBuild $projpath $project "Windows 10 Release" "x64" "sdv" 
"/refine"
+       $params = @{
+               SolutionDir = $solutiondir[$visualstudioversion];
+               Arch = $arch;
        }
+       & ".\genfiles.ps1" @params
 
-       Set-Location $basepath
+       $params = @{
+               SolutionDir = $solutiondir[$visualstudioversion];
+               ConfigurationBase = $configurationbase[$visualstudioversion];
+               Arch = $arch;
+               Type = "sdv"
+               }
+       & ".\msbuild.ps1" @params
 }
 
-#
-# Script Body
-#
+if ($Type -ne "free" -and $Type -ne "checked") {
+       Write-Host "Invalid Type"
+       Exit -1
+}
 
-$configuration = @{ "free"="$ConfigurationBase Release"; 
"checked"="$ConfigurationBase Debug" }
-$solutionname = [string]::Format("{0}.sln", $DriverName)
-$solutiondir = Resolve-Path $SolutionDir
+Build "x86" $Type
+Build "x64" $Type
 
-if ($Free -or -not ($Sdv -or $Checked)) {
-       Run-MSBuild $solutiondir $solutionname $configuration["free"] "x64"
-       Run-MSBuild $solutiondir $solutionname $configuration["free"] "Win32"
-}
-if ($Checked) {
-       Run-MSBuild $solutiondir $solutionname $configuration["checked"] "x64"
-       Run-MSBuild $solutiondir $solutionname $configuration["checked"] "Win32"
-}
 if ($Sdv) {
-       Run-MSBuildSDV $solutiondir "xen"
-       Run-MSBuildSDV $solutiondir "xenfilt"
-       Run-MSBuildSDV $solutiondir "xenbus"
-}
-if ($Package) {
-       $config=$ConfigurationBase.Replace(' ', '')
-       $params = @{
-               SolutionDir=$SolutionDir;
-               DriverName=$DriverName;
-               ConfigurationBase=$config;
-               Free=$Free;
-               Checked=$Checked
-       }
-       & ".\package.ps1" @params
+       SdvBuild
 }
-if (-not $DontBumpBuild) {
-       if (Test-Path ".build_number") {
-               $TheBuildNum = Get-Content -Path ".build_number"
-               Set-Content -Path ".build_number" -Value ([int]$TheBuildNum + 1)
-       } else {
-               Set-Content -Path ".build_number" -Value "1"
-       }
+
+if (Test-Path ".build_number") {
+       $TheBuildNum = Get-Content -Path ".build_number"
+       Set-Content -Path ".build_number" -Value ([int]$TheBuildNum + 1)
+} else {
+       Set-Content -Path ".build_number" -Value "1"
 }
diff --git a/genfiles.ps1 b/genfiles.ps1
index 6f03d2e..d9a5088 100644
--- a/genfiles.ps1
+++ b/genfiles.ps1
@@ -3,17 +3,18 @@
 #
 param(
        [string]$SolutionDir = "vs2017",
-       [string]$DriverName = "xenbus",
-       [string]$ConfigFile = $null
+       [string]$ConfigFile = $null,
+       [Parameter(Mandatory = $true)]
+       [string]$Arch
 )
 
 # Copy $InFileName -> $OutFileName replacing $Token$_.Key$Token with $_.Value 
from
 # either $ConfigFile or $Replacements
 Function Copy-FileWithReplacements {
        param(
-               [Parameter(Mandatory=$true)]
+               [Parameter(Mandatory = $true)]
                [string]$InFileName,
-               [Parameter(Mandatory=$true)]
+               [Parameter(Mandatory = $true)]
                [string]$OutFileName,
                [string]$ConfigFile,
                [hashtable]$Replacements,
@@ -38,7 +39,7 @@ Function Copy-FileWithReplacements {
        ForEach-Object {
                $line = $_
                $List.GetEnumerator() | ForEach-Object {
-                       $key=[string]::Format("{0}{1}{2}", $Token, $_.Name, 
$Token)
+                       $key = [string]::Format("{0}{1}{2}", $Token, $_.Name, 
$Token)
                        if (([string]::IsNullOrEmpty($_.Value)) -and 
($line.Contains($key))) {
                                Write-Host "Skipping Line Containing " $_.Name
                                $line = $null
@@ -59,7 +60,8 @@ Set-Location $PSScriptRoot
 $TheYear = Get-Date -UFormat "%Y"
 $TheMonth = Get-Date -UFormat "%m"
 $TheDay = Get-Date -UFormat "%d"
-$TheDate = Get-Date -UFormat "%m/%d/%Y"
+$InfArch = @{ "x86" = "x86"; "x64" = "amd64" }
+$InfDate = Get-Date -UFormat "%m/%d/%Y"
 
 # if GitRevision is $null, GIT_REVISION will be excluded from the 
Copy-FileWithReplacements
 $GitRevision = & "git.exe" "rev-list" "--max-count=1" "HEAD"
@@ -82,23 +84,24 @@ if (-not $TheBuildNum) {
 # [ordered] makes output easier to parse by humans
 $Replacements = [ordered]@{
        # default parameters, may be overridden in config.ps1
-       'VENDOR_NAME'='Xen Project';
-       'PRODUCT_NAME'='Xen';
-       'VENDOR_DEVICE_ID'=$null; # must define this replacement, or 
@VENDOR_DEVICE_ID@ will remain in OutFileName
-       'VENDOR_PREFIX'='XP';
+       'VENDOR_NAME' = 'Xen Project';
+       'PRODUCT_NAME' = 'Xen';
+       'VENDOR_DEVICE_ID' = $null; # must define this replacement, or 
@VENDOR_DEVICE_ID@ will remain in OutFileName
+       'VENDOR_PREFIX' = 'XP';
 
-       'MAJOR_VERSION'='9';
-       'MINOR_VERSION'='0';
-       'MICRO_VERSION'='0';
+       'MAJOR_VERSION' = '9';
+       'MINOR_VERSION' = '0';
+       'MICRO_VERSION' = '0';
 
        # generated values (should not be in config.ps1)
-       'BUILD_NUMBER'=$TheBuildNum;
-       'GIT_REVISION'= $GitRevision;
-
-       'INF_DATE'=$TheDate;
-       'YEAR'=$TheYear;
-       'MONTH'=$TheMonth;
-       'DAY'=$TheDay
+       'BUILD_NUMBER' = $TheBuildNum;
+       'GIT_REVISION' = $GitRevision;
+
+       'INF_DATE' = $InfDate;
+       'INF_ARCH' = $InfArch[$Arch];
+       'YEAR' = $TheYear;
+       'MONTH' = $TheMonth;
+       'DAY' = $TheDay
 }
 
 if ($ConfigFile -and (Test-Path -Path $ConfigFile)) {
@@ -108,12 +111,15 @@ if ($ConfigFile -and (Test-Path -Path $ConfigFile)) {
 
 $Replacements | Out-String | Write-Host
 
-$src = "./include/version.tmpl"
-$dst = "./include/version.h"
+$includepath = Resolve-Path "include"
+$src = Join-Path -Path $includepath -ChildPath "version.tmpl"
+$dst = Join-Path -Path $includepath -ChildPath "version.h"
 Copy-FileWithReplacements $src $dst -Replacements $Replacements
 
-$src = [string]::Format("./src/{0}.inf", $DriverName)
-$dst = [string]::Format("./{0}/{1}.inf", $SolutionDir, $DriverName)
+$sourcepath = Resolve-Path "src"
+$solutionpath = Resolve-Path $SolutionDir
+$src = Join-Path -Path $sourcepath -ChildPath "xenbus.inf"
+$dst = Join-Path -Path $solutionpath -ChildPath "xenbus.inf"
 Copy-FileWithReplacements $src $dst -Replacements $Replacements
 
 Set-Location $cwd
diff --git a/msbuild.ps1 b/msbuild.ps1
new file mode 100644
index 0000000..3361ea1
--- /dev/null
+++ b/msbuild.ps1
@@ -0,0 +1,105 @@
+#
+# Wrapper script for MSBuild
+#
+param(
+       [string]$SolutionDir = "vs2017",
+       [string]$ConfigurationBase = "Windows 10",
+       [Parameter(Mandatory = $true)]
+       [string]$Arch,
+       [Parameter(Mandatory = $true)]
+       [string]$Type
+)
+
+Function Run-MSBuild {
+       param(
+               [string]$SolutionPath,
+               [string]$Name,
+               [string]$Configuration,
+               [string]$Platform,
+               [string]$Target = "Build",
+               [string]$Inputs = ""
+       )
+
+       $c = [string]::Format("/p:Configuration=`"{0}`"", $Configuration)
+       $p = [string]::Format("/p:Platform=`"{0}`"", $Platform)
+       $t = [string]::Format("/t:`"{0}`"", $Target)
+       $s = Join-Path -Path $SolutionPath -ChildPath $Name
+       if ($Inputs) {
+               $i = [string]::Format("/p:Inputs=`"{0}`"", $Inputs)
+               Write-Host "msbuild.exe" "/m:1" $c $p $t $i $s
+               & "msbuild.exe" "/m:1" $c $p $t $s $i
+       } else {
+               Write-Host "msbuild.exe" "/m:1" $c $p $t $s
+               & "msbuild.exe" "/m:1" $c $p $t $s
+       }
+}
+
+Function Run-MSBuildSDV {
+       param(
+               [string]$SolutionPath,
+               [string]$Name,
+               [string]$Configuration,
+               [string]$Platform
+       )
+
+       $basepath = Get-Location
+       $projpath = Join-Path -Path $SolutionPath -ChildPath $Name
+       Set-Location $projpath
+
+       $project = [string]::Format("{0}.vcxproj", $Name)
+       Run-MSBuild $projpath $project $Configuration $Platform "Build"
+       Run-MSBuild $projpath $project $Configuration $Platform "sdv" "/clean"
+       Run-MSBuild $projpath $project $Configuration $Platform "sdv" 
"/check:default.sdv /debug"
+       Run-MSBuild $projpath $project $Configuration $Platform "dvl"
+
+       $refine = Join-Path -Path $projpath -ChildPath "refine.sdv"
+       if (Test-Path -Path $refine -PathType Leaf) {
+               Run-MSBuild $projpath $project $Configuration $Platform "sdv" 
"/refine"
+       }
+
+       Set-Location $basepath
+}
+
+Function Copy-To-Archive {
+       param(
+               [string]$ArtifactPath,
+               [string]$ArchivePath
+       )
+
+       if (-Not (Test-Path -Path $ArtifactPath)) {
+                return
+       }
+
+       if (-Not (Test-Path -Path $ArchivePath)) {
+               New-Item -Name $ArchivePath -ItemType Directory | Out-Null
+       }
+
+       $src = Join-Path -Path $ArtifactPath -ChildPath "package"
+       Get-ChildItem -Path $src -File | Copy-Item -Destination $ArchivePath
+}
+
+#
+# Script Body
+#
+
+$configuration = @{ "free" = "$ConfigurationBase Release"; "checked" = 
"$ConfigurationBase Debug"; "sdv" = "$ConfigurationBase Release"; }
+$platform = @{ "x86" = "Win32"; "x64" = "x64" }
+$solutionpath = Resolve-Path $SolutionDir
+$artifactpath = Join-Path -Path $solutionpath -ChildPath (Join-Path -Path 
$configuration[$Type].Replace(' ', '') -Childpath $platform[$Arch])
+$archivepath = Join-Path -Path (Resolve-Path "xenbus") -ChildPath $Arch
+
+if ($Type -eq "free") {
+       Run-MSBuild $solutionpath "xenbus.sln" $configuration["free"] 
$platform[$Arch]
+       Copy-To-Archive $artifactpath $archivepath
+}
+elseif ($Type -eq "checked") {
+       Run-MSBuild $solutionpath "xenbus.sln" $configuration["checked"] 
$platform[$Arch]
+       Copy-To-Archive $artifactpath $archivepath
+}
+elseif ($Type -eq "sdv") {
+       Run-MSBuildSDV $solutionpath "xen" $configuration["sdv"] 
$platform[$Arch]
+       Run-MSBuildSDV $solutionpath "xenfilt" $configuration["sdv"] 
$platform[$Arch]
+       Run-MSBuildSDV $solutionpath "xenbus" $configuration["sdv"] 
$platform[$Arch]
+
+       Get-ChildItem -Path $artifactpath -Include "*.DVL.XML" -File -Recurse | 
Copy-Item -Destination $archivepath
+}
diff --git a/package.ps1 b/package.ps1
deleted file mode 100644
index 5db6bf6..0000000
--- a/package.ps1
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# Package - create the output package
-#
-param(
-       [string]$SolutionDir = "vs2017",
-       [string]$DriverName = "xenbus",
-       [string]$ConfigurationBase = "Windows10",
-       [switch]$Free,
-       [switch]$Checked
-)
-
-Function Build-Package {
-       param(
-               [string]$SolutionDir,
-               [string]$BinPath,
-               [string]$Package
-       )
-
-       $zipfile = [string]::Format("{0}.zip", $Package)
-       $hashfile = [string]::Format("{0}.sha256", $Package)
-       if (Test-Path -Path $zipfile) {
-               Remove-Item -Path $zipfile -Recurse -Force
-       }
-       if (Test-Path -Path $hashfile) {
-               Remove-Item -Path $hashfile -Recurse -Force
-       }
-       if (Test-Path -Path $Package) {
-               Remove-Item -Path $Package -Recurse -Force
-       }
-       New-Item -Name $Package -ItemType Directory | Out-Null
-
-       $src = Join-Path -Path $BinPath -ChildPath "x64\package\*"
-       $dst = Join-Path -Path $Package -ChildPath "x64"
-       New-Item -Path $dst -ItemType Directory | Out-Null
-       Copy-Item -Path $src -Destination $dst -Recurse -Force
-
-       $src = Join-Path -Path $BinPath -ChildPath "Win32\package\*"
-       $dst = Join-Path -Path $Package -ChildPath "x86"
-       New-Item -Path $dst -ItemType Directory | Out-Null
-       Copy-Item -Path $src -Destination $dst -Recurse -Force
-
-       Copy-Item ".build_number" $Package
-       Copy-Item ".revision" $Package
-
-       Get-ChildItem -Path $SolutionDir -Include "*.DVL.XML" -File -Recurse | 
Copy-Item -Destination $Package
-
-       Compress-Archive -Path $Package -DestinationPath $zipfile
-
-       $hash = Get-FileHash -Path $zipfile -Algorithm SHA256
-       $hash.Hash | Set-Content $hashfile
-
-       Format-List -InputObject $hash
-}
-
-#
-# Script Body
-#
-
-if ($Free -or -not $Checked) {
-       $config=[string]::Format("{0}Release", $ConfigurationBase);
-       $binpath = Join-Path -Path $SolutionDir -ChildPath $config
-       Build-Package $SolutionDir $binpath $DriverName
-}
-if ($Checked) {
-       $config=[string]::Format("{0}Debug", $ConfigurationBase);
-       $binpath = Join-Path -Path $SolutionDir -ChildPath $config
-       $package = [string]::Format("{0}-checked", $DriverName)
-       Build-Package $SolutionDir $binpath $package
-}
diff --git a/symstore.ps1 b/symstore.ps1
index 8b139a7..a62f550 100644
--- a/symstore.ps1
+++ b/symstore.ps1
@@ -1,45 +1,36 @@
 #
-# Wrapper script Symbol Server
+# Store symbols for archived build
 #
 param(
-       [string]$DriverName = "xenbus",
        [string]$SymbolServer = "c:\symbols",
-       [switch]$Free,
-       [switch]$Checked
+       [Parameter(Mandatory = $true)]
+       [string]$Arch
 )
 
 Function Add-Symbols {
        param(
                [string]$DriverName,
-               [string]$DriverPath,
+               [string]$ArchivePath,
                [string]$SymbolServer,
                [string]$Arch
        )
 
+       Write-Host Store symbols from (Resolve-Path $ArchivePath)
+
        $cwd = Get-Location
-       Set-Location $DriverPath
+       Set-Location $ArchivePath
 
-       $symstore = [string]::Format("{0}Debuggers\{1}\symstore.exe", 
$env:WDKContentRoot, $Arch)
+       $path = Join-Path -Path ([string]::Format("{0}Debuggers", 
$env:WDKContentRoot)) -ChildPath $Arch
+       $symstore = Join-Path -Path $path -ChildPath "symstore.exe"
 
-       $inffile=[string]::Format("{0}.inf", $DriverName)
-       $Version=(Get-Content -Path $inffile | Select-String 
"DriverVer").Line.Split(',')[1]
+       $inffile = [string]::Format("{0}.inf", $DriverName)
+       $Version = (Get-Content -Path $inffile | Select-String 
"DriverVer").Line.Split(',')[1]
 
-       Write-Host $symstore "add" "/s" $SymbolServer "/r" "/f" "*.pdb" "/t" 
$DriverName "/v" $Version
        Get-ChildItem -Path "." -Include "*.pdb" -Name | Write-Host
        & $symstore "add" "/s" $SymbolServer "/r" "/f" "*.pdb" "/t" $DriverName 
"/v" $Version
 
        Set-Location $cwd
 }
 
-if ($Free -or -not $Checked) {
-       $driverpath = [string]::Format("{0}\x64", $DriverName)
-       Add-Symbols $DriverName $driverpath $SymbolServer "x64"
-       $driverpath = [string]::Format("{0}\x86", $DriverName)
-       Add-Symbols $DriverName $driverpath $SymbolServer "x86"
-}
-if ($Checked) {
-       $driverpath = [string]::Format("{0}-checked\x64", $DriverName)
-       Add-Symbols $DriverName $driverpath $SymbolServer "x64"
-       $driverpath = [string]::Format("{0}-checked\x86", $DriverName)
-       Add-Symbols $DriverName $driverpath $SymbolServer "x86"
-}
+$archivepath = Join-Path -Path (Resolve-Path "xenbus") -ChildPath $Arch
+Add-Symbols "xenbus" $archivepath $SymbolServer $Arch
-- 
2.5.3


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.