forked from xt-sys/xtchain
Use PowerShell module and improved xtchain ps1
This commit is contained in:
@@ -1,57 +1,156 @@
|
||||
#
|
||||
# PROJECT: XTchain
|
||||
# LICENSE: See the COPYING.md in the top level directory
|
||||
# FILE: scripts/xtchain.ps1
|
||||
# DESCRIPTION: XTchain Entry Script
|
||||
# DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
#
|
||||
|
||||
# Get the absolute path to the XTchain
|
||||
$XTCDIR = (Get-Item -Path ".\").FullName
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Position = 0)]
|
||||
[string]$TargetArchitecture = "amd64",
|
||||
|
||||
[Parameter(Position = 1)]
|
||||
[string]$SourceDirectory = $PWD.Path
|
||||
)
|
||||
|
||||
# Read the XTchain version
|
||||
$env:XTCVER = Get-Content "${XTCDIR}\Version"
|
||||
|
||||
# Load the library (Make sure the xtclib.ps1 file is PowerShell compatible)
|
||||
. "${XTCDIR}\lib\xtchain\xtclib.ps1"
|
||||
|
||||
# Set the target architecture
|
||||
$env:TARGET = $args[0]
|
||||
if (-not $env:TARGET) { $env:TARGET = "amd64" }
|
||||
|
||||
# Save the source directory
|
||||
$SRCDIR = $args[1]
|
||||
if (-not $SRCDIR) { $SRCDIR = (Get-Location).Path }
|
||||
|
||||
# Make sure the compiler flags are clean
|
||||
$env:HOST = $null
|
||||
$env:CFLAGS = $null
|
||||
$env:CXXFLAGS = $null
|
||||
$env:LDFLAGS = $null
|
||||
|
||||
# Update PATH
|
||||
$env:PATH = "${XTCDIR}\bin;" + $env:PATH
|
||||
|
||||
# Display banner
|
||||
version
|
||||
|
||||
# Invoke shell with fancy prompt
|
||||
function global:prompt {
|
||||
$PROMPT = " XT Toolchain "
|
||||
$CWD = (Get-Location).Path
|
||||
$CHEVRON = [char]0xE0B0
|
||||
$SEGMENTS = @(
|
||||
@{ TEXT = $PROMPT; BGCOLOR = "Blue"; FGCOLOR = "White" },
|
||||
@{ TEXT = " $CWD "; BGCOLOR = "DarkCyan"; FGCOLOR = "White" }
|
||||
# Initialize XTchain environment
|
||||
function Initialize-XTChain {
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$Architecture,
|
||||
[string]$SourcePath
|
||||
)
|
||||
for ($INDEX = 0; $INDEX -lt $SEGMENTS.Count; $INDEX++) {
|
||||
$SEGMENT = $SEGMENTS[$INDEX]
|
||||
$NEXTBG = if ($INDEX + 1 -lt $SEGMENTS.Count) { $SEGMENTS[$INDEX + 1].BGCOLOR } else { "Default" }
|
||||
Write-Host $SEGMENT.TEXT -NoNewLine -ForegroundColor $SEGMENT.FGCOLOR -BackgroundColor $SEGMENT.BGCOLOR
|
||||
if ($NEXTBG -ne "Default") {
|
||||
Write-Host $CHEVRON -NoNewLine -ForegroundColor $SEGMENT.BGCOLOR -BackgroundColor $NEXTBG
|
||||
} else {
|
||||
Write-Host $CHEVRON -NoNewLine -ForegroundColor $SEGMENT.BGCOLOR
|
||||
|
||||
# Get the absolute path to XTchain
|
||||
$script:XTCDIR = (Get-Item -Path ".\").FullName
|
||||
|
||||
# Read XTchain version
|
||||
$versionFile = Join-Path $script:XTCDIR "Version"
|
||||
if (Test-Path $versionFile) {
|
||||
$env:XTCVER = Get-Content $versionFile -Raw | ForEach-Object { $_.Trim() }
|
||||
} else {
|
||||
Write-Warning "Version file not found at $versionFile"
|
||||
$env:XTCVER = "Unknown"
|
||||
}
|
||||
|
||||
# Set XTchain directory environment variable
|
||||
$env:XTCDIR = $script:XTCDIR
|
||||
|
||||
# Import XTchain module
|
||||
$modulePath = Join-Path $script:XTCDIR "lib\xtchain\xtclib.psm1"
|
||||
if (Test-Path $modulePath) {
|
||||
Import-Module $modulePath -Force -Global
|
||||
} else {
|
||||
Write-Error "XTchain module not found at $modulePath"
|
||||
return $false
|
||||
}
|
||||
|
||||
# Set target architecture
|
||||
$env:TARGET = $Architecture
|
||||
|
||||
# Validate source directory
|
||||
if (-not (Test-Path $SourcePath)) {
|
||||
Write-Error "Source directory does not exist: $SourcePath"
|
||||
return $false
|
||||
}
|
||||
|
||||
# Clean compiler environment variables
|
||||
$env:HOST = $null
|
||||
$env:CFLAGS = $null
|
||||
$env:CXXFLAGS = $null
|
||||
$env:LDFLAGS = $null
|
||||
|
||||
# Update PATH to include XTchain binaries
|
||||
$xtcBinPath = Join-Path $script:XTCDIR "bin"
|
||||
if (Test-Path $xtcBinPath) {
|
||||
$env:PATH = "$xtcBinPath;" + $env:PATH
|
||||
} else {
|
||||
Write-Warning "XTchain bin directory not found at $xtcBinPath"
|
||||
}
|
||||
|
||||
return $true
|
||||
}
|
||||
|
||||
# Create fancy PowerLine-style prompt
|
||||
function Set-XTChainPrompt {
|
||||
[CmdletBinding()]
|
||||
param()
|
||||
|
||||
function global:prompt {
|
||||
try {
|
||||
$promptText = " XT Toolchain "
|
||||
$currentPath = (Get-Location).Path
|
||||
$chevron = [char]0xE0B0
|
||||
|
||||
# Define prompt segments
|
||||
$segments = @(
|
||||
@{
|
||||
Text = $promptText
|
||||
BackgroundColor = "Blue"
|
||||
ForegroundColor = "White"
|
||||
},
|
||||
@{
|
||||
Text = " $currentPath "
|
||||
BackgroundColor = "DarkCyan"
|
||||
ForegroundColor = "White"
|
||||
}
|
||||
)
|
||||
|
||||
# Render segments
|
||||
for ($index = 0; $index -lt $segments.Count; $index++) {
|
||||
$segment = $segments[$index]
|
||||
$nextBackground = if ($index + 1 -lt $segments.Count) {
|
||||
$segments[$index + 1].BackgroundColor
|
||||
} else {
|
||||
"Default"
|
||||
}
|
||||
|
||||
# Write segment text
|
||||
Write-Host $segment.Text -NoNewLine -ForegroundColor $segment.ForegroundColor -BackgroundColor $segment.BackgroundColor
|
||||
|
||||
# Write separator
|
||||
if ($nextBackground -ne "Default") {
|
||||
Write-Host $chevron -NoNewLine -ForegroundColor $segment.BackgroundColor -BackgroundColor $nextBackground
|
||||
} else {
|
||||
Write-Host $chevron -NoNewLine -ForegroundColor $segment.BackgroundColor
|
||||
}
|
||||
}
|
||||
|
||||
return " "
|
||||
}
|
||||
catch {
|
||||
# Fallback to simple prompt if PowerLine fails
|
||||
return "XTC> "
|
||||
}
|
||||
}
|
||||
return " "
|
||||
}
|
||||
Set-Location -Path $SRCDIR
|
||||
|
||||
# Main execution
|
||||
try {
|
||||
Write-Host "Initializing XTchain environment..." -ForegroundColor Green
|
||||
|
||||
if (-not (Initialize-XTChain -Architecture $TargetArchitecture -SourcePath $SourceDirectory)) {
|
||||
Write-Error "Failed to initialize XTchain environment"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Display version information
|
||||
Show-XTCVersion
|
||||
|
||||
# Set up the fancy prompt
|
||||
Set-XTChainPrompt
|
||||
|
||||
# Change to source directory
|
||||
Set-Location -Path $SourceDirectory
|
||||
|
||||
Write-Host "XTchain environment ready!" -ForegroundColor Green
|
||||
Write-Host "Current directory: $(Get-Location)" -ForegroundColor Cyan
|
||||
Write-Host "Target architecture: $env:TARGET" -ForegroundColor Cyan
|
||||
Write-Host "Type 'Show-XTCHelp' or 'help' for available commands" -ForegroundColor Yellow
|
||||
}
|
||||
catch {
|
||||
Write-Error "Failed to initialize XTchain: $_"
|
||||
exit 1
|
||||
}
|
@@ -1,143 +0,0 @@
|
||||
# PROJECT: XTchain
|
||||
# LICENSE: See the COPYING.md in the top level directory
|
||||
# FILE: scripts/xtclib.ps1
|
||||
# DESCRIPTION: XTchain library
|
||||
# DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
|
||||
|
||||
# Prints XTChain banner
|
||||
function banner {
|
||||
param()
|
||||
|
||||
$XTC_BANNER = "XT Toolchain v${Env:XTCVER} for Windows"
|
||||
|
||||
Write-Host "################################################################################"
|
||||
Write-Host
|
||||
Write-Host (' ' * [math]::Floor((80 - $XTC_BANNER.Length) / 2) + $XTC_BANNER) -ForegroundColor Yellow
|
||||
Write-Host
|
||||
Write-Host "################################################################################"
|
||||
Write-Host
|
||||
}
|
||||
|
||||
# Sets the target architecture
|
||||
function charch {
|
||||
param (
|
||||
[string]$arch
|
||||
)
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($arch)) {
|
||||
Write-Host "Syntax: charch [architecture]"
|
||||
return
|
||||
}
|
||||
switch -Regex ($arch) {
|
||||
"aarch64|arm64" {
|
||||
$Env:TARGET = "aarch64"
|
||||
}
|
||||
"arm|armv7" {
|
||||
$Env:TARGET = "armv7"
|
||||
}
|
||||
"i386|i486|i586|i686|x86" {
|
||||
$Env:TARGET = "i686"
|
||||
}
|
||||
"amd64|x64|x86_64" {
|
||||
$Env:TARGET = "amd64"
|
||||
}
|
||||
default {
|
||||
$Env:TARGET = "UNKNOWN"
|
||||
}
|
||||
}
|
||||
Write-Host "Target Architecture: $($Env:TARGET)"
|
||||
}
|
||||
|
||||
# Sets the build type
|
||||
function chbuild {
|
||||
param (
|
||||
[string]$buildType
|
||||
)
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($buildType)) {
|
||||
Write-Host "Syntax: chbuild [DEBUG|RELEASE]"
|
||||
return
|
||||
}
|
||||
switch -Regex ($buildType.ToUpper()) {
|
||||
"RELEASE" {
|
||||
$Env:BUILD_TYPE = "RELEASE"
|
||||
}
|
||||
default {
|
||||
$Env:BUILD_TYPE = "DEBUG"
|
||||
}
|
||||
}
|
||||
Write-Host "Target build type: $($Env:BUILD_TYPE)"
|
||||
}
|
||||
|
||||
# Prints help
|
||||
function help {
|
||||
banner
|
||||
Write-Host "XTChain defines an internal list of commands:"
|
||||
Write-Host " * banner - prints XTChain banner"
|
||||
Write-Host " * charch [arch] - sets the target CPU architecture [aarch64/armv7/i686/amd64]"
|
||||
Write-Host " * chbuild [type] - sets build type [debug/release]"
|
||||
Write-Host " * help - prints this message"
|
||||
Write-Host " * version - prints XTChain and its components version"
|
||||
Write-Host " * xbuild - builds an application with a Ninja build system"
|
||||
}
|
||||
|
||||
# Displays version banner
|
||||
function version {
|
||||
param()
|
||||
|
||||
[bool]$XTCHAIN_EXTTOOLS = $false
|
||||
|
||||
if ((Test-Path "${Env:XTCDIR}/bin/clang") -and
|
||||
((Get-Command clang).Source -eq "${Env:XTCDIR}/bin/clang") -and
|
||||
($Env:XTCVER -match "min")) {
|
||||
$XTCHAIN_EXTTOOLS = $true
|
||||
foreach ($TOOL in @("clang", "clang++", "cmake", "lld-link", "ninja")) {
|
||||
if (!(Get-Command $TOOL -ErrorAction SilentlyContinue)) {
|
||||
Write-Error "You are using minimal version of XTChain and '${TOOL}' has been not found in your system!"
|
||||
Write-Error "Please install all required tools."
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
banner
|
||||
Write-Host
|
||||
Write-Host "LLVM/Clang Compiler: $(clang --version | Select-String -Pattern "version (\d+\.\d+\.\d+)" | ForEach-Object { $_.Matches.Groups[1].Value }) ($($(Get-Command clang).Source))"
|
||||
Write-Host "LLVM/LLD Linker: $(lld-link --version | Select-String -Pattern "(\d+\.\d+\.\d+)" | ForEach-Object { $_.Matches.Groups[1].Value }) ($($(Get-Command lld-link).Source))"
|
||||
Write-Host "Wine IDL Compiler: $(widl -V | Select-String -Pattern "version (\d+\.\d+)" | ForEach-Object { $_.Matches.Groups[1].Value }) ($($(Get-Command widl).Source))"
|
||||
Write-Host "Wine Message Compiler: $(wmc -V | Select-String -Pattern "version (\d+\.\d+)" | ForEach-Object { $_.Matches.Groups[1].Value }) ($($(Get-Command wmc).Source))"
|
||||
Write-Host "Wine Resource Compiler: $(wrc --version | Select-String -Pattern "version (\d+\.\d+)" | ForEach-Object { $_.Matches.Groups[1].Value }) ($($(Get-Command wrc).Source))"
|
||||
Write-Host "XT SPEC Compiler: $(xtcspecc --help | Select-String -Pattern "Version (\d+\.\d+)" | ForEach-Object { $_.Matches.Groups[1].Value }) ($($(Get-Command xtcspecc).Source))"
|
||||
Write-Host "CMake Build System: $(cmake --version | Select-String -Pattern "version (\d+\.\d+\.\d+)" | ForEach-Object { $_.Matches.Groups[1].Value }) ($($(Get-Command cmake).Source))"
|
||||
Write-Host "Ninja Build System: $(ninja --version) ($($(Get-Command ninja).Source))"
|
||||
Write-Host
|
||||
|
||||
$BUILD_TYPE = if ($null -eq $env:BUILD_TYPE -or $env:BUILD_TYPE -eq '') { 'DEBUG' } else { $env:BUILD_TYPE }
|
||||
$TARGET = if ($null -eq $env:TARGET -or $env:TARGET -eq '') { 'amd64' } else { $env:TARGET }
|
||||
charch $TARGET
|
||||
chbuild $BUILD_TYPE
|
||||
|
||||
Write-Host
|
||||
Write-Host
|
||||
Write-Host "For a list of all supported commands, type 'help'"
|
||||
Write-Host "-------------------------------------------------"
|
||||
Write-Host
|
||||
Write-Host
|
||||
Write-Host
|
||||
}
|
||||
|
||||
# Builds application (wrapper to Ninja)
|
||||
function xbuild {
|
||||
if (-not (Test-Path build.arch)) {
|
||||
& ninja @args
|
||||
} else {
|
||||
$ARCH = Get-Content build.arch
|
||||
if ($ARCH -ne $Env:TARGET) {
|
||||
Write-Host "Build is configured for '$ARCH' while current target set to '$($Env:TARGET)'!"
|
||||
Write-Host "Cannot continue until conflict is resolved ..."
|
||||
return 1
|
||||
}
|
||||
& ninja @args
|
||||
}
|
||||
}
|
248
scripts/xtclib.psm1
Normal file
248
scripts/xtclib.psm1
Normal file
@@ -0,0 +1,248 @@
|
||||
#
|
||||
# MODULE: XTchain
|
||||
# LICENSE: See the COPYING.md in the top level directory
|
||||
# FILE: xtclib.psm1
|
||||
# DESCRIPTION: XTchain PowerShell module
|
||||
# DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
#
|
||||
|
||||
# Module variables
|
||||
$script:XTCVersion = $env:XTCVER
|
||||
$script:XTCDirectory = $env:XTCDIR
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Prints XTChain banner
|
||||
.DESCRIPTION
|
||||
Displays the XTChain version banner with formatting
|
||||
#>
|
||||
function Show-XTCBanner {
|
||||
[CmdletBinding()]
|
||||
param()
|
||||
|
||||
$XTC_BANNER = "XT Toolchain v$script:XTCVersion for Windows"
|
||||
|
||||
Write-Host "################################################################################"
|
||||
Write-Host
|
||||
Write-Host (' ' * [math]::Floor((80 - $XTC_BANNER.Length) / 2) + $XTC_BANNER) -ForegroundColor Yellow
|
||||
Write-Host
|
||||
Write-Host "################################################################################"
|
||||
Write-Host
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Sets the target architecture
|
||||
.DESCRIPTION
|
||||
Configures the TARGET environment variable based on the specified architecture
|
||||
.PARAMETER Architecture
|
||||
The target architecture (aarch64, arm64, arm, armv7, i386, i486, i586, i686, x86, amd64, x64, x86_64)
|
||||
#>
|
||||
function Set-XTCArchitecture {
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Architecture
|
||||
)
|
||||
|
||||
switch -Regex ($Architecture.ToLower()) {
|
||||
"aarch64|arm64" {
|
||||
$env:TARGET = "aarch64"
|
||||
}
|
||||
"arm|armv7" {
|
||||
$env:TARGET = "armv7"
|
||||
}
|
||||
"i386|i486|i586|i686|x86" {
|
||||
$env:TARGET = "i686"
|
||||
}
|
||||
"amd64|x64|x86_64" {
|
||||
$env:TARGET = "amd64"
|
||||
}
|
||||
default {
|
||||
$env:TARGET = "UNKNOWN"
|
||||
Write-Warning "Unknown architecture '$Architecture'. Set to UNKNOWN."
|
||||
}
|
||||
}
|
||||
Write-Host "Target Architecture: $($env:TARGET)"
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Sets the build type
|
||||
.DESCRIPTION
|
||||
Configures the BUILD_TYPE environment variable
|
||||
.PARAMETER BuildType
|
||||
The build type (DEBUG or RELEASE)
|
||||
#>
|
||||
function Set-XTCBuildType {
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[Parameter(Mandatory = $true)]
|
||||
[ValidateSet("DEBUG", "RELEASE")]
|
||||
[string]$BuildType
|
||||
)
|
||||
|
||||
$env:BUILD_TYPE = $BuildType.ToUpper()
|
||||
Write-Host "Target build type: $($env:BUILD_TYPE)"
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Shows XTChain help information
|
||||
.DESCRIPTION
|
||||
Displays available XTChain commands and their usage
|
||||
#>
|
||||
function Show-XTCHelp {
|
||||
[CmdletBinding()]
|
||||
param()
|
||||
|
||||
Show-XTCBanner
|
||||
Write-Host "XTChain PowerShell Module Commands:"
|
||||
Write-Host " * Show-XTCBanner - prints XTChain banner"
|
||||
Write-Host " * Set-XTCArchitecture - sets the target CPU architecture"
|
||||
Write-Host " * Set-XTCBuildType - sets build type [DEBUG/RELEASE]"
|
||||
Write-Host " * Show-XTCHelp - prints this message"
|
||||
Write-Host " * Show-XTCVersion - prints XTChain and its components version"
|
||||
Write-Host " * Invoke-XTCBuild - builds an application with Ninja build system"
|
||||
Write-Host
|
||||
Write-Host "Legacy command aliases:"
|
||||
Write-Host " * banner, charch, chbuild, help, version, xbuild"
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Displays version information for XTChain components
|
||||
.DESCRIPTION
|
||||
Shows version information for all XTChain tools and components
|
||||
#>
|
||||
function Show-XTCVersion {
|
||||
[CmdletBinding()]
|
||||
param()
|
||||
|
||||
# Check for minimal XTChain version with external tools
|
||||
$XTCHAIN_EXTTOOLS = $false
|
||||
if ((Test-Path "$script:XTCDirectory/bin/clang") -and
|
||||
((Get-Command clang -ErrorAction SilentlyContinue).Source -eq "$script:XTCDirectory/bin/clang") -and
|
||||
($script:XTCVersion -match "min")) {
|
||||
|
||||
$XTCHAIN_EXTTOOLS = $true
|
||||
$requiredTools = @("clang", "clang++", "cmake", "lld-link", "ninja")
|
||||
|
||||
foreach ($tool in $requiredTools) {
|
||||
if (!(Get-Command $tool -ErrorAction SilentlyContinue)) {
|
||||
Write-Error "You are using minimal version of XTChain and '$tool' has been not found in your system!"
|
||||
Write-Error "Please install all required tools."
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Show-XTCBanner
|
||||
Write-Host
|
||||
|
||||
# Display tool versions
|
||||
try {
|
||||
$clangVersion = (clang --version | Select-String -Pattern "version (\d+\.\d+\.\d+)").Matches.Groups[1].Value
|
||||
$clangPath = (Get-Command clang).Source
|
||||
Write-Host "LLVM/Clang Compiler: $clangVersion ($clangPath)"
|
||||
} catch { Write-Warning "Could not retrieve Clang version" }
|
||||
|
||||
try {
|
||||
$lldVersion = (lld-link --version | Select-String -Pattern "(\d+\.\d+\.\d+)").Matches.Groups[1].Value
|
||||
$lldPath = (Get-Command lld-link).Source
|
||||
Write-Host "LLVM/LLD Linker: $lldVersion ($lldPath)"
|
||||
} catch { Write-Warning "Could not retrieve LLD version" }
|
||||
|
||||
try {
|
||||
$widlVersion = (widl -V | Select-String -Pattern "version (\d+\.\d+)").Matches.Groups[1].Value
|
||||
$widlPath = (Get-Command widl).Source
|
||||
Write-Host "Wine IDL Compiler: $widlVersion ($widlPath)"
|
||||
} catch { Write-Warning "Could not retrieve WIDL version" }
|
||||
|
||||
try {
|
||||
$wmcVersion = (wmc -V | Select-String -Pattern "version (\d+\.\d+)").Matches.Groups[1].Value
|
||||
$wmcPath = (Get-Command wmc).Source
|
||||
Write-Host "Wine Message Compiler: $wmcVersion ($wmcPath)"
|
||||
} catch { Write-Warning "Could not retrieve WMC version" }
|
||||
|
||||
try {
|
||||
$wrcVersion = (wrc --version | Select-String -Pattern "version (\d+\.\d+)").Matches.Groups[1].Value
|
||||
$wrcPath = (Get-Command wrc).Source
|
||||
Write-Host "Wine Resource Compiler: $wrcVersion ($wrcPath)"
|
||||
} catch { Write-Warning "Could not retrieve WRC version" }
|
||||
|
||||
try {
|
||||
$xtcspeccVersion = (xtcspecc --help | Select-String -Pattern "Version (\d+\.\d+)").Matches.Groups[1].Value
|
||||
$xtcspeccPath = (Get-Command xtcspecc).Source
|
||||
Write-Host "XT SPEC Compiler: $xtcspeccVersion ($xtcspeccPath)"
|
||||
} catch { Write-Warning "Could not retrieve XTCSPECC version" }
|
||||
|
||||
try {
|
||||
$cmakeVersion = (cmake --version | Select-String -Pattern "version (\d+\.\d+\.\d+)").Matches.Groups[1].Value
|
||||
$cmakePath = (Get-Command cmake).Source
|
||||
Write-Host "CMake Build System: $cmakeVersion ($cmakePath)"
|
||||
} catch { Write-Warning "Could not retrieve CMake version" }
|
||||
|
||||
try {
|
||||
$ninjaVersion = (ninja --version)
|
||||
$ninjaPath = (Get-Command ninja).Source
|
||||
Write-Host "Ninja Build System: $ninjaVersion ($ninjaPath)"
|
||||
} catch { Write-Warning "Could not retrieve Ninja version" }
|
||||
|
||||
Write-Host
|
||||
|
||||
# Set default values and display current configuration
|
||||
$BUILD_TYPE = if ([string]::IsNullOrEmpty($env:BUILD_TYPE)) { 'DEBUG' } else { $env:BUILD_TYPE }
|
||||
$TARGET = if ([string]::IsNullOrEmpty($env:TARGET)) { 'amd64' } else { $env:TARGET }
|
||||
|
||||
Set-XTCArchitecture -Architecture $TARGET
|
||||
Set-XTCBuildType -BuildType $BUILD_TYPE
|
||||
|
||||
Write-Host
|
||||
Write-Host
|
||||
Write-Host "For a list of all supported commands, type 'Show-XTCHelp' or 'help'"
|
||||
Write-Host "--------------------------------------------------------"
|
||||
Write-Host
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Builds application using Ninja build system
|
||||
.DESCRIPTION
|
||||
Wrapper around ninja command with architecture validation
|
||||
.PARAMETER Arguments
|
||||
Arguments to pass to ninja
|
||||
#>
|
||||
function Invoke-XTCBuild {
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[Parameter(ValueFromRemainingArguments = $true)]
|
||||
[string[]]$Arguments
|
||||
)
|
||||
|
||||
if (Test-Path "build.arch") {
|
||||
$buildArch = Get-Content "build.arch" -Raw
|
||||
$buildArch = $buildArch.Trim()
|
||||
|
||||
if ($buildArch -ne $env:TARGET) {
|
||||
Write-Host "Build is configured for '$buildArch' while current target set to '$($env:TARGET)'!" -ForegroundColor Red
|
||||
Write-Host "Cannot continue until conflict is resolved..." -ForegroundColor Red
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
& ninja @Arguments
|
||||
return $LASTEXITCODE
|
||||
}
|
||||
|
||||
# Legacy function aliases for backwards compatibility
|
||||
Set-Alias -Name banner -Value Show-XTCBanner
|
||||
Set-Alias -Name charch -Value Set-XTCArchitecture
|
||||
Set-Alias -Name chbuild -Value Set-XTCBuildType
|
||||
Set-Alias -Name help -Value Show-XTCHelp
|
||||
Set-Alias -Name version -Value Show-XTCVersion
|
||||
Set-Alias -Name xbuild -Value Invoke-XTCBuild
|
||||
|
||||
# Export functions and aliases
|
||||
Export-ModuleMember -Function Show-XTCBanner, Set-XTCArchitecture, Set-XTCBuildType, Show-XTCHelp, Show-XTCVersion, Invoke-XTCBuild
|
||||
Export-ModuleMember -Alias banner, charch, chbuild, help, version, xbuild
|
Reference in New Issue
Block a user