Premiers pas

Ce guide décrit pas à pas la mise en place du contrôle de version, l’obtention et la compilation d’une copie du code source d’un portage, la génération de la documentation, l’exécution des tests, ainsi qu’une description de la structure des répertoires de la base de code MicroPython.

Contrôle de version avec git

MicroPython est hébergé sur GitHub et utilise Git pour le contrôle de version. Le flux de travail consiste à récupérer (pull) et à envoyer (push) le code depuis et vers le dépôt principal. Installez la version de Git correspondant à votre système d’exploitation pour suivre la suite des étapes.

Note

Pour une référence sur les instructions d’installation, veuillez consulter les instructions d’installation de Git. Familiarisez-vous avec les commandes git de base dans ce Git Handbook ou via toute autre source sur Internet.

Note

Un fichier .git-blame-ignore-revs est inclus afin d’éviter que la sortie de git blame ne soit encombrée par des commits qui ne concernent que la mise en forme du code sans changement fonctionnel. Consultez la documentation de git blame pour savoir comment l’utiliser.

Obtenir le code

Il est recommandé de maintenir un fork du dépôt MicroPython pour vos besoins de développement. Le processus d’obtention du code source comprend les étapes suivantes :

  1. Forkez le dépôt https://github.com/micropython/micropython

  2. Vous disposerez alors d’un fork à l’adresse <https://github.com/<your-user-name>/micropython>.

  3. Clonez le dépôt forké à l’aide de la commande suivante :

$ git clone https://github.com/<your-user-name>/micropython

Ensuite, configurez les dépôts distants afin de pouvoir collaborer sur le projet MicroPython.

Configurez le dépôt distant upstream :

$ cd micropython
$ git remote add upstream https://github.com/micropython/micropython

Il est courant de configurer upstream et origin sur un dépôt forké pour faciliter le partage des modifications de code. Vous pouvez conserver votre propre correspondance, mais il est recommandé que origin pointe vers votre fork et upstream vers le dépôt MicroPython principal.

Après la configuration ci-dessus, votre installation devrait ressembler à ceci :

$ git remote -v
origin       https://github.com/<your-user-name>/micropython (fetch)
origin       https://github.com/<your-user-name>/micropython (push)
upstream     https://github.com/micropython/micropython (fetch)
upstream     https://github.com/micropython/micropython (push)

Vous devriez maintenant disposer d’une copie du code source. Par défaut, vous pointez vers la branche master. Pour préparer la suite du développement, il est recommandé de travailler sur une branche de développement.

$ git checkout -b dev-branch

Vous pouvez lui donner n’importe quel nom. Vous devrez recompiler MicroPython chaque fois que vous changerez de branche.

Compiler et générer le code

Lorsque vous compilez MicroPython, vous compilez un port spécifique, ciblant généralement une board spécifique. Commencez par installer les dépendances requises. Compilez ensuite le compilateur croisé MicroPython avant de pouvoir compiler et générer avec succès. Cela s’applique en particulier lorsque vous compilez sous Linux. Les instructions pour Windows sont fournies dans une section ultérieure.

Dépendances requises

Installez les dépendances requises pour Linux :

$ sudo apt-get install build-essential libffi-dev git pkg-config

Pour le portage stm32, le compilateur croisé ARM est requis :

$ sudo apt-get install gcc-arm-none-eabi libnewlib-arm-none-eabi

Consultez la chaîne d’outils ARM GCC pour les derniers détails.

Python 3 est également requis. Vérifiez que Python est disponible sur votre système :

$ python3
Python 3.5.0 (default, Jul 17 2020, 14:04:10)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Tous les portages pris en charge ont des exigences de dépendances différentes ; consultez leurs fichiers readme respectifs.

Compilation du compilateur croisé MicroPython

Presque tous les portages nécessitent de compiler d’abord mpy-cross pour effectuer la pré-compilation du code Python qui sera inclus dans le micrologiciel du portage :

$ cd mpy-cross
$ make

Note

