You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
241 lines
9.3 KiB
241 lines
9.3 KiB
function Build-Host([string]$BuildType, [string]$Arch) |
|
{ |
|
$Artifact="host" |
|
$Variant="-DBUILD_HOST=1" |
|
|
|
# Directory for CMake to build and store intermediate files |
|
$env:BuildDir="cache\win-$Arch-$Artifact-"+$BuildType.ToLower() |
|
md $env:BuildDir -ErrorAction:'silentlycontinue' |
|
# Directory where we plan to store the resultant libraries |
|
$env:OutputDir="dist\win-$Arch-$Artifact-"+$BuildType.ToLower() |
|
md $env:OutputDir -ErrorAction:'silentlycontinue' |
|
pushd -Path $env:BuildDir |
|
cmake $Variant -G "Visual Studio 16 2019" -A $Arch ../../ |
|
cmake --build . --config $BuildType |
|
ctest -C debug |
|
popd |
|
# |
|
md $env:OutputDir\lib\ -ErrorAction:'silentlycontinue' |
|
md $env:OutputDir\bin\ -ErrorAction:'silentlycontinue' |
|
cp $env:BuildDir\lib\$BuildType\zt.lib $env:OutputDir\lib\libzt.lib |
|
cp $env:BuildDir\bin\$BuildType\*.exe $env:OutputDir\bin |
|
cp $env:BuildDir\lib\$BuildType\zt-shared.dll $env:OutputDir\lib\libzt.dll |
|
cp $env:BuildDir\lib\$BuildType\zt-shared.pdb $env:OutputDir\lib\libzt.pdb -ErrorAction:'silentlycontinue' |
|
tree /F $env:OutputDir |
|
} |
|
|
|
function Build-Library([string]$BuildType, [string]$Arch, [string]$LangBinding) |
|
{ |
|
$OptLangBinding="" |
|
|
|
if ($LangBinding -eq "csharp") { |
|
$OptLangBinding="-DZTS_ENABLE_PINVOKE=1" |
|
$LangBindingPostfix="pinvoke" |
|
} |
|
if ($LangBinding -eq "java") { |
|
$OptLangBinding="-DZTS_ENABLE_JAVA=1" |
|
$LangBindingPostfix="jni" |
|
} |
|
|
|
$archAlias = "" |
|
$bitCount = "" |
|
|
|
if ($Arch -eq "Win32") { |
|
$bitCount="32" |
|
$archAlias="win-x86" |
|
} |
|
if ($Arch -eq "x64") { |
|
$bitCount="64" |
|
$archAlias="win-x64" |
|
} |
|
#if ($Arch -eq "ARM32") { |
|
# $bitCount="32" |
|
# $archAlias="win-arm" |
|
#} |
|
if ($Arch -eq "ARM") { |
|
$bitCount="64" |
|
$archAlias="win-arm64" |
|
} |
|
|
|
if ($archAlias -eq "" -or $bitCount -eq "") { |
|
echo "No valid architecture specified. Breaking." |
|
break |
|
} |
|
|
|
# Directory for CMake to build and store intermediate files |
|
$env:BuildDir="cache\win-$Arch-$LangBindingPostfix-"+$BuildType.ToLower() |
|
md $env:BuildDir -ErrorAction:'silentlycontinue' |
|
# Directory where we plan to store the resultant libraries |
|
$env:OutputDir="dist\win-$Arch-$LangBindingPostfix-"+$BuildType.ToLower() |
|
md $env:OutputDir -ErrorAction:'silentlycontinue' |
|
pushd -Path $env:BuildDir |
|
cmake ${OptLangBinding} -G "Visual Studio 16 2019" -A $Arch ../../ |
|
cmake --build . --config $BuildType |
|
popd |
|
md $env:OutputDir\lib\ -ErrorAction:'silentlycontinue' |
|
#cp $env:BuildDir\lib\$BuildType\zt.lib $env:OutputDir\lib\libzt.lib |
|
cp $env:BuildDir\lib\$BuildType\zt-shared.dll $env:OutputDir\lib\libzt.dll |
|
cp $env:BuildDir\lib\$BuildType\zt-shared.pdb $env:OutputDir\lib\libzt.pdb -ErrorAction:'silentlycontinue' |
|
} |
|
|
|
function Build-All |
|
{ |
|
# Win32 |
|
Build-Library -BuildType "Release" -Arch "Win32" -LangBinding "" |
|
Build-Library -BuildType "Release" -Arch "Win32" -LangBinding "csharp" |
|
Build-Library -BuildType "Debug" -Arch "Win32" -LangBinding "" |
|
Build-Library -BuildType "Debug" -Arch "Win32" -LangBinding "csharp" |
|
# x64 |
|
Build-Library -BuildType "Release" -Arch "x64" -LangBinding "" |
|
Build-Library -BuildType "Release" -Arch "x64" -LangBinding "csharp" |
|
Build-Library -BuildType "Debug" -Arch "x64" -LangBinding "" |
|
Build-Library -BuildType "Debug" -Arch "x64" -LangBinding "csharp" |
|
} |
|
|
|
function BuildNuGetPackages([string]$Version) |
|
{ |
|
BuildNuGetPackage -BuildType "Release" -Arch "x64" -Version $Version |
|
BuildNuGetPackage -BuildType "Debug" -Arch "x64" -Version $Version |
|
BuildNuGetPackage -BuildType "Release" -Arch "Win32" -Version $Version |
|
BuildNuGetPackage -BuildType "Debug" -Arch "Win32" -Version $Version |
|
} |
|
|
|
function BuildNuGetPackage([string]$BuildType, [string]$Arch, [string]$Version) |
|
{ |
|
$archAlias = $Arch |
|
if ($Arch -eq "Win32") { |
|
$archAlias="x86" |
|
} |
|
|
|
$TargetTuple = "win-"+$archAlias+"-nuget-"+$($BuildType.ToLower()) |
|
|
|
# Where we plan to output *.nupkg(s) |
|
md pkg\nuget\ZeroTier.Sockets\bin\ -Force |
|
md dist\$TargetTuple -Force |
|
del dist\$TargetTuple\*.nupkg -ErrorAction:'silentlycontinue' |
|
|
|
# licenses |
|
md pkg\nuget\ZeroTier.Sockets\licenses -Force |
|
cp LICENSE.txt pkg\nuget\ZeroTier.Sockets\licenses |
|
|
|
# contentFiles (sources) |
|
md pkg\nuget\ZeroTier.Sockets\contentFiles -Force |
|
cp src\bindings\csharp\*.cs pkg\nuget\ZeroTier.Sockets\contentFiles |
|
cp examples\csharp\*.cs pkg\nuget\ZeroTier.Sockets\contentFiles |
|
|
|
# runtimes |
|
md pkg\nuget\ZeroTier.Sockets\runtimes\win10-$archAlias\native -Force |
|
md pkg\nuget\ZeroTier.Sockets\runtimes\win10-$archAlias\lib\uap10.0 -Force |
|
#md pkg\nuget\ZeroTier.Sockets\runtimes\win10-arm\native -Force |
|
|
|
# Build wrapper library for C# ZeroTier.Sockets abstraction |
|
#csc -target:library -debug:pdbonly ` |
|
# -pdb:pkg\nuget\ZeroTier.Sockets\bin\ZeroTier.Sockets.pdb ` |
|
# -out:pkg\nuget\ZeroTier.Sockets\bin\ZeroTier.Sockets.dll ` |
|
# .\src\bindings\csharp\*.cs |
|
|
|
# Copy sources into bindings library project |
|
cp .\src\bindings\csharp\*.cs .\pkg\nuget\bindings\ZeroTier.Sockets\ |
|
|
|
# Build bindings library |
|
pushd ./pkg/nuget/bindings/ |
|
dotnet build --configuration Release |
|
popd |
|
|
|
# Build unmanaged native libzt.dll with exported P/INVOKE symbols |
|
Build-Library -BuildType $BuildType -Arch $Arch -LangBinding "csharp" |
|
|
|
# Copy native libzt.dll into package tree |
|
cp .\dist\win-$archAlias-pinvoke-$($BuildType.ToLower())\lib\*.dll ` |
|
pkg\nuget\ZeroTier.Sockets\bin\libzt.dll |
|
|
|
# .NET Framework |
|
md pkg\nuget\ZeroTier.Sockets\lib\net40 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net45 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net451 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net452 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net46 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net461 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net462 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net47 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net471 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net472 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\net48 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netstandard1.3 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netstandard1.4 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netstandard1.5 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netstandard1.6 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netstandard2.0 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netstandard2.1 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netcoreapp1.0 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netcoreapp1.1 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netcoreapp2.0 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netcoreapp2.1 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netcoreapp2.2 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netcoreapp3.0 -Force |
|
md pkg\nuget\ZeroTier.Sockets\lib\netcoreapp3.1 -Force |
|
|
|
# .NET "Core" 5.0 (moniker missing from microsoft documentation?) |
|
md pkg\nuget\ZeroTier.Sockets\lib\net5.0 -Force |
|
|
|
# Copy assemblies into framework-specific directories. |
|
$folders = Get-ChildItem pkg\nuget\ZeroTier.Sockets\lib\ |
|
foreach ($folder in $folders.name){ |
|
cp -Path "pkg\nuget\ZeroTier.Sockets\bin\*.*" ` |
|
-Destination "pkg\nuget\ZeroTier.Sockets\lib\$folder" -Recurse |
|
} |
|
|
|
# Copy bindings library "ZeroTier.Sockets.dll" |
|
$folders = Get-ChildItem .\pkg\nuget\bindings\ZeroTier.Sockets\bin\Release |
|
foreach ($folder in $folders.name){ |
|
cp -Path ".\pkg\nuget\bindings\ZeroTier.Sockets\bin\Release\$folder\*.dll" ` |
|
-Destination "pkg\nuget\ZeroTier.Sockets\lib\$folder" -Recurse |
|
} |
|
|
|
# Native DLL placement |
|
|
|
cp .\dist\win-$archAlias-pinvoke-$($BuildType.ToLower())\lib\*.dll ` |
|
pkg\nuget\ZeroTier.Sockets\runtimes\win10-$archAlias\lib\uap10.0\libzt.dll |
|
cp .\dist\win-$archAlias-pinvoke-$($BuildType.ToLower())\lib\*.dll ` |
|
pkg\nuget\ZeroTier.Sockets\lib\net40\libzt.dll |
|
cp .\dist\win-$archAlias-pinvoke-$($BuildType.ToLower())\lib\*.dll ` |
|
pkg\nuget\ZeroTier.Sockets\runtimes\win10-$archAlias\native\libzt.dll |
|
cp .\dist\win-$archAlias-pinvoke-$($BuildType.ToLower())\lib\*.pdb ` |
|
pkg\nuget\ZeroTier.Sockets\runtimes\win10-$archAlias\lib\uap10.0\libzt.pdb |
|
|
|
# Package |
|
pushd -Path pkg\nuget\ZeroTier.Sockets |
|
nuget pack ZeroTier.Sockets.$archAlias.nuspec ` |
|
-Version $Version -OutputDirectory ..\..\..\dist\$TargetTuple\ |
|
popd |
|
} |
|
|
|
function Clean-PackageDirectory |
|
{ |
|
rm pkg\nuget\ZeroTier.Sockets\lib ` |
|
-Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
rm pkg\nuget\ZeroTier.Sockets\contentFiles ` |
|
-Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
rm pkg\nuget\ZeroTier.Sockets\licenses ` |
|
-Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
rm pkg\nuget\ZeroTier.Sockets\runtimes ` |
|
-Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
rm pkg\nuget\ZeroTier.Sockets\bin ` |
|
-Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
} |
|
|
|
function Clean |
|
{ |
|
rm cache -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
rm dist -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
#rm pkg\nuget\bindings\ZeroTier.Sockets\*.cs -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
#rm pkg\nuget\bindings\ZeroTier.Sockets\bin -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
#rm pkg\nuget\bindings\ZeroTier.Sockets\obj -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
#rm pkg\nuget\ZeroTier.Sockets\contentFiles -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
rm pkg\nuget\ZeroTier.Sockets\lib -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
rm pkg\nuget\ZeroTier.Sockets\bin -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue' |
|
rm 'pkg\nuget\*' -Recurse -Include *.pdb |
|
rm 'pkg\nuget\*' -Recurse -Include *.cs |
|
rm 'pkg\nuget\*' -Recurse -Include *.dll |
|
rm 'pkg\nuget\*' -Recurse -Include LICENSE.* |
|
}
|
|
|