This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhangyang-libzt/build.ps1

242 lines
9.3 KiB
PowerShell
Raw Normal View History

2021-05-05 19:55:47 -07:00
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'
2021-03-19 22:57:21 -07:00
#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
}
2021-03-19 22:57:21 -07:00
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.*
}