2020-05-13 12:00:38 +00:00
#!/usr/bin/env pwsh
2020-07-21 12:47:27 +00:00
$S = [ IO.Path ] :: PathSeparator # path separator. WIN:';', UNIX:":"
2022-08-30 00:26:32 +00:00
$IDF_PATH = " $PSScriptRoot "
2019-08-27 05:45:50 +00:00
Write-Output " Setting IDF_PATH: $IDF_PATH "
2022-08-30 00:26:32 +00:00
$env:IDF_PATH = " $IDF_PATH "
2019-08-27 05:45:50 +00:00
2022-02-15 17:36:46 +00:00
Write-Output " Checking Python compatibility "
2022-08-30 00:26:32 +00:00
python " $IDF_PATH /tools/python_version_checker.py "
2022-02-15 17:36:46 +00:00
2019-08-27 05:45:50 +00:00
Write-Output " Adding ESP-IDF tools to PATH... "
2020-07-21 12:47:27 +00:00
$OLD_PATH = $env:PATH . split ( $S ) | Select-Object -Unique # array without duplicates
2019-08-27 05:45:50 +00:00
# using idf_tools.py to get $envars_array to set
2022-08-30 00:26:32 +00:00
$envars_raw = python " $IDF_PATH /tools/idf_tools.py " export - -format key-value
2019-08-27 05:45:50 +00:00
if ( $LASTEXITCODE -ne 0 ) { exit $LASTEXITCODE } # if error
2021-11-03 02:12:15 +00:00
$envars_array = @ ( ) # will be filled like:
2019-08-27 05:45:50 +00:00
# [
# [vname1, vval1], [vname2, vval2], ...
# ]
2020-07-21 12:47:27 +00:00
foreach ( $line in $envars_raw ) {
2019-08-27 05:45:50 +00: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 12:47:27 +00:00
$envars_array + = ( , ( $var_name , $var_val ) )
2019-08-27 05:45:50 +00:00
}
2021-11-09 02:47:35 +00:00
if ( $IsWindows -eq $null ) {
2021-11-09 10:28:48 +00: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-09 02:47:35 +00:00
$IsWindows = $true
}
2020-07-21 12:47:27 +00:00
foreach ( $pair in $envars_array ) {
# setting the values
2019-08-27 05:45:50 +00: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 12:47:27 +00:00
if ( $var_name -eq " PATH " ) {
2020-05-13 12:00:38 +00:00
# trim "%PATH%" or "`$PATH"
2020-07-21 12:47:27 +00:00
if ( $IsWindows ) {
$var_val = $var_val . Trim ( $S + " %PATH% " )
} else {
$var_val = $var_val . Trim ( $S + " `$ PATH " )
2020-05-13 12:00:38 +00:00
}
# apply
2020-07-21 12:47:27 +00:00
$env:PATH = $var_val + $S + $env:PATH
2020-05-13 12:00:38 +00:00
} else {
2020-07-21 12:47:27 +00:00
New-Item -Path " env: $var_name " -Value " $var_val " -Force
2020-05-13 12:00:38 +00:00
}
2019-08-27 05:45:50 +00:00
}
2020-07-21 12:47:27 +00:00
# Allow calling some IDF python tools without specifying the full path
2022-10-24 08:43:42 +00:00
function idf.py { & python " $IDF_PATH \tools\idf.py " $args }
function espefuse.py { & python " $IDF_PATH \components\esptool_py\esptool\espefuse.py " $args }
2022-10-24 08:44:24 +00:00
function espsecure.py { & python " $IDF_PATH \components\esptool_py\esptool\espsecure.py " $args }
2022-10-24 08:43:42 +00:00
function otatool.py { & python " $IDF_PATH \components\app_update\otatool.py " $args }
function parttool.py { & python " $IDF_PATH \components\partition_table\parttool.py " $args }
2020-07-21 12:47:27 +00:00
2019-08-27 05:45:50 +00:00
#Compare Path's OLD vs. NEW
2020-07-21 12:47:27 +00:00
$NEW_PATH = $env:PATH . split ( $S ) | Select-Object -Unique # array without duplicates
2019-08-27 05:45:50 +00:00
$dif_Path = Compare-Object -ReferenceObject $OLD_PATH -DifferenceObject $NEW_PATH -PassThru
2020-07-21 12:47:27 +00:00
if ( $dif_Path -ne $null ) {
Write-Output " `n Added to PATH `n ------------- "
2019-08-27 05:45:50 +00:00
Write-Output $dif_Path
2020-07-21 12:47:27 +00:00
} else {
2019-08-27 05:45:50 +00: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 14:48:03 +00:00
Start-Process -Wait -NoNewWindow -FilePath " python " -Args " `" $IDF_PATH /tools/idf_tools.py `" check-python-dependencies "
2019-08-27 05:45:50 +00:00
if ( $LASTEXITCODE -ne 0 ) { exit $LASTEXITCODE } # if error
2022-08-30 00:26:32 +00:00
$uninstall = python " $IDF_PATH /tools/idf_tools.py " uninstall - -dry -run
2021-12-13 15:45:11 +00:00
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 05:45:50 +00:00
Write-Output "
Done ! You can now compile ESP-IDF projects .
Go to the project directory and run :
idf . py build
"