]> xenbits.xensource.com Git - pvdrivers/win/xenbus.git/commitdiff
Re-work PowerShell build scripts
authorPaul Durrant <paul.durrant@citrix.com>
Wed, 17 Apr 2019 16:51:15 +0000 (17:51 +0100)
committerPaul Durrant <paul.durrant@citrix.com>
Tue, 23 Apr 2019 14:59:39 +0000 (15:59 +0100)
* 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@citrix.com>
build.ps1
genfiles.ps1
msbuild.ps1 [new file with mode: 0644]
package.ps1 [deleted file]
symstore.ps1

index a18292d747748a77e2dd063fe97e643f2609235b..bea93cc96799372d3d997a069a3a02145345c1d6 100644 (file)
--- a/build.ps1
+++ b/build.ps1
 #
-# 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"
 }
index 6f03d2e050798a1dbea6794eca6fe78c7501556d..d9a5088c1a250f3a892b8a4e9b878b1d7ac27b95 100644 (file)
@@ -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 (file)
index 0000000..3361ea1
--- /dev/null
@@ -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 (file)
index 5db6bf6..0000000
+++ /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
-}
index 8b139a7cfd3ecbd78d4d5a9acc2fc572e67712fe..a62f550036fafbdf8ab25085c681003a72e1bd97 100644 (file)
@@ -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