123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- #!/usr/bin/env pwsh
- $number_of_build_workers=8
- $use_vcpkg=$true
- $use_ninja=$false
- $force_cpp_build=$false
- function getProgramFiles32bit() {
- $out = ${env:PROGRAMFILES(X86)}
- if ($null -eq $out) {
- $out = ${env:PROGRAMFILES}
- }
- if ($null -eq $out) {
- throw "Could not find [Program Files 32-bit]"
- }
- return $out
- }
- function getLatestVisualStudioWithDesktopWorkloadPath() {
- $programFiles = getProgramFiles32bit
- $vswhereExe = "$programFiles\Microsoft Visual Studio\Installer\vswhere.exe"
- if (Test-Path $vswhereExe) {
- $output = & $vswhereExe -products * -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -format xml
- [xml]$asXml = $output
- foreach ($instance in $asXml.instances.instance) {
- $installationPath = $instance.InstallationPath -replace "\\$" # Remove potential trailing backslash
- }
- if (!$installationPath) {
- Write-Host "Warning: no full Visual Studio setup has been found, extending search to include also partial installations" -ForegroundColor Yellow
- $output = & $vswhereExe -products * -latest -format xml
- [xml]$asXml = $output
- foreach ($instance in $asXml.instances.instance) {
- $installationPath = $instance.InstallationPath -replace "\\$" # Remove potential trailing backslash
- }
- }
- if (!$installationPath) {
- Throw "Could not locate any installation of Visual Studio"
- }
- }
- else {
- Throw "Could not locate vswhere at $vswhereExe"
- }
- return $installationPath
- }
- function getLatestVisualStudioWithDesktopWorkloadVersion() {
- $programFiles = getProgramFiles32bit
- $vswhereExe = "$programFiles\Microsoft Visual Studio\Installer\vswhere.exe"
- if (Test-Path $vswhereExe) {
- $output = & $vswhereExe -products * -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -format xml
- [xml]$asXml = $output
- foreach ($instance in $asXml.instances.instance) {
- $installationVersion = $instance.InstallationVersion
- }
- if (!$installationVersion) {
- Write-Host "Warning: no full Visual Studio setup has been found, extending search to include also partial installations" -ForegroundColor Yellow
- $output = & $vswhereExe -products * -latest -format xml
- [xml]$asXml = $output
- foreach ($instance in $asXml.instances.instance) {
- $installationVersion = $instance.installationVersion
- }
- }
- if (!$installationVersion) {
- Throw "Could not locate any installation of Visual Studio"
- }
- }
- else {
- Throw "Could not locate vswhere at $vswhereExe"
- }
- return $installationVersion
- }
- if ((Test-Path env:VCPKG_ROOT) -and $use_vcpkg) {
- $vcpkg_path = "$env:VCPKG_ROOT"
- Write-Host "Found vcpkg in VCPKG_ROOT: $vcpkg_path"
- }
- elseif ((Test-Path "${env:WORKSPACE}\vcpkg") -and $use_vcpkg) {
- $vcpkg_path = "${env:WORKSPACE}\vcpkg"
- Write-Host "Found vcpkg in WORKSPACE\vcpkg: $vcpkg_path"
- }
- else {
- Write-Host "Skipping vcpkg-enabled builds because the VCPKG_ROOT environment variable is not defined or you requested to avoid VCPKG, using self-distributed libs`n" -ForegroundColor Yellow
- }
- if ($null -eq $env:VCPKG_DEFAULT_TRIPLET -and $use_vcpkg) {
- Write-Host "No default triplet has been set-up for vcpkg. Defaulting to x64-windows" -ForegroundColor Yellow
- $vcpkg_triplet = "x64-windows"
- }
- elseif ($use_vcpkg) {
- $vcpkg_triplet = $env:VCPKG_DEFAULT_TRIPLET
- }
- if ($vcpkg_triplet -Match "x86" -and $use_vcpkg) {
- Throw "darknet is supported only in x64 builds!"
- }
- if ($null -eq (Get-Command "cl.exe" -ErrorAction SilentlyContinue)) {
- $vsfound = getLatestVisualStudioWithDesktopWorkloadPath
- Write-Host "Found VS in ${vsfound}"
- Push-Location "${vsfound}\Common7\Tools"
- cmd.exe /c "VsDevCmd.bat -arch=x64 & set" |
- ForEach-Object {
- if ($_ -match "=") {
- $v = $_.split("="); Set-Item -force -path "ENV:\$($v[0])" -value "$($v[1])"
- }
- }
- Pop-Location
- Write-Host "Visual Studio Command Prompt variables set" -ForegroundColor Yellow
- }
- $tokens = getLatestVisualStudioWithDesktopWorkloadVersion
- $tokens = $tokens.split('.')
- if($use_ninja) {
- $generator = "Ninja"
- }
- else {
- if ($tokens[0] -eq "14") {
- $generator = "Visual Studio 14 2015"
- }
- elseif ($tokens[0] -eq "15") {
- $generator = "Visual Studio 15 2017"
- }
- elseif ($tokens[0] -eq "16") {
- $generator = "Visual Studio 16 2019"
- }
- else {
- throw "Unknown Visual Studio version, unsupported configuration"
- }
- }
- Write-Host "Setting up environment to use CMake generator: $generator" -ForegroundColor Yellow
- if ($null -eq (Get-Command "nvcc.exe" -ErrorAction SilentlyContinue)) {
- if (Test-Path env:CUDA_PATH) {
- $env:PATH += ";${env:CUDA_PATH}\bin"
- Write-Host "Found cuda in ${env:CUDA_PATH}" -ForegroundColor Yellow
- }
- else {
- Write-Host "Unable to find CUDA, if necessary please install it or define a CUDA_PATH env variable pointing to the install folder" -ForegroundColor Yellow
- }
- }
- if (Test-Path env:CUDA_PATH) {
- if (-Not(Test-Path env:CUDA_TOOLKIT_ROOT_DIR)) {
- $env:CUDA_TOOLKIT_ROOT_DIR = "${env:CUDA_PATH}"
- Write-Host "Added missing env variable CUDA_TOOLKIT_ROOT_DIR" -ForegroundColor Yellow
- }
- }
- if($force_cpp_build) {
- $additional_build_setup="-DBUILD_AS_CPP:BOOL=TRUE"
- }
- if ($use_vcpkg) {
- ## DEBUG
- #New-Item -Path .\build_win_debug -ItemType directory -Force
- #Set-Location build_win_debug
- #if ($use_ninja) {
- #cmake -G "$generator" "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_path\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" #"-DCMAKE_BUILD_TYPE=Debug" $additional_build_setup ..
- #$dllfolder = "."
- #}
- #else {
- #cmake -G "$generator" -T "host=x64" -A "x64" "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_path\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" "-DCMAKE_BUILD_TYPE=Debug" $additional_build_setup ..
- #$dllfolder = "Debug"
- #}
- #cmake --build . --config Debug --target install
- ##cmake --build . --config Debug --parallel ${number_of_build_workers} --target install #valid only for CMake 3.12+
- #Remove-Item DarknetConfig.cmake
- #Remove-Item DarknetConfigVersion.cmake
- #$dllfiles = Get-ChildItem ${dllfolder}\*.dll
- #if ($dllfiles) {
- # Copy-Item $dllfiles ..
- #}
- #Set-Location ..
- #Copy-Item cmake\Modules\*.cmake share\darknet\
- # RELEASE
- New-Item -Path .\build_win_release -ItemType directory -Force
- Set-Location build_win_release
- if($use_ninja) {
- cmake -G "$generator" "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_path\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" "-DCMAKE_BUILD_TYPE=Release" $additional_build_setup ..
- $dllfolder = "."
- }
- else {
- cmake -G "$generator" -T "host=x64" -A "x64" "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_path\scripts\buildsystems\vcpkg.cmake" "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" "-DCMAKE_BUILD_TYPE=Release" $additional_build_setup ..
- $dllfolder = "Release"
- }
- cmake --build . --config Release --target install
- #cmake --build . --config Release --parallel ${number_of_build_workers} --target install #valid only for CMake 3.12+
- Remove-Item DarknetConfig.cmake
- Remove-Item DarknetConfigVersion.cmake
- $dllfiles = Get-ChildItem ${dllfolder}\*.dll
- if ($dllfiles) {
- Copy-Item $dllfiles ..
- }
- Set-Location ..
- Copy-Item cmake\Modules\*.cmake share\darknet\
- }
- else {
- # USE LOCAL PTHREAD LIB AND LOCAL STB HEADER, NO VCPKG, ONLY RELEASE MODE SUPPORTED
- # if you want to manually force this case, remove VCPKG_ROOT env variable and remember to use "vcpkg integrate remove" in case you had enabled user-wide vcpkg integration
- New-Item -Path .\build_win_release_novcpkg -ItemType directory -Force
- Set-Location build_win_release_novcpkg
- if($use_ninja) {
- cmake -G "$generator" $additional_build_setup ..
- }
- else {
- cmake -G "$generator" -T "host=x64" -A "x64" $additional_build_setup ..
- }
- cmake --build . --config Release --target install
- #cmake --build . --config Release --parallel ${number_of_build_workers} --target install #valid only for CMake 3.12+
- Remove-Item DarknetConfig.cmake
- Remove-Item DarknetConfigVersion.cmake
- $dllfolder = "..\3rdparty\pthreads\bin"
- $dllfiles = Get-ChildItem ${dllfolder}\*.dll
- if ($dllfiles) {
- Copy-Item $dllfiles ..
- }
- Set-Location ..
- Copy-Item cmake\Modules\*.cmake share\darknet\
- }
|