Notez que mpy-cross doit être compilé pour l’architecture hôte et non pour l’architecture cible.

Si la compilation a réussi, vous devriez voir un message semblable à celui-ci :

LINK mpy-cross
   text          data    bss     dec     hex filename
 279328          776     880  280984   44998 mpy-cross

Note

Utilisez make -C mpy-cross pour compiler le compilateur croisé en une seule instruction sans vous déplacer dans le répertoire mpy-cross ; sinon, vous devrez faire cd .. pour les étapes suivantes.

Compilation du portage Unix de MicroPython

Le portage Unix est une version de MicroPython qui s’exécute sous Linux, macOS et d’autres systèmes d’exploitation de type Unix. Il est extrêmement utile pour développer MicroPython car il évite d’avoir à déployer votre code sur un appareil pour le tester. À bien des égards, il fonctionne comme le binaire python de CPython.

Pour compiler le portage Unix, assurez-vous que toutes les dépendances liées à Linux sont installées comme détaillé dans la section sur les dépendances requises. Consultez la section Dépendances requises pour vous assurer que toutes les dépendances de ce portage sont installées. Assurez-vous également de disposer d’un environnement fonctionnel pour gcc et GNU make. Ubuntu 20.04 a été utilisé pour l’exemple ci-dessous, mais d’autres systèmes Unix devraient fonctionner avec peu de modifications :

$ gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 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.

puis compilez :

$ cd ports/unix
$ make submodules
$ make

Si MicroPython a été compilé correctement, vous devriez voir ce qui suit :

LINK micropython
   text         data     bss     dec     hex filename
 412033         5680    2496  420209   66971 micropython

Exécutez-le maintenant :

$ ./micropython
MicroPython v1.13-38-gc67012d-dirty on 2020-09-13; linux version
Use Ctrl-D to exit, Ctrl-E for paste mode
>>> print("hello world")
hello world
>>>

Compilation du portage Windows

Le portage Windows comprend un fichier de projet Visual Studio micropython.vcxproj que vous pouvez utiliser pour compiler micropython.exe. Il peut être ouvert dans Visual Studio ou compilé en ligne de commande à l’aide de msbuild. Il peut également être compilé avec mingw, soit sous Windows avec Cygwin, soit sous Linux. Consultez la documentation du portage Windows pour plus d’informations.

Compilation du portage STM32

Comme pour le portage Unix, vous devez installer certaines dépendances requises comme détaillé dans la section Dépendances requises, puis compiler :

$ cd ports/stm32
$ make submodules
$ make

Veuillez consulter la documentation stm32 pour plus de détails sur le flashage du micrologiciel.

Note

Consultez la section Dépendances requises pour vous assurer que toutes les dépendances de ce portage sont installées. Le compilateur croisé est nécessaire. arm-none-eabi-gcc doit également se trouver dans le $PATH ou être spécifié manuellement via CROSS_COMPILE, soit en définissant la variable d’environnement, soit dans les arguments de la ligne de commande make.

Vous pouvez également spécifier la carte à utiliser :

$ cd ports/stm32
$ make BOARD=<board> submodules
$ make BOARD=<board>

Consultez ports/stm32/boards pour connaître les cartes disponibles, par exemple « OPENMV4 » ou « OPENMV4P ».

Génération de la documentation

La documentation de MicroPython est créée à l’aide de Sphinx. Si vous avez déjà installé Python, installez alors Sphinx à l’aide de pip. Il est recommandé d’utiliser un environnement virtuel :

$ python3 -m venv env
$ source env/bin/activate
$ pip install -r docs/requirements.txt

Placez-vous dans le répertoire docs :

$ cd docs

Générez la documentation :

$ make html

Ouvrez docs/build/html/index.html dans votre navigateur pour consulter la documentation en local. Reportez-vous à la documentation sur l”importation de votre documentation pour utiliser Read the Docs.

Exécution des tests

Pour exécuter tous les tests de la suite de tests sur le portage Unix, utilisez :

