2020-05-13 14:00:38 +02:00
#!/usr/bin/env pwsh
2020-07-21 14:47:27 +02:00
$S = [ IO.Path ]:: PathSeparator # path separator. WIN:';', UNIX:":"
2019-08-27 13:45:50 +08:00
$IDF_PATH = $PSScriptRoot
Write-Output "Setting IDF_PATH: $IDF_PATH "
2020-07-21 14:47:27 +02:00
$env:IDF_PATH = $IDF_PATH
2019-08-27 13:45:50 +08:00
2022-02-15 18:36:46 +01:00
Write-Output "Checking Python compatibility"
python $IDF_PATH / tools / python_version_checker . py
2019-08-27 13:45:50 +08:00
Write-Output "Adding ESP-IDF tools to PATH..."
2020-07-21 14:47:27 +02:00
$OLD_PATH = $env:PATH . split ( $S ) | Select-Object -Unique # array without duplicates
2019-08-27 13:45:50 +08:00
# using idf_tools.py to get $envars_array to set
2020-05-13 14:00:38 +02:00
$envars_raw = python $IDF_PATH / tools / idf_tools . py export - -format key-value
2019-08-27 13:45:50 +08:00
if ( $LASTEXITCODE -ne 0 ) { exit $LASTEXITCODE } # if error
2021-11-02 19:12:15 -07:00
$envars_array = @ () # will be filled like:
2019-08-27 13:45:50 +08:00
# [
# [vname1, vval1], [vname2, vval2], ...
# ]
2020-07-21 14:47:27 +02:00
foreach ( $line in $envars_raw ) {
2019-08-27 13:45:50 +08:00
$pair = $line . split ( "=" ) # split in name, val
$var_name = $pair [ 0 ]. Trim () # trim spaces on the ends of the name
$var_val = $pair [ 1 ]. Trim () # trim spaces on the ends of the val
2020-07-21 14:47:27 +02:00
$envars_array += (, ( $var_name , $var_val ))
2019-08-27 13:45:50 +08:00
}
2021-11-08 18:47:35 -08:00
if ( $IsWindows -eq $null ) {
2021-11-09 11:28:48 +01:00
# $IsWindows was added in PowerShell Core 6 and PowerShell 7 together with multi-platform support. # I.E. if this
# internal variable is not set then PowerShell 5 is used and # the platform cannot be # anything else than Windows.
2021-11-08 18:47:35 -08:00
$IsWindows = $true
}
2020-07-21 14:47:27 +02:00
foreach ( $pair in $envars_array ) {
# setting the values
2019-08-27 13:45:50 +08:00
$var_name = $pair [ 0 ]. Trim () # trim spaces on the ends of the name
$var_val = $pair [ 1 ]. Trim () # trim spaces on the ends of the val
2020-07-21 14:47:27 +02:00
if ( $var_name -eq "PATH" ) {
2020-05-13 14:00:38 +02:00
# trim "%PATH%" or "`$PATH"
2020-07-21 14:47:27 +02:00
if ( $IsWindows ) {
$var_val = $var_val . Trim ( $S + "%PATH%" )
} else {
$var_val = $var_val . Trim ( $S + " `$ PATH" )
2020-05-13 14:00:38 +02:00
}
# apply
2020-07-21 14:47:27 +02:00
$env:PATH = $var_val + $S + $env:PATH
2020-05-13 14:00:38 +02:00
} else {
2020-07-21 14:47:27 +02:00
New-Item -Path "env: $var_name " -Value " $var_val " -Force
2020-05-13 14:00:38 +02:00
}
2019-08-27 13:45:50 +08:00
}
2020-07-21 14:47:27 +02:00
# Allow calling some IDF python tools without specifying the full path
# ${IDF_PATH}/tools is already added by 'idf_tools.py export'
$IDF_ADD_PATHS_EXTRAS = [ IO.Path ]:: Combine (${ IDF_PATH }, "components" , "esptool_py" , "esptool" )
$IDF_ADD_PATHS_EXTRAS += ${ S } + [ IO.Path ]:: Combine (${ IDF_PATH }, "components" , "app_update" )
$IDF_ADD_PATHS_EXTRAS += ${ S } + [ IO.Path ]:: Combine (${ IDF_PATH }, "components" , "espcoredump" )
$IDF_ADD_PATHS_EXTRAS += ${ S } + [ IO.Path ]:: Combine (${ IDF_PATH }, "components" , "partition_table" )
$env:PATH = $IDF_ADD_PATHS_EXTRAS + $S + $env:PATH
2019-08-27 13:45:50 +08:00
#Compare Path's OLD vs. NEW
2020-07-21 14:47:27 +02:00
$NEW_PATH = $env:PATH . split ( $S ) | Select-Object -Unique # array without duplicates
2019-08-27 13:45:50 +08:00
$dif_Path = Compare-Object -ReferenceObject $OLD_PATH -DifferenceObject $NEW_PATH -PassThru
2020-07-21 14:47:27 +02:00
if ( $dif_Path -ne $null ) {
Write-Output " `n Added to PATH `n -------------"
2019-08-27 13:45:50 +08:00
Write-Output $dif_Path
2020-07-21 14:47:27 +02:00
} else {
2019-08-27 13:45:50 +08:00
Write-Output "No directories added to PATH:"
Write-Output $OLD_PATH
}
Write-Output "Checking if Python packages are up to date..."
2021-09-16 16:48:03 +02:00
Start-Process -Wait -NoNewWindow -FilePath "python" -Args " `" $IDF_PATH /tools/idf_tools.py `" check-python-dependencies"
2019-08-27 13:45:50 +08:00
if ( $LASTEXITCODE -ne 0 ) { exit $LASTEXITCODE } # if error
2021-12-13 16:45:11 +01:00
$uninstall = python $IDF_PATH / tools / idf_tools . py uninstall - -dry-run
if (![ string ]:: IsNullOrEmpty ( $uninstall )){
Write-Output ""
Write-Output "Detected installed tools that are not currently used by active ESP-IDF version."
Write-Output " $uninstall "
Write-Output "For free up even more space, remove installation packages of those tools. Use option 'python.exe $IDF_PATH \tools\idf_tools.py uninstall --remove-archives'."
Write-Output ""
}
2019-08-27 13:45:50 +08:00
Write-Output "
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:
idf.py build
"