a70ea11e69
Add support for Gitlab CI on Windows This PR adds the config changes required to configure and execute Gitlab pipelines running Windows builds on Windows runners using the existing Gitlab CI infrastructure (and newly added Windows infrastructure). * Adds support for generating child pipelines dispatched to Windows runners * Refactors the relevant pre-scripts, scripts, and post scripts to be compatible with Windows * Adds Windows config section describing Windows jobs * Adds VTK as Windows build stack (to be expanded later) * Modifies proj to build on Windows * Refactors Windows rpath symlinking to avoid system libs and externals --------- Co-authored-by: Ryan Krattiger <ryan.krattiger@kitware.com> Co-authored-by: Mike VanDenburgh <michael.vandenburgh@kitware.com> Co-authored-by: Todd Gamblin <tgamblin@llnl.gov> Co-authored-by: Scott Wittenburg <scott.wittenburg@kitware.com>
148 lines
5 KiB
PowerShell
148 lines
5 KiB
PowerShell
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
# #######################################################################
|
|
|
|
function Compare-CommonArgs {
|
|
$CMDArgs = $args[0]
|
|
# These aruments take precedence and call for no futher parsing of arguments
|
|
# invoke actual Spack entrypoint with that context and exit after
|
|
"--help", "-h", "--version", "-V" | ForEach-Object {
|
|
$arg_opt = $_
|
|
if(($CMDArgs) -and ([bool]($CMDArgs.Where({$_ -eq $arg_opt})))) {
|
|
return $true
|
|
}
|
|
}
|
|
return $false
|
|
}
|
|
|
|
function Read-SpackArgs {
|
|
$SpackCMD_params = @()
|
|
$SpackSubCommand = $NULL
|
|
$SpackSubCommandArgs = @()
|
|
$args_ = $args[0]
|
|
$args_ | ForEach-Object {
|
|
if (!$SpackSubCommand) {
|
|
if($_.SubString(0,1) -eq "-")
|
|
{
|
|
$SpackCMD_params += $_
|
|
}
|
|
else{
|
|
$SpackSubCommand = $_
|
|
}
|
|
}
|
|
else{
|
|
$SpackSubCommandArgs += $_
|
|
}
|
|
}
|
|
return $SpackCMD_params, $SpackSubCommand, $SpackSubCommandArgs
|
|
}
|
|
|
|
function Set-SpackEnv {
|
|
# This method is responsible
|
|
# for processing the return from $(spack <command>)
|
|
# which are returned as System.Object[]'s containing
|
|
# a list of env commands
|
|
# Invoke-Expression can only handle one command at a time
|
|
# so we iterate over the list to invoke the env modification
|
|
# expressions one at a time
|
|
foreach($envop in $args[0]){
|
|
Invoke-Expression $envop
|
|
}
|
|
}
|
|
|
|
|
|
function Invoke-SpackCD {
|
|
if (Compare-CommonArgs $SpackSubCommandArgs) {
|
|
python "$Env:SPACK_ROOT/bin/spack" cd -h
|
|
}
|
|
else {
|
|
$LOC = $(python "$Env:SPACK_ROOT/bin/spack" location $SpackSubCommandArgs)
|
|
if (($NULL -ne $LOC)){
|
|
if ( Test-Path -Path $LOC){
|
|
Set-Location $LOC
|
|
}
|
|
else{
|
|
exit 1
|
|
}
|
|
}
|
|
else {
|
|
exit 1
|
|
}
|
|
}
|
|
}
|
|
|
|
function Invoke-SpackEnv {
|
|
if (Compare-CommonArgs $SpackSubCommandArgs[0]) {
|
|
python "$Env:SPACK_ROOT/bin/spack" env -h
|
|
}
|
|
else {
|
|
$SubCommandSubCommand = $SpackSubCommandArgs[0]
|
|
$SubCommandSubCommandArgs = $SpackSubCommandArgs[1..$SpackSubCommandArgs.Count]
|
|
switch ($SubCommandSubCommand) {
|
|
"activate" {
|
|
if (Compare-CommonArgs $SubCommandSubCommandArgs) {
|
|
python "$Env:SPACK_ROOT/bin/spack" env activate $SubCommandSubCommandArgs
|
|
}
|
|
elseif ([bool]($SubCommandSubCommandArgs.Where({$_ -eq "--pwsh"}))) {
|
|
python "$Env:SPACK_ROOT/bin/spack" env activate $SubCommandSubCommandArgs
|
|
}
|
|
elseif (!$SubCommandSubCommandArgs) {
|
|
python "$Env:SPACK_ROOT/bin/spack" env activate $SubCommandSubCommandArgs
|
|
}
|
|
else {
|
|
$SpackEnv = $(python "$Env:SPACK_ROOT/bin/spack" $SpackCMD_params env activate "--pwsh" $SubCommandSubCommandArgs)
|
|
Set-SpackEnv $SpackEnv
|
|
}
|
|
}
|
|
"deactivate" {
|
|
if ([bool]($SubCommandSubCommandArgs.Where({$_ -eq "--pwsh"}))) {
|
|
python"$Env:SPACK_ROOT/bin/spack" env deactivate $SubCommandSubCommandArgs
|
|
}
|
|
elseif($SubCommandSubCommandArgs) {
|
|
python "$Env:SPACK_ROOT/bin/spack" env deactivate -h
|
|
}
|
|
else {
|
|
$SpackEnv = $(python "$Env:SPACK_ROOT/bin/spack" $SpackCMD_params env deactivate "--pwsh")
|
|
Set-SpackEnv $SpackEnv
|
|
}
|
|
}
|
|
default {python "$Env:SPACK_ROOT/bin/spack" $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs}
|
|
}
|
|
}
|
|
}
|
|
|
|
function Invoke-SpackLoad {
|
|
if (Compare-CommonArgs $SpackSubCommandArgs) {
|
|
python "$Env:SPACK_ROOT/bin/spack" $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
|
|
}
|
|
elseif ([bool]($SpackSubCommandArgs.Where({($_ -eq "--pwsh") -or ($_ -eq "--list")}))) {
|
|
python "$Env:SPACK_ROOT/bin/spack" $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
|
|
}
|
|
else {
|
|
$SpackEnv = $(python "$Env:SPACK_ROOT/bin/spack" $SpackCMD_params $SpackSubCommand "--pwsh" $SpackSubCommandArgs)
|
|
Set-SpackEnv $SpackEnv
|
|
}
|
|
}
|
|
|
|
|
|
$SpackCMD_params, $SpackSubCommand, $SpackSubCommandArgs = Read-SpackArgs $args
|
|
|
|
if (Compare-CommonArgs $SpackCMD_params) {
|
|
python "$Env:SPACK_ROOT/bin/spack" $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
|
|
exit $LASTEXITCODE
|
|
}
|
|
|
|
# Process Spack commands with special conditions
|
|
# all other commands are piped directly to Spack
|
|
switch($SpackSubCommand)
|
|
{
|
|
"cd" {Invoke-SpackCD}
|
|
"env" {Invoke-SpackEnv}
|
|
"load" {Invoke-SpackLoad}
|
|
"unload" {Invoke-SpackLoad}
|
|
default {python "$Env:SPACK_ROOT/bin/spack" $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs}
|
|
}
|
|
|
|
exit $LASTEXITCODE
|