Skip to content

Commit

Permalink
Merge branch 'fabienfl/azure_debug_build' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
fabienfl-orc committed Jun 10, 2020
2 parents eacfbea + 509ebeb commit 4ffc929
Show file tree
Hide file tree
Showing 3 changed files with 205 additions and 45 deletions.
50 changes: 13 additions & 37 deletions azure-pipelines-template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,23 @@ parameters:

jobs:
- job: vs2017_${{ parameters.arch }}
variables:
${{ if eq( parameters.arch, 'x64') }}:
winArch: " Win64"
${{ if eq( parameters.arch, 'x86') }}:
winArch: ""
pool:
vmImage: 'vs2017-win2016'
steps:
- checkout: self
clean: true
submodules: true

- task: CMake@1
displayName: CMake configuration
inputs:
workingDirectory: 'build-${{ parameters.arch }}'
cmakeArgs: '-G "Visual Studio 15 2017${{ variables.winArch }}" -T v141_xp -DORC_BUILD_VCPKG=ON ..'

- task: CMake@1
displayName: CMake build
inputs:
workingDirectory: 'build-${{ parameters.arch }}'
cmakeArgs: '--build . --config MinSizeRel -- -maxcpucount'
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
. $(Build.SourcesDirectory)/tools/ci/build.ps1
Build-ORC `
-Source $(Build.SourcesDirectory) `
-Output $(Build.SourcesDirectory)/artifacts `
-Toolchain vs2017 `
-Architecture ${{ parameters.arch }} `
-Configuration Debug,MinSizeRel
- task: VSTest@2
inputs:
Expand All @@ -36,28 +30,10 @@ jobs:

- task: CopyFiles@2
inputs:
sourceFolder: '$(Build.SourcesDirectory)'
contents: 'build-${{ parameters.arch }}/MinSizeRel/dfir-orc_${{ parameters.arch }}.exe'
TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: CopyFiles@2
inputs:
sourceFolder: '$(Build.SourcesDirectory)'
contents: 'build-${{ parameters.arch }}/MinSizeRel/dfir-orc_${{ parameters.arch }}.pdb'
sourceFolder: '$(Build.SourcesDirectory)/artifacts'
contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: CopyFiles@2
inputs:
sourceFolder: $(Build.SourcesDirectory)
contents: 'build-${{ parameters.arch }}/MinSizeRel/fastfind_${{ parameters.arch }}.exe'
TargetFolder: $(Build.ArtifactStagingDirectory)

- task: CopyFiles@2
inputs:
sourceFolder: $(Build.SourcesDirectory)
contents: 'build-${{ parameters.arch }}/MinSizeRel/fastfind_${{ parameters.arch }}.pdb'
TargetFolder: $(Build.ArtifactStagingDirectory)

- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: $(Build.ArtifactStagingDirectory)
Expand Down
22 changes: 14 additions & 8 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
trigger:
- master

parameters:
- name: PublishRelease
type: boolean
default: true

stages:
- stage: Build
jobs:
Expand All @@ -13,6 +18,7 @@ stages:
arch: "x86"

- stage: Publish
condition: ${{parameters.PublishRelease}}
jobs:
- job: RetrieveAndPublish
steps:
Expand Down Expand Up @@ -43,13 +49,13 @@ stages:
tagSource: 'auto'
tagPattern: '^v?[0-9]+\.[0-9]+\.[0-9]+'
assets: |
$(Build.ArtifactStagingDirectory)/drop_x64/build-x64/MinSizeRel/DFIR-Orc_x64.exe
$(Build.ArtifactStagingDirectory)/drop_x64/build-x64/MinSizeRel/DFIR-Orc_x64.pdb
$(Build.ArtifactStagingDirectory)/drop_x64/build-x64/MinSizeRel/FastFind_x64.exe
$(Build.ArtifactStagingDirectory)/drop_x64/build-x64/MinSizeRel/FastFind_x64.pdb
$(Build.ArtifactStagingDirectory)/drop_x86/build-x86/MinSizeRel/DFIR-Orc_x86.exe
$(Build.ArtifactStagingDirectory)/drop_x86/build-x86/MinSizeRel/DFIR-Orc_x86.pdb
$(Build.ArtifactStagingDirectory)/drop_x86/build-x86/MinSizeRel/FastFind_x86.exe
$(Build.ArtifactStagingDirectory)/drop_x86/build-x86/MinSizeRel/FastFind_x86.pdb
$(Build.ArtifactStagingDirectory)/drop_x64/bin/MinSizeRel/DFIR-Orc_x64.exe
$(Build.ArtifactStagingDirectory)/drop_x64/pdb/MinSizeRel/DFIR-Orc_x64.pdb
$(Build.ArtifactStagingDirectory)/drop_x64/bin/MinSizeRel/FastFind_x64.exe
$(Build.ArtifactStagingDirectory)/drop_x64/pdb/MinSizeRel/FastFind_x64.pdb
$(Build.ArtifactStagingDirectory)/drop_x86/bin/MinSizeRel/DFIR-Orc_x86.exe
$(Build.ArtifactStagingDirectory)/drop_x86/pdb/MinSizeRel/DFIR-Orc_x86.pdb
$(Build.ArtifactStagingDirectory)/drop_x86/bin/MinSizeRel/FastFind_x86.exe
$(Build.ArtifactStagingDirectory)/drop_x86/pdb/MinSizeRel/FastFind_x86.pdb
changeLogCompareToRelease: 'lastFullRelease'
changeLogType: 'commitBased'
178 changes: 178 additions & 0 deletions tools/ci/build.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
function Build-Orc
{
<#
.SYNOPSIS
Build wrapper around cmake to facilitate CI integration.
.PARAMETER Source
Path to DFIR-ORC source root directory to build.
.PARAMETER BuildDirectory
Output directory. Must be a subdirectory of Path. Relative path will be treated as relative to $Path.
Default value: '$Source/build'.
.PARAMETER Output
Build artifacts output directory
.PARAMETER Architecture
Target architecture (x86, x64).
.PARAMETER Configuration
Target configuration (Debug, MinSizeRel, Release, RelWithDebInfo).
.PARAMETER Runtime
Target runtime (static, dynamic). Default value: 'static'.
.PARAMETER Clean
Clean build directory
.OUTPUTS
None or error on failure.
.EXAMPLE
Build DFIR-Orc in 'F:\dfir-orc\build-x64' and place artefacts in 'F:\dfir-orc\build-x64\Artefacts'
. F:\Orc\tools\ci\build.ps1
Build-Orc -Path F:\dfir-orc -Clean -Output build-x64 -Configuration Debug,MinSizeRel -Architecture x64 -Runtime static
#>

[cmdletbinding()]
Param (
[Parameter(Mandatory = $True)]
[ValidateNotNullOrEmpty()]
[System.IO.DirectoryInfo]
$Source,
[Parameter(Mandatory = $False)]
[ValidateNotNullOrEmpty()]
[System.IO.DirectoryInfo]
$BuildDirectory = "$Source/build",
[Parameter(Mandatory = $False)]
[ValidateNotNullOrEmpty()]
[System.IO.DirectoryInfo]
$Output,
[Parameter(Mandatory = $True)]
[ValidateSet('x86', 'x64')]
[String]
$Architecture,
[Parameter(Mandatory = $False)]
[ValidateSet('vs2017', 'vs2019')]
[String]
$Toolchain = 'vs2019',
[Parameter(Mandatory = $True)]
[ValidateSet('Debug', 'MinSizeRel', 'RelWithDebInfo')]
[String[]]
$Configuration,
[Parameter(Mandatory = $False)]
[ValidateSet('static', 'dynamic')]
[String]
$Runtime = 'static',
[Parameter(Mandatory = $False)]
[switch]
$Clean
)

$OrcPath = (Resolve-Path -Path $Source).Path

# Map cmake architecture option against $Architecture
$CMakeArch = @{
"x86" = "Win32";
"x64" = "x64";
}

if(-not [System.IO.Path]::IsPathRooted($BuildDirectory))
{
$BuildDirectory = "$OrcPath/$BuildDirectory"
}

if(-not [System.IO.Path]::IsPathRooted($Output))
{
$Output = "$OrcPath/$Output"
}

$BuildDir = "$BuildDirectory/$Architecture"

$Generators = @{
"vs2017_x86" = @(("-G", "`"Visual Studio 15 2017`""))
"vs2017_x64" = @(("-G", "`"Visual Studio 15 2017 Win64`""))
"vs2019_x86" = @(("-G", "`"Visual Studio 16 2019`""))
"vs2019_x64" = @(("-G", "`"Visual Studio 16 2019`""), ("-A", "x64"))
}

$Generator = $Generators[$Toolchain + "_" + $Architecture]

if($Clean)
{
Remove-Item -Force -Recurse -Path $BuildDir -ErrorAction Ignore
}

New-Item -Force -ItemType Directory -Path $BuildDir | Out-Null

Push-Location $BuildDir
try
{
$CMakeExe = Find-CMake
if(-not $CMakeExe)
{
Write-Error "Cannot find 'cmake.exe'"
return
}

foreach($Config in $Configuration)
{
# if($Toolchain.Equals("vs2019"))
# {
# $ToolchainArch = "-A ${Architecture}"
# }

# $CMakeGenerationArgs = @(
# ("-G", "${Generator}")
# ("-T", "v141_xp")
# "-DORC_BUILD_VCPKG=ON"
# "-DVCPKG_TARGET_TRIPLET=${Architecture}-windows-static"
# "-DCMAKE_TOOLCHAIN_FILE=${OrcPath}\external\vcpkg\scripts\buildsystems\vcpkg.cmake"
# "${OrcPath}"
# )
# Write-Output @CMakeGenerationArgs
# . $CMakeExe @CMakeGenerationArgs

. $CMakeExe `
@Generator `
-T v141_xp `
-DORC_BUILD_VCPKG=ON `
-DVCPKG_TARGET_TRIPLET="${Architecture}-windows-static" `
-DCMAKE_TOOLCHAIN_FILE="${OrcPath}\external\vcpkg\scripts\buildsystems\vcpkg.cmake" `
$OrcPath

. $CMakeExe --build . --config $Config -- -maxcpucount

. $CMakeExe --install . --prefix $Output --config $Config
}
}
finally
{
Pop-Location
}
}

function Find-CMake
{
$CMakeExe = Get-Command "cmake.exe" -ErrorAction SilentlyContinue
if($CMakeExe)
{
return $CMakeExe
}

$Locations = @(
"c:\Program Files (x86)\Microsoft Visual Studio\2019\*\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"
"c:\Program Files (x86)\Microsoft Visual Studio\*\*\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"
)

foreach($Location in $Locations)
{
$Path = Get-Item -Path $Location
if($Path)
{
return $Path
}
}
}

0 comments on commit 4ffc929

Please sign in to comment.