[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/2] Add PowerShell build scripts
* genfiles.ps1 Generate include/version.h and vs2017/xenbus.inf This is intended to become a PreBuild step in the vcxproj * build.ps1 Wraps running MSBuild for x86/x64 This is intended to become the entry point to build * package.ps1 Coalesce the output from x86 and x64 package.vcxproj and generate the resultant output zip file This can be run directly from the build.ps1 script if required * symstore.ps1 Store symbols from build output on symbol server Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- build.ps1 | 103 ++++++++++++++++++++++++++++++++++++++++++++++ genfiles.ps1 | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ include/version._h_ | 22 ++++++++++ package.ps1 | 69 +++++++++++++++++++++++++++++++ src/xenbus.inf | 2 +- symstore.ps1 | 45 ++++++++++++++++++++ 6 files changed, 356 insertions(+), 1 deletion(-) create mode 100644 build.ps1 create mode 100644 genfiles.ps1 create mode 100644 include/version._h_ create mode 100644 package.ps1 create mode 100644 symstore.ps1 diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..a18292d --- /dev/null +++ b/build.ps1 @@ -0,0 +1,103 @@ +# +# Wrapper script for MSBuild +# Also creates the final package(s) (if specified) and bumps the build number +# +param( + [string]$SolutionDir = "vs2017", + [string]$DriverName = "xenbus", + [string]$ConfigurationBase = "Windows 10", + [switch]$Free, + [switch]$Checked, + [switch]$Sdv, + [switch]$Package, + [switch]$DontBumpBuild +) + +Function Run-MSBuild { + param( + [string]$SolutionDir, + [string]$SolutionName, + [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=[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 + } +} + +Function Run-MSBuildSDV { + param( + [string]$SolutionDir, + [string]$ProjectName + ) + + $basepath = Get-Location + $projpath = Join-Path -Path $SolutionDir -ChildPath $ProjectName + Set-Location $projpath + + $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" + + $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" + } + + Set-Location $basepath +} + +# +# Script Body +# + +$configuration = @{ "free"="$ConfigurationBase Release"; "checked"="$ConfigurationBase Debug" } +$solutionname = [string]::Format("{0}.sln", $DriverName) +$solutiondir = Resolve-Path $SolutionDir + +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 +} +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" + } +} diff --git a/genfiles.ps1 b/genfiles.ps1 new file mode 100644 index 0000000..ddab96e --- /dev/null +++ b/genfiles.ps1 @@ -0,0 +1,116 @@ +# +# Generate version.h and xenbus.inf +# +param( + [string]$SolutionDir = "vs2017", + [string]$DriverName = "xenbus", + [string]$ConfigFile = $null +) + +# Copy $InFileName -> $OutFileName replacing $Token$_.Key$Token with $_.Value from +# either $ConfigFile or $Replacements +Function Copy-FileWithReplacements { + param( + [Parameter(Mandatory=$true)] + [string]$InFileName, + [Parameter(Mandatory=$true)] + [string]$OutFileName, + [string]$ConfigFile, + [hashtable]$Replacements, + [string]$Token = "@" + ) + + Write-Host "Copy-FileWithReplacements" + Write-Host $InFileName" -> "$OutFileName + + if ($ConfigFile) { + $List = Get-Content $ConfigFile | Out-String | iex + $List | Out-String | Write-Host + } elseif ($Replacements) { + $List = $Replacements + } else { + Write-Host "Invalid Arguments, ConfigFile or Replacements must be set" + Write-Host + Exit -1 + } + + (Get-Content $InFileName) | + ForEach-Object { + $line = $_ + $List.GetEnumerator() | ForEach-Object { + $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 + } + $line = $line -replace $key, $_.Value + } + $line + } | + Set-Content $OutFileName +} + +# +# Script Body +# + +$TheDate = Get-Date -UFormat "%m/%d/%Y" +$TheYear = (Get-Date -date $TheDate).Year +$TheMonth = (Get-Date -date $TheDate).Month +$TheDay = (Get-Date -date $TheDate).Day + +# if GitRevision is $null, GIT_REVISION will be excluded from the Copy-FileWithReplacements +$GitRevision = & "git.exe" "rev-list" "--max-count=1" "HEAD" +if ($GitRevision) { + Set-Content -Path ".revision" -Value $GitRevision +} + +# if ".build_number" doesnt exist, BUILD_NUMBER = 0 +# since this can called by the vcxproj, do not autoincrement the build number +# as this will mean x64 and Win32 builds have different numbers! +if (Test-Path ".build_number") { + $TheBuildNum = Get-Content -Path ".build_number" +} else { + Set-Content -Path ".build_number" -Value "0" +} +if (-not $TheBuildNum) { + $TheBuildNum = '0' +} + +# [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'; + + '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 +} + +if ($ConfigFile -and (Test-Path -Path $ConfigFile)) { + $config = Resolve-Path $ConfigFile | Get-Content | Out-String | iex + $config.GetEnumerator() | % { $Replacements[$_.Key] = $_.Value } +} + +$Replacements | Out-String | Write-Host + +$src = "./include/version._h_" +$dst = "./include/version.h" +Copy-FileWithReplacements $src $dst -Replacements $Replacements + +$src = [string]::Format("./src/{0}.inf", $DriverName) +$dst = [string]::Format("./{0}/{1}.inf", $SolutionDir, $DriverName) +Copy-FileWithReplacements $src $dst -Replacements $Replacements + diff --git a/include/version._h_ b/include/version._h_ new file mode 100644 index 0000000..b2fe640 --- /dev/null +++ b/include/version._h_ @@ -0,0 +1,22 @@ +#define VENDOR_NAME_STR "@VENDOR_NAME@" +#define PRODUCT_NAME_STR "@PRODUCT_NAME@" +#define VENDOR_PREFIX_STR "@VENDOR_PREFIX@" +#define VENDOR_DEVICE_ID_STR "@VENDOR_DEVICE_ID@" + +#define MAJOR_VERSION_STR "@MAJOR_VERSION@" +#define MINOR_VERSION_STR "@MINOR_VERSION@" +#define MICRO_VERSION_STR "@MICRO_VERSION@" +#define BUILD_NUMBER_STR "@BUILD_NUMBER@" + +#define YEAR_STR "@YEAR@" +#define MONTH_STR "@MONTH@" +#define DAY_STR "@DAY@" + +#define MAJOR_VERSION @MAJOR_VERSION@ +#define MINOR_VERSION @MINOR_VERSION@ +#define MICRO_VERSION @MICRO_VERSION@ +#define BUILD_NUMBER @BUILD_NUMBER@ + +#define YEAR @YEAR@ +#define MONTH @MONTH@ +#define DAY @DAY@ \ No newline at end of file diff --git a/package.ps1 b/package.ps1 new file mode 100644 index 0000000..5db6bf6 --- /dev/null +++ b/package.ps1 @@ -0,0 +1,69 @@ +# +# 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/src/xenbus.inf b/src/xenbus.inf index f2aced3..37782d9 100644 --- a/src/xenbus.inf +++ b/src/xenbus.inf @@ -34,7 +34,7 @@ Class=System ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318} Provider=%Vendor% CatalogFile=xenbus.cat -DriverVer=01/01/1900,0.0.0.0 +DriverVer=@INF_DATE@,@MAJOR_VERSION@.@MINOR_VERSION@.@MICRO_VERSION@.@BUILD_NUMBER@ DriverPackageDisplayName=%DiskDesc% [DestinationDirs] diff --git a/symstore.ps1 b/symstore.ps1 new file mode 100644 index 0000000..8b139a7 --- /dev/null +++ b/symstore.ps1 @@ -0,0 +1,45 @@ +# +# Wrapper script Symbol Server +# +param( + [string]$DriverName = "xenbus", + [string]$SymbolServer = "c:\symbols", + [switch]$Free, + [switch]$Checked +) + +Function Add-Symbols { + param( + [string]$DriverName, + [string]$DriverPath, + [string]$SymbolServer, + [string]$Arch + ) + + $cwd = Get-Location + Set-Location $DriverPath + + $symstore = [string]::Format("{0}Debuggers\{1}\symstore.exe", $env:WDKContentRoot, $Arch) + + $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" +} -- 2.16.2.windows.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |