Problème avec l'ESP32 sur Arduino + RPi

J'ai un petit problème qui peut sembler absurde:
J'ai un Rapsberry Pi, et j'ai téléchargé Arduino IDE pour ARMs sous Linux (le RPi est un ARM, pas un x86....);

J'ai été très satisfait de son fonctionnement -version 1.8.8- pour les avrs.

J'ai pu installer les extensions pour ESP8266, tous les morceaux:
J'en ai été très satisfait.

Naturellement, poursuivant sur ma lancée, j'ai "installé" les extensions pour ESP32 par le gestionnaire de cartes supplémentaires:
Et là, j'ai été beaucoup moins satisfait, car* il manque, excusez du peu, les cross-compilateurs* xtensa-esp32-elf-gcc (et son frère indispensable, g++). (tout le reste a l'air d'être là, binutils, esptools)

Ceci est d'autant plus frustrant (même si cette tentative n'a rien cassé pour les autres cartes) que j'ai un cross- compilateur c(++) pour eps32 sur ARM -compile , suivant les instructions excellentes de Hackable, 24, pps 18-29. (mais je suis à l'aise avec arduino).

Quel est le chaînon manquant pour faire croire à l'IDE arduino qu'il a un compilateur pour ESP32? Et qu'il puisse l'utiliser (ça serait sympa) ?

Normalement le compilateur est installé en même temps que le package :
Sur mon Ubuntu : /home/xxxxxx/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/
Mais c'est un cross-compilateur tournant sur PC.

Je ne pense pas qu'un arm-gcc convienne, car le compilateur s'appelle arm-none-eabi-gcc alors que l'xtensa s'appelle xtensa-esp32-elf-gcc.

Peut-être en compilant la toolchain from scratch et en la plaçant au bon endroit ?

"Peut-être en compilant la toolchain from scratch et en la plaçant au bon endroit ?"

