public/Invoke-PhpBuild.ps1

function Invoke-PhpBuild {
    <#
    .SYNOPSIS
        Build PHP.
    .PARAMETER PhpVersion
        PHP Version
    .PARAMETER Arch
        PHP Architecture
    .PARAMETER Ts
        PHP Build Type
    #>

    [OutputType()]
    param (
        [Parameter(Mandatory = $true, Position=0, HelpMessage='PHP Version')]
        [ValidateNotNull()]
        [ValidateLength(1, [int]::MaxValue)]
        [string] $PhpVersion,
        [Parameter(Mandatory = $true, Position=1, HelpMessage='PHP Architecture')]
        [ValidateNotNull()]
        [ValidateSet('x86', 'x64')]
        [string] $Arch,
        [Parameter(Mandatory = $true, Position=2, HelpMessage='PHP Build Type')]
        [ValidateNotNull()]
        [ValidateSet('nts', 'ts')]
        [string] $Ts
    )
    begin {
    }
    process {
        Set-NetSecurityProtocolType
        $VsConfig = (Get-VsVersion -PhpVersion $PhpVersion)
        if($null -eq $VsConfig.vs) {
            throw "PHP version $PhpVersion is not supported."
        }

        $currentDirectory = (Get-Location).Path

        $tempDirectory = [System.IO.Path]::GetTempPath()

        $buildDirectory = [System.IO.Path]::Combine($tempDirectory, [System.Guid]::NewGuid().ToString())

        New-Item "$buildDirectory" -ItemType "directory" -Force > $null 2>&1

        Set-Location "$buildDirectory"

        Add-BuildRequirements -PhpVersion $PhpVersion -Arch $Arch

        Copy-Item -Path $PSScriptRoot\..\config -Destination . -Recurse
        $buildPath = "$buildDirectory\config\$($VsConfig.vs)\$Arch\php-$PhpVersion"
        Move-Item "$buildDirectory\php-$PhpVersion-src" $buildPath
        Set-Location "$buildPath"
        New-Item "..\obj" -ItemType "directory" > $null 2>&1
        Copy-Item "..\config.$Ts.bat"

        $task = "$PSScriptRoot\..\runner\task-$Ts.bat"

        & "$buildDirectory\php-sdk\phpsdk-starter.bat" -c $VsConfig.vs -a $Arch -s $VsConfig.toolset -t $task
        if (-not $?) {
            throw "build failed with errorlevel $LastExitCode"
        }

        $artifacts = if ($Ts -eq "ts") {"..\obj\Release_TS\php-*.zip"} else {"..\obj\Release\php-*.zip"}
        New-Item "$currentDirectory\artifacts" -ItemType "directory" -Force > $null 2>&1
        xcopy $artifacts "$currentDirectory\artifacts\*"
        Move-Item "$buildDirectory\php-$PhpVersion-src.zip" "$currentDirectory\artifacts\"

        Set-Location "$currentDirectory"
    }
    end {
    }
}