@@ -368,77 +368,6 @@ mkdir -p "$AR_SDK"
368
368
AR_PLATFORMIO_PY=" $AR_SDK /pioarduino-build.py"
369
369
cat configs/pio_start.txt > " $AR_PLATFORMIO_PY "
370
370
371
- # Process include directories and implement include path shortening
372
- # This is equivalent to the Python shorthen_includes() function
373
- # We collect shortened include paths and copy all header files to the esp32-arduino-libs
374
- REL_INC=" " # Will contain the shortened include paths for Windows
375
- set -- $INCLUDES
376
-
377
- for item; do
378
- if [[ " $item " != $PWD ]]; then # Skip current directory
379
- ipath=" $item "
380
- fname=` basename " $ipath " `
381
- dname=` basename $( dirname " $ipath " ) `
382
-
383
- # Skip main component from current project
384
- if [[ " $fname " == " main" && " $dname " == $( basename " $PWD " ) ]]; then
385
- continue
386
- fi
387
-
388
- # Find the component root directory by walking up the path
389
- while [[ " $dname " != " components" && " $dname " != " managed_components" && " $dname " != " build" ]]; do
390
- ipath=` dirname " $ipath " `
391
- fname=` basename " $ipath " `
392
- dname=` basename $( dirname " $ipath " ) `
393
- done
394
-
395
- # Skip Arduino component (handled separately)
396
- if [[ " $fname " == " arduino" ]]; then
397
- continue
398
- fi
399
-
400
- # Skip config directory
401
- if [[ " $fname " == " config" ]]; then
402
- continue
403
- fi
404
-
405
- # Calculate relative path within component
406
- out_sub=" ${item#* $ipath } "
407
- out_cpath=" $AR_SDK /include/$fname$out_sub "
408
-
409
- # Add to shortened include paths for Windows (using GCC's -iwithprefix mechanism)
410
- REL_INC+=" -iwithprefixbefore $fname$out_sub "
411
-
412
- # Copy all header files to the esp32-arduino-libs include directory
413
- # This ensures all headers are available at build time
414
- for f in ` find " $item " -name ' *.h' ` ; do
415
- rel_f=${f#* $item }
416
- rel_p=${rel_f%/* }
417
- mkdir -p " $out_cpath$rel_p "
418
- cp -n $f " $out_cpath$rel_p /"
419
- done
420
- for f in ` find " $item " -name ' *.hpp' ` ; do
421
- rel_f=${f#* $item }
422
- rel_p=${rel_f%/* }
423
- mkdir -p " $out_cpath$rel_p "
424
- cp -n $f " $out_cpath$rel_p /"
425
- done
426
- for f in ` find " $item " -name ' *.inc' ` ; do
427
- rel_f=${f#* $item }
428
- rel_p=${rel_f%/* }
429
- mkdir -p " $out_cpath$rel_p "
430
- cp -n $f " $out_cpath$rel_p /"
431
- done
432
-
433
- # Temporary fix for Bluetooth controller header location issue
434
- # See: https://github.com/espressif/esp-idf/commit/dc4731101dd567cc74bbe4d0f03afe52b7db9afb
435
- if [[ " $fname " == " bt" && " $out_sub " == " /include/$IDF_TARGET /include" && -f " $ipath /controller/$IDF_TARGET /esp_bt_cfg.h" ]]; then
436
- mkdir -p " $AR_SDK /include/$fname /controller/$IDF_TARGET "
437
- cp -n " $ipath /controller/$IDF_TARGET /esp_bt_cfg.h" " $AR_SDK /include/$fname /controller/$IDF_TARGET /esp_bt_cfg.h"
438
- fi
439
- fi
440
- done
441
-
442
371
# Generate ASFLAGS section for assembly compilation
443
372
echo " ASFLAGS=[" >> " $AR_PLATFORMIO_PY "
444
373
@@ -450,28 +379,38 @@ else
450
379
fi
451
380
452
381
# Add shortened include paths for assembly files only on Windows
453
- # This implements the same logic as the Python shorthen_includes() function
454
- if [[ -n " $REL_INC " ]]; then
382
+ if [[ -n " $INCLUDES " ]]; then
455
383
echo " # Include path shortening for Windows command line length limits" >> " $AR_PLATFORMIO_PY "
456
384
echo " *([" >> " $AR_PLATFORMIO_PY "
457
385
echo " \" -iprefix\" , join(FRAMEWORK_DIR, \" tools\" , \" esp32-arduino-libs\" , \" $IDF_TARGET \" , \" include\" )," >> " $AR_PLATFORMIO_PY "
458
386
459
- # Parse the REL_INC string and convert -iwithprefixbefore to -iwithprefix
460
- IFS=' ' read -ra rel_inc_array <<< " $REL_INC"
461
- i=0
462
- while [ $i -lt ${# rel_inc_array[@]} ]; do
463
- if [[ " ${rel_inc_array[$i]} " == " -iwithprefixbefore" ]]; then
464
- if [ $(( i+ 1 )) -lt ${# rel_inc_array[@]} ]; then
465
- path=" ${rel_inc_array[$((i+1))]} "
466
- echo " \" -iwithprefix/$path \" ," >> " $AR_PLATFORMIO_PY "
467
- i=$(( i+ 2 )) # Skip both flag and path
468
- else
469
- i=$(( i+ 1 ))
387
+ # Process includes for Windows shortening
388
+ set -- $INCLUDES
389
+ for item; do
390
+ if [[ " $item " != $PWD ]]; then
391
+ ipath=" $item "
392
+ fname=` basename " $ipath " `
393
+ dname=` basename $( dirname " $ipath " ) `
394
+
395
+ if [[ " $fname " == " main" && " $dname " == $( basename " $PWD " ) ]]; then
396
+ continue
470
397
fi
471
- else
472
- i=$(( i+ 1 ))
398
+
399
+ while [[ " $dname " != " components" && " $dname " != " managed_components" && " $dname " != " build" ]]; do
400
+ ipath=` dirname " $ipath " `
401
+ fname=` basename " $ipath " `
402
+ dname=` basename $( dirname " $ipath " ) `
403
+ done
404
+
405
+ if [[ " $fname " == " arduino" || " $fname " == " config" ]]; then
406
+ continue
407
+ fi
408
+
409
+ out_sub=" ${item#* $ipath } "
410
+ echo " \" -iwithprefix/$fname$out_sub \" ," >> " $AR_PLATFORMIO_PY "
473
411
fi
474
412
done
413
+
475
414
echo " ] if platform.system() == \" Windows\" else [])," >> " $AR_PLATFORMIO_PY "
476
415
fi
477
416
@@ -522,27 +461,38 @@ for item; do
522
461
done
523
462
524
463
# Add shortened include paths for C/C++ compilation only on Windows
525
- # This is the core of the include path shortening mechanism for Windows command line limits
526
- if [[ -n " $REL_INC " ]]; then
464
+ if [[ -n " $INCLUDES " ]]; then
527
465
echo " # Include path shortening for Windows command line length limits" >> " $AR_PLATFORMIO_PY "
528
466
echo " *([" >> " $AR_PLATFORMIO_PY "
529
467
echo " \" -iprefix\" , join(FRAMEWORK_DIR, \" tools\" , \" esp32-arduino-libs\" , \" $IDF_TARGET \" , \" include\" )," >> " $AR_PLATFORMIO_PY "
530
468
531
- IFS= ' ' read -ra rel_inc_array <<< " $REL_INC "
532
- i=0
533
- while [ $i -lt ${ # rel_inc_array[@]} ] ; do
534
- if [[ " ${rel_inc_array[$i]} " == " -iwithprefixbefore " ]]; then
535
- if [ $(( i + 1 )) -lt ${ # rel_inc_array[@]} ] ; then
536
- path= " ${rel_inc_array[$((i+1))]} "
537
- echo " \" -iwithprefix/ $path \" , " >> " $AR_PLATFORMIO_PY "
538
- i= $(( i + 2 ))
539
- else
540
- i= $(( i + 1 ))
469
+ # Process includes for Windows shortening
470
+ set -- $INCLUDES
471
+ for item ; do
472
+ if [[ " $item " != $PWD ]]; then
473
+ ipath= " $item "
474
+ fname= ` basename " $ipath " `
475
+ dname= ` basename $( dirname " $ipath " ) `
476
+
477
+ if [[ " $fname " == " main " && " $dname " == $( basename " $PWD " ) ]] ; then
478
+ continue
541
479
fi
542
- else
543
- i=$(( i+ 1 ))
480
+
481
+ while [[ " $dname " != " components" && " $dname " != " managed_components" && " $dname " != " build" ]]; do
482
+ ipath=` dirname " $ipath " `
483
+ fname=` basename " $ipath " `
484
+ dname=` basename $( dirname " $ipath " ) `
485
+ done
486
+
487
+ if [[ " $fname " == " arduino" || " $fname " == " config" ]]; then
488
+ continue
489
+ fi
490
+
491
+ out_sub=" ${item#* $ipath } "
492
+ echo " \" -iwithprefix/$fname$out_sub \" ," >> " $AR_PLATFORMIO_PY "
544
493
fi
545
494
done
495
+
546
496
echo " ] if platform.system() == \" Windows\" else [])," >> " $AR_PLATFORMIO_PY "
547
497
fi
548
498
@@ -575,48 +525,76 @@ echo " '-Wl,-Map=\"%s\"' % join(\"\${BUILD_DIR}\", \"\${PROGNAME}.map\")"
575
525
echo " ]," >> " $AR_PLATFORMIO_PY "
576
526
echo " " >> " $AR_PLATFORMIO_PY "
577
527
578
- # Generate CPPPATH (Include paths for PlatformIO)
579
- # For non-Windows: All include paths go here for best performance
580
- # For Windows: Only Arduino Core paths, framework headers use shortened paths
528
+ # Generate CPPPATH exactly like original script for non-Windows, empty for Windows
529
+ REL_INC=" "
581
530
echo " CPPPATH=[" >> " $AR_PLATFORMIO_PY "
582
- echo " join($PIO_SDK , board_config.get(\" build.arduino.memory_type\" , (board_config.get(\" build.flash_mode\" , \" dio\" ) + \" _qspi\" )), \" include\" )," >> " $AR_PLATFORMIO_PY "
583
- echo " join(FRAMEWORK_DIR, \" cores\" , board_config.get(\" build.core\" ))," >> " $AR_PLATFORMIO_PY "
584
531
585
- # Add full include paths for non-Windows platforms (better performance)
586
- if [[ -n " $INCLUDES " ]]; then
587
- echo " # Full include paths for better performance on non-Windows platforms" >> " $AR_PLATFORMIO_PY "
588
- echo " *([] if platform.system() == \" Windows\" else [" >> " $AR_PLATFORMIO_PY "
589
-
590
- set -- $INCLUDES
591
- for item; do
592
- if [[ " $item " != $PWD ]]; then
593
- # Skip Arduino and config directories (handled separately)
594
- ipath=" $item "
595
- fname=` basename " $ipath " `
596
- dname=` basename $( dirname " $ipath " ) `
597
-
598
- if [[ " $fname " == " main" && " $dname " == $( basename " $PWD " ) ]]; then
599
- continue
600
- fi
601
-
602
- # Find component root
603
- while [[ " $dname " != " components" && " $dname " != " managed_components" && " $dname " != " build" ]]; do
604
- ipath=` dirname " $ipath " `
605
- fname=` basename " $ipath " `
606
- dname=` basename $( dirname " $ipath " ) `
607
- done
608
-
609
- if [[ " $fname " == " arduino" || " $fname " == " config" ]]; then
610
- continue
611
- fi
612
-
613
- echo " \" $item \" ," >> " $AR_PLATFORMIO_PY "
614
- fi
615
- done
616
-
617
- echo " ])," >> " $AR_PLATFORMIO_PY "
618
- fi
532
+ # Process includes exactly like original script
533
+ set -- $INCLUDES
534
+ for item; do
535
+ if [[ " $item " != $PWD ]]; then
536
+ ipath=" $item "
537
+ fname=` basename " $ipath " `
538
+ dname=` basename $( dirname " $ipath " ) `
539
+ if [[ " $fname " == " main" && " $dname " == $( basename " $PWD " ) ]]; then
540
+ continue
541
+ fi
542
+ while [[ " $dname " != " components" && " $dname " != " managed_components" && " $dname " != " build" ]]; do
543
+ ipath=` dirname " $ipath " `
544
+ fname=` basename " $ipath " `
545
+ dname=` basename $( dirname " $ipath " ) `
546
+ done
547
+ if [[ " $fname " == " arduino" ]]; then
548
+ continue
549
+ fi
550
+ if [[ " $fname " == " config" ]]; then
551
+ continue
552
+ fi
619
553
554
+ out_sub=" ${item#* $ipath } "
555
+ out_cpath=" $AR_SDK /include/$fname$out_sub "
556
+ REL_INC+=" -iwithprefixbefore $fname$out_sub "
557
+
558
+ # Generate CPPPATH entries exactly like original - only for non-Windows
559
+ echo " *([] if platform.system() == \" Windows\" else [" >> " $AR_PLATFORMIO_PY "
560
+ if [ " $out_sub " = " " ]; then
561
+ echo " join($PIO_SDK , \" include\" , \" $fname \" )" >> " $AR_PLATFORMIO_PY "
562
+ else
563
+ pio_sub=" ${out_sub: 1} "
564
+ pio_sub=` echo $pio_sub | sed ' s/\//\\", \\"/g' `
565
+ echo " join($PIO_SDK , \" include\" , \" $fname \" , \" $pio_sub \" )" >> " $AR_PLATFORMIO_PY "
566
+ fi
567
+ echo " ])," >> " $AR_PLATFORMIO_PY "
568
+
569
+ # Copy header files exactly like original
570
+ for f in ` find " $item " -name ' *.h' ` ; do
571
+ rel_f=${f#* $item }
572
+ rel_p=${rel_f%/* }
573
+ mkdir -p " $out_cpath$rel_p "
574
+ cp -n $f " $out_cpath$rel_p /"
575
+ done
576
+ for f in ` find " $item " -name ' *.hpp' ` ; do
577
+ rel_f=${f#* $item }
578
+ rel_p=${rel_f%/* }
579
+ mkdir -p " $out_cpath$rel_p "
580
+ cp -n $f " $out_cpath$rel_p /"
581
+ done
582
+ for f in ` find " $item " -name ' *.inc' ` ; do
583
+ rel_f=${f#* $item }
584
+ rel_p=${rel_f%/* }
585
+ mkdir -p " $out_cpath$rel_p "
586
+ cp -n $f " $out_cpath$rel_p /"
587
+ done
588
+ # Temporary measure to fix issues caused by https://github.com/espressif/esp-idf/commit/dc4731101dd567cc74bbe4d0f03afe52b7db9afb#diff-1d2ce0d3989a80830fdf230bcaafb3117f32046d16cf46616ac3d55b4df2a988R17
589
+ if [[ " $fname " == " bt" && " $out_sub " == " /include/$IDF_TARGET /include" && -f " $ipath /controller/$IDF_TARGET /esp_bt_cfg.h" ]]; then
590
+ mkdir -p " $AR_SDK /include/$fname /controller/$IDF_TARGET "
591
+ cp -n " $ipath /controller/$IDF_TARGET /esp_bt_cfg.h" " $AR_SDK /include/$fname /controller/$IDF_TARGET /esp_bt_cfg.h"
592
+ fi
593
+ fi
594
+ done
595
+
596
+ echo " join($PIO_SDK , board_config.get(\" build.arduino.memory_type\" , (board_config.get(\" build.flash_mode\" , \" dio\" ) + \" _qspi\" )), \" include\" )," >> " $AR_PLATFORMIO_PY "
597
+ echo " join(FRAMEWORK_DIR, \" cores\" , board_config.get(\" build.core\" ))" >> " $AR_PLATFORMIO_PY "
620
598
echo " ]," >> " $AR_PLATFORMIO_PY "
621
599
echo " " >> " $AR_PLATFORMIO_PY "
622
600
@@ -632,7 +610,6 @@ for item; do
632
610
done
633
611
634
612
# Strip debug symbols from libraries and copy them to esp32-arduino-libs
635
- # This reduces the size of the final esp32-arduino-libs package
636
613
set -- $LD_LIB_FILES
637
614
for item; do
638
615
" $TOOLCHAIN -strip" -g " $item " # Remove debug symbols
@@ -695,7 +672,6 @@ echo -n "$LD_SCRIPTS" > "$FLAGS_DIR/ld_scripts"
695
672
echo -n " $AR_LIBS " > " $FLAGS_DIR /ld_libs"
696
673
697
674
# Copy ESP32-Camera private header if available
698
- # This is a workaround for missing private headers in the component
699
675
if [ -d " managed_components/espressif__esp32-camera/driver/private_include/" ]; then
700
676
cp -r " managed_components/espressif__esp32-camera/driver/private_include/cam_hal.h" " $AR_SDK /include/espressif__esp32-camera/driver/include/"
701
677
fi
@@ -737,14 +713,10 @@ for lib in "openthread" "espressif__esp-tflite-micro" "bt" "espressif__esp_modem
737
713
done
738
714
739
715
# Handle memory configuration variants
740
- # Different flash/PSRAM configurations may have different libraries and headers
741
716
mkdir -p " $AR_SDK /$MEMCONF /include"
742
717
mv " $PWD /build/config/sdkconfig.h" " $AR_SDK /$MEMCONF /include/sdkconfig.h"
743
-
744
- # Process memory variant files based on configuration
745
718
for mem_variant in ` jq -c ' .mem_variants_files[]' configs/builds.json` ; do
746
719
skip_file=1
747
- # Check if this variant applies to current target
748
720
for file_target in $( echo " $mem_variant " | jq -c ' .targets[]' | tr -d ' "' ) ; do
749
721
if [ " $file_target " == " $IDF_TARGET " ]; then
750
722
skip_file=0
@@ -760,6 +732,5 @@ for mem_variant in `jq -c '.mem_variants_files[]' configs/builds.json`; do
760
732
done ;
761
733
762
734
# Add ESP-IDF version information to sdkconfig header
763
- # This allows Arduino code to check the IDF version at compile time
764
735
echo " #define CONFIG_ARDUINO_IDF_COMMIT \" $IDF_COMMIT \" " >> " $AR_SDK /$MEMCONF /include/sdkconfig.h"
765
736
echo " #define CONFIG_ARDUINO_IDF_BRANCH \" $IDF_BRANCH \" " >> " $AR_SDK /$MEMCONF /include/sdkconfig.h"
0 commit comments