Variable de construction
En réalité, l'environnement de construction iDreamMicro utilise déjà des variables. En effet, un environnement de construction SCons possède de base différentes variables telles que CC, CCFLAGS, CPPPATH ou encore OBJCOPY.
Chaque variable est représenté par un nom et une valeur contenue dans un dictionnaire Python dont le nom est la clé.
Intégration
L'utilisation de variables de construction nécessite la modification d'une bonne partie des scripts de construction de l'environnement. Une comparaison entre les différentes versions de fichiers permet de mettre les changements en évidence.
Environnements de construction
On commence par modifier les environnements de construction dédiés à chaque cible. Ceux-ci étant très similaires d'une cible à l'autre, on ne s'attardera que sur l'environnement pour Arduino Uno contenu dans le fichier build_system/env_arduino_uno.py.
On crée la variable NAME qui contient le nom de l'environnement de construction.
# Define environment name. env_target.Append(NAME = 'env_arduino_uno')
On crée les variables de construction MCU et F_CPU qui spécifient respectivement le type de microcontrôleur et sa fréquence d'horloge.
# Microcontroller type. env_target.Append(MCU = 'atmega328p') # Microcontroller frequency in Hertz. env_target.Append(F_CPU = '16000000UL')
On utilise ces nouvelles variables en lieu et place des anciennes.
# Set environment for an Atmel AVR ATmega328p microcontroller. env_target.Append(CCFLAGS = '-mmcu=' + env_target['MCU']) env_target.Append(LINKFLAGS = '-mmcu=' + env_target['MCU']) env_target.Append(CPPDEFINES = 'F_CPU=' + env_target['F_CPU'])
On n'exporte plus que l'environnement de construction configuré pour la cible, les autre variables étant désormais contenues dans son dictionnaire.
# Export environment set for target. Export('env_target')
Projets
Les scripts de construction étant similaires d'un projet à l'autre, on ne présentera que les modifications relatives au projet helloworld.
- fichier projects/helloworld/SConstruct :
On n'exporte plus que l'environnement de construction.
- fichier projects/helloworld/SConscript :
On n'importe/exporte plus que l'environnement de construction. On utilise les variables de construction précédemment créées.
Bibliothèques
Les scripts de construction étant similaires d'une bibliothèque à l'autre, on ne présentera que les modifications relatives à la bibliothèque digital_io.
- fichier libraries/digital_io/SConstruct :
Les modifications apportées à ce fichier sont les mêmes que celles des environnements de construction décrites précédemment.
- fichier libraries/digital_io/SConscript :
On n'importe/exporte plus que l'environnement de construction. On utilise les variables de construction précédemment créées.
- fichier libraries/digital_io/src/SConscript :
On n'importe plus que l'environnement de construction dont on utilise les variables.
- fichier libraries/digital_io/demo/SConscript :
On n'importe plus que l'environnement de construction dont on utilise les variables.
- fichier libraries/digital_io/test/SConscript :
On n'importe plus que l'environnement de construction dont on utilise les variables.
Conclusion
L'utilisation des variables de construction simplifie sensiblement les échanges entre les différents scripts de construction. Elle permet de limiter le nombre de paramètres à passer, la duplication ainsi que les éventuels oublis.
Toujours dans l'optique de simplifier et de factoriser l'environnement de construction iDreamMicro, un prochain article proposera de recourir à des méthodes pour construire les différents éléments.
Articles relatifs
- Environnement de construction SCons pour AVR-GCC (1/2)
- Environnement de construction SCons pour AVR-GCC (2/2)
- Arborescence d'une bibliothèque
- Construction d'une bibliothèque
- Construction de plusieurs projets