J'ai déjà compilé la toolchain from scratch... (Hackable s'est inspiré et a amélioré le contenu de votre lien) et vérifié qu'elle génère de l'assembleur xtensa (diffère de l'arm de ma RPi) option -S ou --save-temps de xtensa*gcc
Il ne
"reste "
plus qu'à trouver .... le bon endroit.
Et c'est là ma question...

Chercher le répertoire esp32/tools/xtensa-esp32-elf-gcc

Où ce répertoire se situe-t-il par rapport à l'arborescence arduino?
et je doute qu'il existe (sinon, gcc -et g++) seraient dedans... et je l'aurais trouvé (par find)

Peut être devrais je faire un lien symbolique?

Tu as bien un répertoire esp32 ?

Chez moi Sur mon Ubuntu :

/home/xxxxxx/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/

L'arborescence ARDUINO :

/home/xxxxxx/arduino-1.8.5

Peut être devrais je faire un lien symbolique?

Absolument.

Merci beaucoup pour ce chaînon manquant... (je pourrai le tester vendredi matin, mais je vois un peu d'espoir)

Tu as trouvé l'emplacement ?
Il y a bien la toolchain dedans ?

J'aurai mon RPi vendredi matin (prêté).
Encore une fois, merci, et désolé pour ce suspense.

Voilà la structure de .arduino15/packages

pi@raspberrypi:~ $ tree -l  -L 3 .arduino15/packages
.arduino15/packages
├── arduino
│   ├── hardware
│   │   └── sam
│   └── tools
│       ├── arm-none-eabi-gcc
│       └── bossac
└── esp8266
    ├── hardware
    │   └── esp8266
    └── tools
        ├── esptool
        ├── mkspiffs
        └── xtensa-lx106-elf- "arm-linux-gnueabihf",

13 directories, 0 files

Je n'ai pas de répertoire dédié à l'EPS32 (alors qu'il reconnaît les cartes dans ESP32 dans le menu de l'arduino 1.8.8
LE fichier qui permet de rajouter des profils de cartes et des compilateurs, loaders s'appelle package_esp32_index.json.1 (le .1 est pour la version que j'ai chargée ce matin, en espérant qu'il a un gcc prêt à l'emploi) ; il est comme le précédent, avec des "hosts" variés ( "x86_64-pc-linux-gnu", "i686-mingw32", "x86_64-apple-darwin", mais pas "host": "arm-linux-gnueabihf" qui devrait être là : il est là pour esptools et le gestionnaire de cartes, mais pas pour compiler.

J'ai un gcc pour ESP32

ESP32/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc --version
xtensa-esp32-elf-gcc (crosstool-NG crosstool-ng-1.22.0-80-g6c4433a) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

de version 5.2.0
qui sait compiler (mieux que l'affichage de sa version)

pi@raspberrypi:~ $ echo "void main(){ volatile int a = 8; a+=55;}" > truc.c
pi@raspberrypi:~ $  ESP32/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc  -c -S truc.c
pi@raspberrypi:~ $  tail -8 truc.s
        l32i.n  a2, a7, 0
        addi    a2, a2, 55
        memw
        s32i.n  a2, a7, 0
        nop.n
        retw.n
        .size   main, .-main
        .ident  "GCC: (crosstool-NG crosstool-ng-1.22.0-80-g6c4433a) 5.2.0"
pi@raspberrypi:~ $
.arduino15/packages
├── arduino
├── attiny
├── esp32
│   ├── hardware
│   └── tools
│       ├── esptool
│       ├── mkspiffs
│       └── xtensa-esp32-elf-gcc
│           └── 1.22.0-80-g6c4433a-5.2.0
│               ├── bin
│               ├── include
│               ├── lib
│               ├── libexec
│               ├── share
│               └── xtensa-esp32-elf
└── esp8266
    ├── hardware
    │   └── esp8266
    └── tools
        ├── esptool
        ├── mkspiffs
        └── xtensa-lx106-elf-gcc
            └── 1.20.0-26-gb404fb9-2
                ├── bin
                ├── build.log.bz2
                ├── include
                ├── lib
                ├── libexec
                ├── share
                └── xtensa-lx106-elf

Je pense que comme le package contient un compilateur X86, il ne s'est pas installé sur la RASPBERRY.
Mais avec un lien symbolique au bon endroit ça devrait le faire.

Ensuite, c'est fastidieux (j'essaye de ne pas faire de fautes de frappe) :

pi@raspberrypi:~ $ history | tail -4
 2061  # mkdir -p .arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/CLE
 2062  #  cp -rpuv ESP32/xtensa-esp32-elf/*  .arduino15/packages/esp32
 2063  cp -rpuv  ESP32/xtensa-esp32-elf/* .arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/CLE
 2064  history | tail -4

Je démarre mon arduino 1.8.8 (le dernier hurlement de la technique)
je selectionne comme exemple 'BareMinimum', je choisis une carte esp32...
la compilation se passe bien (il me faudra acheter des esp32....), et il utilise 191764 octets .... pour ne rien faire (c'est la fonction de BareMinimum; sous windows, avec arduino1.8.7, j'obtiens 190944 octets) , selon elf-size (qui fonctionne, donc, lui aussi).

Je suis presque persuadé qu'il est en état de marche. (par contre, les mises à jour me semblent être bien compliquées)
Et sans hbachetti, je n'aurais jamais pu....

hbachetti:
Je pense que comme le package contient un compilateur X86, il ne s'est pas installé sur la RASPBERRY.
Mais avec un lien symbolique au bon endroit ça devrait le faire.

Encore une fois merci:
comme, outre les fautes de frappe, j'ai tendance à mélanger l'ordre d'invocation de ln -S, j'ai préféré une bête copie récursive pour ne pas risquer trop de dégâts. Ca a l'air de fonctionner (il ne me "reste" plus qu'à explorer les exemples, de plus en plus complexes), même si c'est lent à compiler (un RPi a l'air 10 fois plus lent qu'un PC de 2 ans).

Petit s

ln -s source destination

mais il faut virer le répertoire destination d'abord.

Une raspi 3 ?

Oui (mais il faut telecharger explicitement l dernière version Arduino, puisqu'ils ont des binaires pour ARMs linux et que les versions des dépôts sont un peu datées). Et j'ai aussi une nanopi octocore (mais le support est un peu chinois, le matériel moins fiable -quoique mieux conçu- que le RPi -bornes USB non traversantes- et qu'il chauffe beaucoup: avec le temps qu'il a fait, j'ai préféré la délaisser pour le moment, quoique le cross compilateur esp32 ait été fait sur nanopi, et fonctionne sur RPi tout aussi bien : me permet de contempler de l'assembleur avant que je me décide à acheter.....)