Skip to content

Commit 1b34273

Browse files
authored
Update copy-libs.sh
1 parent 33a3d95 commit 1b34273

File tree

1 file changed

+129
-2
lines changed

1 file changed

+129
-2
lines changed

tools/copy-libs.sh

Lines changed: 129 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,81 @@ function get_actual_path(){
5252
fi
5353
}
5454

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+
55130
#
56131
# START OF DATA EXTRACTION FROM CMAKE
57132
#
@@ -61,6 +136,7 @@ CPP_FLAGS=""
61136
AS_FLAGS=""
62137

63138
INCLUDES=""
139+
INCLUDES_RAW=""
64140
DEFINES=""
65141

66142
EXCLUDE_LIBS=";"
@@ -110,16 +186,19 @@ for item in "${@:2:${#@}-5}"; do
110186
if [ "${item:0:1}" = "/" ]; then
111187
item=`get_actual_path $item`
112188
INCLUDES+="$item "
189+
INCLUDES_RAW+="$item "
113190
elif [ "${item:0:2}" = ".." ]; then
114191
if [[ "${item:0:14}" = "../components/" && "${item:0:22}" != "../components/arduino/" ]] || [[ "${item:0:11}" = "../esp-idf/" ]] || [[ "${item:0:22}" = "../managed_components/" ]]; then
115192
item="$PWD${item:2}"
116193
item=`get_actual_path $item`
117194
INCLUDES+="$item "
195+
INCLUDES_RAW+="$item "
118196
fi
119197
else
120198
item="$PWD/build/$item"
121199
item=`get_actual_path $item`
122200
INCLUDES+="$item "
201+
INCLUDES_RAW+="$item "
123202
fi
124203
elif [ "$prefix" = "-D" ]; then
125204
if [[ "${item:2:7}" != "ARDUINO" ]] && [[ "$item" != "-DESP32=ESP32" ]] && [[ "$item" != "-DNDEBUG" ]]; then #skip ARDUINO defines
@@ -134,6 +213,13 @@ for item in "${@:2:${#@}-5}"; do
134213
fi
135214
done
136215

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+
137223
#collect asm-flags
138224
str=`cat build/compile_commands.json | grep arduino-lib-builder-as.S | grep command | cut -d':' -f2 | cut -d',' -f1`
139225
str="${str:2:${#str}-1}" #remove leading space and quotes
@@ -322,12 +408,25 @@ mkdir -p "$AR_SDK"
322408
AR_PLATFORMIO_PY="$AR_SDK/pioarduino-build.py"
323409
cat configs/pio_start.txt > "$AR_PLATFORMIO_PY"
324410

411+
# ASFLAGS mit Include-Verkürzung (analog zur Python-Funktion)
325412
echo " ASFLAGS=[" >> "$AR_PLATFORMIO_PY"
326413
if [ "$IS_XTENSA" = "y" ]; then
327414
echo " \"-mlongcalls\"" >> "$AR_PLATFORMIO_PY"
328415
else
329416
echo " \"-march=rv32imc\"" >> "$AR_PLATFORMIO_PY"
330417
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+
331430
echo " ]," >> "$AR_PLATFORMIO_PY"
332431
echo "" >> "$AR_PLATFORMIO_PY"
333432

@@ -364,11 +463,24 @@ echo " \"$last_item\"" >> "$AR_PLATFORMIO_PY"
364463
echo " ]," >> "$AR_PLATFORMIO_PY"
365464
echo "" >> "$AR_PLATFORMIO_PY"
366465

466+
# CCFLAGS mit Include-Verkürzung (analog zur Python-Funktion)
367467
echo " CCFLAGS=[" >> "$AR_PLATFORMIO_PY"
368468
set -- $PIO_CC_FLAGS
369469
for item; do
370470
echo " \"$item\"," >> "$AR_PLATFORMIO_PY"
371471
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+
372484
echo " \"-MMD\"" >> "$AR_PLATFORMIO_PY"
373485
echo " ]," >> "$AR_PLATFORMIO_PY"
374486
echo "" >> "$AR_PLATFORMIO_PY"
@@ -391,10 +503,21 @@ echo " '-Wl,-Map=\"%s\"' % join(\"\${BUILD_DIR}\", \"\${PROGNAME}.map\")"
391503
echo " ]," >> "$AR_PLATFORMIO_PY"
392504
echo "" >> "$AR_PLATFORMIO_PY"
393505

394-
# include dirs
395-
REL_INC=""
506+
# CPPPATH nur mit generischen Includes (analog zur Python-Funktion)
396507
echo " CPPPATH=[" >> "$AR_PLATFORMIO_PY"
397508

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=""
398521
set -- $INCLUDES
399522

400523
for item; do
@@ -522,6 +645,10 @@ echo -n "$LD_FLAGS" > "$FLAGS_DIR/ld_flags"
522645
echo -n "$LD_SCRIPTS" > "$FLAGS_DIR/ld_scripts"
523646
echo -n "$AR_LIBS" > "$FLAGS_DIR/ld_libs"
524647

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+
525652
if [ -d "managed_components/espressif__esp32-camera/driver/private_include/" ]; then
526653
cp -r "managed_components/espressif__esp32-camera/driver/private_include/cam_hal.h" "$AR_SDK/include/espressif__esp32-camera/driver/include/"
527654
fi

0 commit comments

Comments
 (0)