diff options
| author | Joseph Henry <[email protected]> | 2021-03-02 01:53:03 -0800 |
|---|---|---|
| committer | Joseph Henry <[email protected]> | 2021-03-02 01:53:03 -0800 |
| commit | 9bca3270bca30e6dbd8069d5871f164a8b72ad30 (patch) | |
| tree | 2709ce8aba521d05c7b9d8d3b6071a9310815766 /build.ps1 | |
| parent | 62354e142e32352af78e29040d9e8456a7c39986 (diff) | |
Overhaul build system and documentation
Diffstat (limited to 'build.ps1')
| -rw-r--r-- | build.ps1 | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..bf59dcc --- /dev/null +++ b/build.ps1 @@ -0,0 +1,206 @@ +function Build-Host +{ + $Arch="x64" + $Artifact="host" + $BuildType="Debug" + $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\$BuildType\zt.lib $env:OutputDir\lib\libzt.lib + cp $env:BuildDir\$BuildType\zt-shared.dll $env:OutputDir\lib\libzt.dll + cp $env:BuildDir\$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-Sockets -BuildType "Release" -Arch "x64" -Version $Version + BuildNuGetPackage-Sockets -BuildType "Debug" -Arch "x64" -Version $Version + BuildNuGetPackage-Sockets -BuildType "Release" -Arch "Win32" -Version $Version + BuildNuGetPackage-Sockets -BuildType "Debug" -Arch "Win32" -Version $Version +} + +function BuildNuGetPackage-Sockets([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 + + # 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\net403 -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 + + # .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 + } + + # 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' +} |
