2019-02-18 06:56:25 +08:00
#!/usr/bin/env pwsh
2019-02-19 21:18:08 +08:00
$number_of_build_workers = 8
2019-03-14 06:40:44 +08:00
$force_using_include_libs = $false
2019-02-19 21:18:08 +08:00
2019-03-20 03:07:02 +08:00
#$my_cuda_compute_model=75 #Compute capability for Tesla T4, RTX 2080
#$my_cuda_compute_model=72 #Compute capability for Jetson Xavier
#$my_cuda_compute_model=70 #Compute capability for Tesla V100
#$my_cuda_compute_model=62 #Compute capability for Jetson TX2
#$my_cuda_compute_model=61 #Compute capability for Tesla P40
#$my_cuda_compute_model=60 #Compute capability for Tesla P100
#$my_cuda_compute_model=53 #Compute capability for Jetson TX1
#$my_cuda_compute_model=52 #Compute capability for Tesla M40/M60
#$my_cuda_compute_model=37 #Compute capability for Tesla K80
#$my_cuda_compute_model=35 #Compute capability for Tesla K20/K40
#$my_cuda_compute_model=30 #Compute capability for Tesla K10, Quadro K4000
2019-04-09 15:06:58 +08:00
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 -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
}
}
else {
Write-Verbose " 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 -latest -requires Microsoft . VisualStudio . Workload . NativeDesktop -format xml
[ xml ] $asXml = $output
foreach ( $instance in $asXml . instances . instance )
{
$installationVersion = $instance . InstallationVersion
}
}
else {
Write-Verbose " Could not locate vswhere at $vswhereExe "
}
return $installationVersion
}
2019-03-14 06:40:44 +08:00
if ( ( Test-Path env : VCPKG_ROOT ) -and -not $force_using_include_libs ) {
2019-03-03 21:34:50 +08:00
$vcpkg_path = " $env:VCPKG_ROOT "
Write-Host " Found vcpkg in VCPKG_ROOT: $vcpkg_path "
}
2019-03-14 06:40:44 +08:00
elseif ( ( Test-Path " ${env:WORKSPACE} \vcpkg " ) -and -not $force_using_include_libs ) {
2019-03-03 21:34:50 +08:00
$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, using self-distributed libs `n " -ForegroundColor Yellow
}
if ( $null -eq $env:VCPKG_DEFAULT_TRIPLET ) {
Write-Host " No default triplet has been set-up for vcpkg. Defaulting to x64-windows `n " -ForegroundColor Yellow
$vcpkg_triplet = " x64-windows "
}
else {
$vcpkg_triplet = $env:VCPKG_DEFAULT_TRIPLET
}
if ( $vcpkg_triplet -Match " x86 " ) {
Throw " darknet is supported only in x64 builds! "
}
if ( $null -eq ( Get-Command " cl.exe " -ErrorAction SilentlyContinue ) ) {
2019-04-09 15:06:58 +08:00
$vsfound = getLatestVisualStudioWithDesktopWorkloadPath
Write-Host " Found VS in ${vsfound} "
Push-Location " ${vsfound} \Common7\Tools "
2019-02-19 21:18:08 +08:00
cmd / c " VsDevCmd.bat -arch=x64 & set " |
2019-03-03 21:34:50 +08:00
ForEach-Object {
2019-02-19 21:18:08 +08:00
if ( $_ -match " = " ) {
$v = $_ . split ( " = " ) ; set-item -force -path " ENV:\ $( $v [ 0 ] ) " -value " $( $v [ 1 ] ) "
}
2019-02-18 06:56:25 +08:00
}
2019-03-03 21:34:50 +08:00
Pop-Location
2019-04-09 15:06:58 +08:00
Write-Host " Visual Studio Command Prompt variables set `n " -ForegroundColor Yellow
2019-02-18 06:56:25 +08:00
}
2019-04-09 15:06:58 +08:00
$tokens = getLatestVisualStudioWithDesktopWorkloadVersion
$tokens = $tokens . split ( '.' )
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 `n " -ForegroundColor Yellow
2019-03-04 17:22:13 +08:00
if ( $null -eq ( Get-Command " nvcc.exe " -ErrorAction SilentlyContinue ) ) {
if ( Test-Path env : CUDA_PATH ) {
$env:PATH + = " ; ${env:CUDA_PATH} \bin "
2019-04-09 15:06:58 +08:00
Write-Host " Found cuda in ${env:CUDA_PATH} `n " -ForegroundColor Yellow
2019-03-04 17:22:13 +08:00
}
else {
Write-Host " Unable to find CUDA, if necessary please install it or define a CUDA_PATH env variable pointing to the install folder `n " -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 `n " -ForegroundColor Yellow
}
2019-04-09 15:06:58 +08:00
if ( $my_cuda_compute_model ) {
$additional_build_setup = " -DCUDA_COMPUTE_MODEL= ${my_cuda_compute_model} "
Write-Host " Using compute capability ${my_cuda_compute_model} `n " -ForegroundColor Yellow
}
else {
Write-Host " Using default compute capability `n " -ForegroundColor Yellow
}
2019-03-04 17:22:13 +08:00
}
2019-03-04 06:35:38 +08:00
2019-03-20 03:07:02 +08:00
if ( $vcpkg_path ) {
2019-03-04 06:35:38 +08:00
# DEBUG
New-Item -Path . \ build_win_debug -ItemType directory -Force
Set-Location build_win_debug
2019-04-09 15:06:58 +08:00
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 . .
2019-03-29 00:54:27 +08:00
cmake - -build . - -config Debug - -target install
#cmake --build . --config Debug --parallel ${number_of_build_workers} --target install #valid only for CMake 3.12+
2019-03-04 22:15:19 +08:00
Remove-Item DarknetConfig . cmake
Remove-Item DarknetConfigVersion . cmake
2019-03-04 06:35:38 +08:00
Set-Location . .
2019-03-29 00:54:27 +08:00
Copy-Item cmake \ Modules \ * . cmake share \ darknet \
2019-03-20 03:07:02 +08:00
# RELEASE
New-Item -Path . \ build_win_release -ItemType directory -Force
Set-Location build_win_release
2019-04-09 15:06:58 +08:00
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 . .
2019-03-29 00:54:27 +08:00
cmake - -build . - -config Release - -target install
#cmake --build . --config Release --parallel ${number_of_build_workers} --target install #valid only for CMake 3.12+
2019-03-20 03:07:02 +08:00
Remove-Item DarknetConfig . cmake
Remove-Item DarknetConfigVersion . cmake
Copy-Item * . dll . .
Set-Location . .
2019-03-29 00:54:27 +08:00
Copy-Item cmake \ Modules \ * . cmake share \ darknet \
2019-02-22 23:56:58 +08:00
}
else {
2019-03-20 03:07:02 +08:00
# USE LOCAL PTHREAD LIB AND LOCAL STB HEADER, NO VCPKG, ONLY RELEASE MODE SUPPORTED
2019-03-03 21:34:50 +08:00
# 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
2019-04-09 15:06:58 +08:00
cmake -G " $generator " -T " host=x64 " -A " x64 " $additional_build_setup . .
2019-03-29 00:54:27 +08:00
cmake - -build . - -config Release - -target install
#cmake --build . --config Release --parallel ${number_of_build_workers} --target install #valid only for CMake 3.12+
2019-03-04 22:15:19 +08:00
Remove-Item DarknetConfig . cmake
Remove-Item DarknetConfigVersion . cmake
2019-04-09 15:06:58 +08:00
Copy-Item . . \ 3rdparty \ pthreads \ bin \ * . dll . .
2019-03-03 21:34:50 +08:00
Set-Location . .
2019-03-29 00:54:27 +08:00
Copy-Item cmake \ Modules \ * . cmake share \ darknet \
2019-02-22 23:56:58 +08:00
}