ajout script de conversion cubeide vers vscode

This commit is contained in:
thomas committed 2026-09-04 11:55:05 +02:00
1 parent d067ab2521
commit f8a79b08bf
1 file changed
+47 -11
+47 -11
View File
@@ -112,7 +112,10 @@ done
[ -z "$GCC_DIR" ] && die "Dossier 'gcc/' introuvable a la racine du projet ($PROJECT_ROOT). Ce script attend un projet CubeMX genere avec la toolchain 'STM32CubeIDE / Makefile'."
info "Dossier de build : $GCC_DIR"
mapfile -t SUBMAKEFILES < <(find "$GCC_DIR" -maxdepth 1 -type f \( -iname "makefile_*" \) | sort)
SUBMAKEFILES=()
while IFS= read -r line; do
SUBMAKEFILES+=("$line")
done < <(find "$GCC_DIR" -maxdepth 1 -type f -iname "makefile_*" | sort)
TOP_MAKEFILE="$GCC_DIR/Makefile"
[ -f "$TOP_MAKEFILE" ] || die "Makefile principal introuvable dans $GCC_DIR"
if [ "${#SUBMAKEFILES[@]}" -eq 0 ]; then
@@ -311,19 +314,52 @@ fi
# ==============================================================================
log "Extraction des chemins d'include / defines (pour l'auto-completion VS Code)"
# ==============================================================================
MAIN_APP_MAKEFILE="${SUBMAKEFILES[-1]}"
INCLUDE_PATHS_RAW=$("$GNU_MAKE" -f "$MAIN_APP_MAKEFILE" -C "$GCC_DIR" -p 2>/dev/null | grep -m1 "^include_paths " | sed 's/^include_paths[[:space:]]*:=[[:space:]]*//')
DEFINES_RAW=$("$GNU_MAKE" -f "$MAIN_APP_MAKEFILE" -C "$GCC_DIR" -p 2>/dev/null | grep -m1 "^c_compiler_options " | grep -oE '\-D[A-Za-z0-9_]+' | sed 's/^-D//')
# On essaie chaque makefile jusqu'a en trouver un qui expose "include_paths :="
# (le plus complet, generalement celui de l'application principale - "Boot" par
# exemple n'a souvent qu'une variante simplifiee sans cette variable).
MAIN_APP_MAKEFILE=""
INCLUDE_PATHS_RAW=""
DEFINES_RAW=""
for candidate in "${SUBMAKEFILES[@]}"; do
candidate_basename="$(basename "$candidate")"
candidate_dump=$(cd "$GCC_DIR" && "$GNU_MAKE" -f "$candidate_basename" -p 2>/dev/null)
candidate_includes=$(echo "$candidate_dump" | grep -m1 "^include_paths :=" | sed 's/^include_paths[[:space:]]*:=[[:space:]]*//')
if [ -n "$candidate_includes" ]; then
MAIN_APP_MAKEFILE="$candidate"
MAKE_DUMP="$candidate_dump"
INCLUDE_PATHS_RAW="$candidate_includes"
DEFINES_RAW=$(echo "$candidate_dump" | grep -m1 "^c_compiler_options =" | grep -oE '\-D[A-Za-z0-9_]+' | sed 's/^-D//' | sort -u)
break
fi
done
if [ -z "$INCLUDE_PATHS_RAW" ]; then
warn "Extraction des chemins d'include incomplete - c_cpp_properties.json pourra necessiter des ajustements manuels."
MAIN_APP_MAKEFILE="${SUBMAKEFILES[0]}"
fi
info "Makefile utilise pour l'extraction : $(basename "$MAIN_APP_MAKEFILE")"
INCLUDE_JSON=""
INCLUDE_ITEMS=()
for p in $INCLUDE_PATHS_RAW; do
INCLUDE_JSON="$INCLUDE_JSON \"\${workspaceFolder}/$p\",\n"
INCLUDE_ITEMS+=(" \"\${workspaceFolder}/$p\"")
done
DEFINES_JSON=""
DEFINE_ITEMS=()
for d in $DEFINES_RAW; do
DEFINES_JSON="$DEFINES_JSON \"$d\",\n"
DEFINE_ITEMS+=(" \"$d\"")
done
info "$(echo -e "$INCLUDE_JSON" | grep -c workspaceFolder) chemins d'include et $(echo -e "$DEFINES_JSON" | grep -c '\".*\"') defines extraits."
join_with_commas() {
local first=1
for item in "$@"; do
[ "$first" -eq 0 ] && printf ",\n"
printf "%s" "$item"
first=0
done
[ "$#" -gt 0 ] && printf "\n"
}
INCLUDE_JSON=""
[ "${#INCLUDE_ITEMS[@]}" -gt 0 ] && INCLUDE_JSON="$(join_with_commas "${INCLUDE_ITEMS[@]}")"
DEFINES_JSON=""
[ "${#DEFINE_ITEMS[@]}" -gt 0 ] && DEFINES_JSON="$(join_with_commas "${DEFINE_ITEMS[@]}")"
info "${#INCLUDE_ITEMS[@]} chemins d'include et ${#DEFINE_ITEMS[@]} defines extraits."
# ==============================================================================
log "Detection de la structure du projet (mono-projet ou Boot+Appli)"
@@ -361,10 +397,10 @@ GCC_DIR_REL=${GCC_DIR#"$PROJECT_ROOT/"}
echo " \"cppStandard\": \"gnu++14\","
echo " \"intelliSenseMode\": \"linux-gcc-arm\","
echo " \"defines\": ["
echo -e "$DEFINES_JSON" | sed '$ s/,$//'
echo "$DEFINES_JSON"
echo " ],"
echo " \"includePath\": ["
echo -e "$INCLUDE_JSON" | sed '$ s/,$//'
echo "$INCLUDE_JSON"
echo " ]"
echo " }"
echo " ]"