@@ -52,6 +52,81 @@ function get_actual_path(){
52
52
fi
53
53
}
54
54
55
+ # Include-Pfad-Verkürzung Funktionen (basierend auf pioarduino Python-Implementierung)
56
+ IS_INTEGRATION_DUMP=${IS_INTEGRATION_DUMP:- false}
57
+
58
+ # Das Framework SDK Verzeichnis für PlatformIO (Runtime)
59
+ FRAMEWORK_SDK_DIR=" $AR_SDK "
60
+
61
+ # Das Build-Zeit Framework-Verzeichnis (ESP-IDF)
62
+ if [ -n " $IDF_PATH " ]; then
63
+ BUILD_FRAMEWORK_DIR=" $IDF_PATH "
64
+ elif [ -d " ../esp-idf" ]; then
65
+ BUILD_FRAMEWORK_DIR=" $( realpath ../esp-idf) "
66
+ else
67
+ BUILD_FRAMEWORK_DIR=$( dirname $( dirname " $PWD " ) )
68
+ fi
69
+
70
+ is_framework_subfolder () {
71
+ local potential_subfolder=" $1 "
72
+
73
+ # Prüfe ob absoluter Pfad (analog zu os.path.isabs)
74
+ if [[ " $potential_subfolder " != /* ]]; then
75
+ return 1
76
+ fi
77
+
78
+ # Prüfe ob auf gleichem Laufwerk (analog zu os.path.splitdrive)
79
+ local sdk_drive=" ${BUILD_FRAMEWORK_DIR%%:* } "
80
+ local sub_drive=" ${potential_subfolder%%:* } "
81
+ if [[ " $sdk_drive " != " $sub_drive " ]]; then
82
+ return 1
83
+ fi
84
+
85
+ # Prüfe ob Unterordner (analog zu os.path.commonpath)
86
+ case " $potential_subfolder " in
87
+ " $BUILD_FRAMEWORK_DIR " * )
88
+ return 0
89
+ ;;
90
+ * )
91
+ return 1
92
+ ;;
93
+ esac
94
+ }
95
+
96
+ shorten_includes () {
97
+ local includes_str=" $1 "
98
+
99
+ # Für IDE-Integration keine Verkürzung (analog zur Python-Funktion)
100
+ if [[ " $IS_INTEGRATION_DUMP " == " true" ]]; then
101
+ echo " $includes_str ||"
102
+ return
103
+ fi
104
+
105
+ local shortened_includes=" "
106
+ local generic_includes=" "
107
+
108
+ # Konvertiere Include-String zu Array
109
+ IFS=' ' read -ra includes_array <<< " $includes_str"
110
+
111
+ for inc in " ${includes_array[@]} " ; do
112
+ if [[ -n " $inc " ]]; then
113
+ if is_framework_subfolder " $inc " ; then
114
+ # Berechne relativen Pfad (analog zu os.path.relpath)
115
+ local rel_path=" ${inc# $BUILD_FRAMEWORK_DIR } "
116
+ rel_path=" ${rel_path#/ } "
117
+ if [[ -n " $rel_path " ]]; then
118
+ shortened_includes+=" -iwithprefix/$rel_path "
119
+ fi
120
+ else
121
+ generic_includes+=" $inc "
122
+ fi
123
+ fi
124
+ done
125
+
126
+ # Rückgabe: "generic_includes|shortened_includes|framework_dir"
127
+ echo " $generic_includes |$shortened_includes |$BUILD_FRAMEWORK_DIR "
128
+ }
129
+
55
130
#
56
131
# START OF DATA EXTRACTION FROM CMAKE
57
132
#
@@ -61,6 +136,7 @@ CPP_FLAGS=""
61
136
AS_FLAGS=" "
62
137
63
138
INCLUDES=" "
139
+ INCLUDES_RAW=" "
64
140
DEFINES=" "
65
141
66
142
EXCLUDE_LIBS=" ;"
@@ -110,16 +186,19 @@ for item in "${@:2:${#@}-5}"; do
110
186
if [ " ${item: 0: 1} " = " /" ]; then
111
187
item=` get_actual_path $item `
112
188
INCLUDES+=" $item "
189
+ INCLUDES_RAW+=" $item "
113
190
elif [ " ${item: 0: 2} " = " .." ]; then
114
191
if [[ " ${item: 0: 14} " = " ../components/" && " ${item: 0: 22} " != " ../components/arduino/" ]] || [[ " ${item: 0: 11} " = " ../esp-idf/" ]] || [[ " ${item: 0: 22} " = " ../managed_components/" ]]; then
115
192
item=" $PWD ${item: 2} "
116
193
item=` get_actual_path $item `
117
194
INCLUDES+=" $item "
195
+ INCLUDES_RAW+=" $item "
118
196
fi
119
197
else
120
198
item=" $PWD /build/$item "
121
199
item=` get_actual_path $item `
122
200
INCLUDES+=" $item "
201
+ INCLUDES_RAW+=" $item "
123
202
fi
124
203
elif [ " $prefix " = " -D" ]; then
125
204
if [[ " ${item: 2: 7} " != " ARDUINO" ]] && [[ " $item " != " -DESP32=ESP32" ]] && [[ " $item " != " -DNDEBUG" ]]; then # skip ARDUINO defines
@@ -134,6 +213,13 @@ for item in "${@:2:${#@}-5}"; do
134
213
fi
135
214
done
136
215
216
+ # Wende Include-Verkürzung an (analog zur Python-Funktion)
217
+ SHORTENED_RESULT=$( shorten_includes " $INCLUDES_RAW " )
218
+ GENERIC_INCLUDES=" ${SHORTENED_RESULT%% |* } "
219
+ SHORTENED_INCLUDES=" ${SHORTENED_RESULT#* |} "
220
+ SHORTENED_INCLUDES=" ${SHORTENED_INCLUDES%% |* } "
221
+ USED_FRAMEWORK_DIR=" ${SHORTENED_RESULT##* |} "
222
+
137
223
# collect asm-flags
138
224
str=` cat build/compile_commands.json | grep arduino-lib-builder-as.S | grep command | cut -d' :' -f2 | cut -d' ,' -f1`
139
225
str=" ${str: 2: ${# str} -1} " # remove leading space and quotes
@@ -322,12 +408,25 @@ mkdir -p "$AR_SDK"
322
408
AR_PLATFORMIO_PY=" $AR_SDK /pioarduino-build.py"
323
409
cat configs/pio_start.txt > " $AR_PLATFORMIO_PY "
324
410
411
+ # ASFLAGS mit Include-Verkürzung (analog zur Python-Funktion)
325
412
echo " ASFLAGS=[" >> " $AR_PLATFORMIO_PY "
326
413
if [ " $IS_XTENSA " = " y" ]; then
327
414
echo " \" -mlongcalls\" " >> " $AR_PLATFORMIO_PY "
328
415
else
329
416
echo " \" -march=rv32imc\" " >> " $AR_PLATFORMIO_PY "
330
417
fi
418
+
419
+ # Füge verkürzte Includes hinzu (analog zur Python-Implementierung)
420
+ if [[ -n " $SHORTENED_INCLUDES " ]]; then
421
+ echo " \" -iprefix\" , join(FRAMEWORK_DIR, \" tools\" , \" sdk\" , \" $IDF_TARGET \" )," >> " $AR_PLATFORMIO_PY "
422
+ IFS=' ' read -ra shortened_array <<< " $SHORTENED_INCLUDES"
423
+ for flag in " ${shortened_array[@]} " ; do
424
+ if [[ -n " $flag " ]]; then
425
+ echo " \" $flag \" ," >> " $AR_PLATFORMIO_PY "
426
+ fi
427
+ done
428
+ fi
429
+
331
430
echo " ]," >> " $AR_PLATFORMIO_PY "
332
431
echo " " >> " $AR_PLATFORMIO_PY "
333
432
@@ -364,11 +463,24 @@ echo " \"$last_item\"" >> "$AR_PLATFORMIO_PY"
364
463
echo " ]," >> " $AR_PLATFORMIO_PY "
365
464
echo " " >> " $AR_PLATFORMIO_PY "
366
465
466
+ # CCFLAGS mit Include-Verkürzung (analog zur Python-Funktion)
367
467
echo " CCFLAGS=[" >> " $AR_PLATFORMIO_PY "
368
468
set -- $PIO_CC_FLAGS
369
469
for item; do
370
470
echo " \" $item \" ," >> " $AR_PLATFORMIO_PY "
371
471
done
472
+
473
+ # Füge verkürzte Includes hinzu (analog zur Python-Implementierung)
474
+ if [[ -n " $SHORTENED_INCLUDES " ]]; then
475
+ echo " \" -iprefix\" , join(FRAMEWORK_DIR, \" tools\" , \" sdk\" , \" $IDF_TARGET \" )," >> " $AR_PLATFORMIO_PY "
476
+ IFS=' ' read -ra shortened_array <<< " $SHORTENED_INCLUDES"
477
+ for flag in " ${shortened_array[@]} " ; do
478
+ if [[ -n " $flag " ]]; then
479
+ echo " \" $flag \" ," >> " $AR_PLATFORMIO_PY "
480
+ fi
481
+ done
482
+ fi
483
+
372
484
echo " \" -MMD\" " >> " $AR_PLATFORMIO_PY "
373
485
echo " ]," >> " $AR_PLATFORMIO_PY "
374
486
echo " " >> " $AR_PLATFORMIO_PY "
@@ -391,10 +503,21 @@ echo " '-Wl,-Map=\"%s\"' % join(\"\${BUILD_DIR}\", \"\${PROGNAME}.map\")"
391
503
echo " ]," >> " $AR_PLATFORMIO_PY "
392
504
echo " " >> " $AR_PLATFORMIO_PY "
393
505
394
- # include dirs
395
- REL_INC=" "
506
+ # CPPPATH nur mit generischen Includes (analog zur Python-Funktion)
396
507
echo " CPPPATH=[" >> " $AR_PLATFORMIO_PY "
397
508
509
+ # Füge generische Includes hinzu (nicht-Framework Pfade)
510
+ if [[ -n " $GENERIC_INCLUDES " ]]; then
511
+ IFS=' ' read -ra generic_array <<< " $GENERIC_INCLUDES"
512
+ for inc in " ${generic_array[@]} " ; do
513
+ if [[ -n " $inc " ]]; then
514
+ echo " \" $inc \" ," >> " $AR_PLATFORMIO_PY "
515
+ fi
516
+ done
517
+ fi
518
+
519
+ # Bestehende Include-Verarbeitung für kopierte Headers
520
+ REL_INC=" "
398
521
set -- $INCLUDES
399
522
400
523
for item; do
@@ -522,6 +645,10 @@ echo -n "$LD_FLAGS" > "$FLAGS_DIR/ld_flags"
522
645
echo -n " $LD_SCRIPTS " > " $FLAGS_DIR /ld_scripts"
523
646
echo -n " $AR_LIBS " > " $FLAGS_DIR /ld_libs"
524
647
648
+ # Speichere auch die verkürzten Includes in den Flags
649
+ echo -n " $SHORTENED_INCLUDES " > " $FLAGS_DIR /shortened_includes"
650
+ echo -n " $GENERIC_INCLUDES " > " $FLAGS_DIR /generic_includes"
651
+
525
652
if [ -d " managed_components/espressif__esp32-camera/driver/private_include/" ]; then
526
653
cp -r " managed_components/espressif__esp32-camera/driver/private_include/cam_hal.h" " $AR_SDK /include/espressif__esp32-camera/driver/include/"
527
654
fi
0 commit comments