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.

env_arduino_uno_py.png

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.

projects_helloworld_sconstruct.png

On n'exporte plus que l'environnement de construction.

projects_helloworld_sconscript.png

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.

libraries_digital_io_sconstruct.png

Les modifications apportées à ce fichier sont les mêmes que celles des environnements de construction décrites précédemment.

libraries_digital_io_sconscript.png

On n'importe/exporte plus que l'environnement de construction. On utilise les variables de construction précédemment créées.

libraries_digital_io_src_sconscript.png

On n'importe plus que l'environnement de construction dont on utilise les variables.

libraries_digital_io_demo_sconscript.png

On n'importe plus que l'environnement de construction dont on utilise les variables.

libraries_digital_io_test_sconscript.png

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

Références