$ cd ports/unix
$ make test

Pour exécuter une sélection de tests sur une carte/un appareil connecté via USB, utilisez :

$ cd tests
$ ./run-tests.py -t /dev/ttyACM0

Voir aussi Écrire des tests.

Cibles make supplémentaires pour les développeurs

Dans tous les portages basés sur make, il existe une cible permettant d’afficher la taille d’un fichier objet spécifique. Lorsqu’une modification est confinée à un seul fichier, cela est utile pour tester des variations afin de trouver des alternatives plus petites.

Par exemple, pour afficher la taille de objstr.o dans le répertoire py/ lors d’une compilation standard unix :

$ make build-standard/py/objstr.sz

De même, il existe une cible permettant de sauvegarder la version pré-traitée d’un fichier :

$ make build-standard/py/objstr.pp

Dans ports/unix, il existe des cibles supplémentaires liées à l’exécution des tests :

$ make test//int       # Run all tests matching the pattern "int"
$ make test/ports/unix # Run all tests in ports/unix
$ make test-failures   # Re-run only the failed tests
$ make print-failures  # print the differences for failed tests
$ make clean-failures  # delete the .exp and .out files from failed tests

Utiliser ci.sh en local

MicroPython utilise GitHub Actions pour l’intégration continue. Pour réduire la dépendance à un système de CI particulier, les étapes de compilation réelles des builds basés sur Unix se trouvent dans le fichier tools/ci.sh. Celui-ci peut également être utilisé comme script sur les postes de développeurs, avec certaines réserves :

  • Pour la plupart des étapes, on suppose un système Ubuntu/Debian semblable à celui utilisé lors de la CI.

  • Certaines étapes spécifiques supposent des versions précises d’Ubuntu.

  • Les étapes de configuration peuvent invoquer le gestionnaire de paquets du système pour installer des paquets, télécharger et installer des logiciels depuis Internet, etc.

Pour obtenir un message d’utilisation incluant la liste des commandes, exécutez :

$ tools/ci.sh --help

À titre d’exemple, vous pouvez compiler et tester le portage unix minimal avec :

$ tools/ci.sh unix_minimal_build unix_minimal_run_tests

Si vous utilisez le shell bash, vous pouvez ajouter une commande ci avec complétion par tabulation :

$ eval $(tools/ci.sh --bash-completion)

Pour le shell zsh, remplacez --bash-completion par --zsh-completion. Pour le shell fish, remplacez --bash-completion par --fish-completion.

Ensuite, en tapant :

$ ci unix_cov<tab>

Cela complétera le nom de l’étape ci en unix_coverage_. Appuyer une deuxième fois sur la touche de tabulation affichera la liste des étapes correspondantes :

$ ci unix_coverage_<tab>
unix_coverage_32bit_build
unix_coverage_32bit_run_native_mpy_tests…

Structure des dossiers

Il y a quelques répertoires à connaître quant à l’emplacement de certains détails d’implémentation. Voici une description des dossiers de premier niveau du code source.

py

Contient le compilateur, le moteur d’exécution et l’implémentation de la bibliothèque de base.

mpy-cross

Contient le compilateur croisé MicroPython qui pré-compile les scripts Python en bytecode.

ports

Code de toutes les versions de MicroPython pour les portages pris en charge.

lib

Bibliothèques C de bas niveau utilisées par n’importe quel portage, qui sont pour la plupart des bibliothèques tierces.

drivers

Contient les pilotes pour du matériel spécifique, conçus pour fonctionner sur plusieurs portages.

extmod

Contient une implémentation en C de modules supplémentaires non essentiels.

docs

Contient la documentation standard disponible à l’adresse https://docs.micropython.org/.

tests

Une implémentation de la suite de tests.

tools

Contient les scripts utilisés par le processus de compilation et de CI, ainsi que des outils utilisateur tels que mpremote.

examples

Exemple de code pour compiler MicroPython en tant que bibliothèque ainsi que des modules natifs.