66 lines
2.3 KiB
PowerShell
66 lines
2.3 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Windows equivalent of build_core.sh - builds the Go core binaries.
|
|
|
|
.DESCRIPTION
|
|
Cross-compiles the Android ARM64 client (dropped into android\lib\arm64-v8a\
|
|
as libdragontcp_client.so) and the Linux AMD64/ARM64 servers.
|
|
CGO is disabled, so no C toolchain or NDK is required.
|
|
|
|
.EXAMPLE
|
|
.\build_core.ps1
|
|
.\build_core.ps1 -ClientOnly
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
# Only build the Android client .so (skip the Linux servers).
|
|
[switch]$ClientOnly,
|
|
# Path to the go executable.
|
|
[string]$GoBin = $(if ($env:GO_BIN) { $env:GO_BIN } else { 'go' })
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$Root = $PSScriptRoot
|
|
|
|
function Invoke-Go {
|
|
param([hashtable]$Env, [string[]]$GoArgs)
|
|
$saved = @{}
|
|
foreach ($k in $Env.Keys) {
|
|
$saved[$k] = [Environment]::GetEnvironmentVariable($k)
|
|
[Environment]::SetEnvironmentVariable($k, $Env[$k])
|
|
}
|
|
try {
|
|
& $GoBin @GoArgs
|
|
if ($LASTEXITCODE -ne 0) { throw "go build failed (exit $LASTEXITCODE)" }
|
|
} finally {
|
|
foreach ($k in $saved.Keys) { [Environment]::SetEnvironmentVariable($k, $saved[$k]) }
|
|
}
|
|
}
|
|
|
|
$go = Get-Command $GoBin -ErrorAction SilentlyContinue
|
|
if (-not $go) { throw "Go compiler not found. Install from https://go.dev/dl/ or set -GoBin." }
|
|
|
|
New-Item -ItemType Directory -Force -Path "$Root\bin", "$Root\android\lib\arm64-v8a" | Out-Null
|
|
Push-Location "$Root\core"
|
|
try {
|
|
$ldflags = '-ldflags=-s -w'
|
|
|
|
Write-Host '[core] Android ARM64 client...' -ForegroundColor Cyan
|
|
Invoke-Go @{ CGO_ENABLED = '0'; GOOS = 'android'; GOARCH = 'arm64' } `
|
|
@('build', '-trimpath', $ldflags, '-o', "$Root\android\lib\arm64-v8a\libdragontcp_client.so", './cmd/dragontcp-client')
|
|
|
|
if (-not $ClientOnly) {
|
|
Write-Host '[core] Linux AMD64 server...' -ForegroundColor Cyan
|
|
Invoke-Go @{ CGO_ENABLED = '0'; GOOS = 'linux'; GOARCH = 'amd64' } `
|
|
@('build', '-trimpath', $ldflags, '-o', "$Root\bin\dragontcp-hybrid-server-linux-amd64", './cmd/dragontcp-server')
|
|
|
|
Write-Host '[core] Linux ARM64 server...' -ForegroundColor Cyan
|
|
Invoke-Go @{ CGO_ENABLED = '0'; GOOS = 'linux'; GOARCH = 'arm64' } `
|
|
@('build', '-trimpath', $ldflags, '-o', "$Root\bin\dragontcp-hybrid-server-linux-arm64", './cmd/dragontcp-server')
|
|
}
|
|
} finally {
|
|
Pop-Location
|
|
}
|
|
|
|
Write-Host 'Core build complete.' -ForegroundColor Green
|