Moin!
zwei kleine Python-Skripte samt Config-Dateien für automatisierte Builds
ohne manuelle Eingriffe im Makefile.
Intro :
In meinem Fall verwende ich für die meisten Projekte eine
Verzeichnisstruktur wie folgt:
/workspace/libDir
/workspace/myProject1
/workspace/myProject2
Basierend auf der avr-libc enthält libDir projektübergreifend
Bibliotheksfunktionen zur Ansteuerung von timer, i2c, i2c komponenten,
etc. Die eigentliche Funktionalität eines Projekts wie auch
projektspezifische Konfigurationen sind in myProject1 etc. zu finden.
Dieser Ansatz ähnelt dem von avrlib. Die Versionskontrolle für fertige
Projekte erfolgt mittels svn:externals und svn:prjheoperties.
BuildTargets - Bibliotheken auf Plattformkompatibilität testen:
Da ich es hier z. T. mit unterschiedlichen AVR-Architekturen zu tun habe
(Mega8, Mega168, Mega32 etc.) ist die Bibliothek durch entsprechende
#ifdef Anweisungen target-unabhängig aufgebaut.
Aufbauend auf einem generischen Makefile ist es mit Hilfe von
buildTargets.py möglich, alle unterstützten Architekturen in einer
Config-Datei anzugeben. Dieses Skript sucht nun in den angegebenen
Source-Foldern (siehe buildTargetsSrcDirs.conf) nach *.cpp und *.c
Dateien (mehrere Verzeichnissebenen werden unterstützt), kompiliert die
gefundenen Quellen für die jeweilige Zielplattform und linkt alles zu
einer Bibliothek. Separate Verzeichnisse für build, dep, obj werden
unterstützt.
Werden unbekannte (nicht falsche!) register etc. für eine der
Zielarchitekturen verwendet, so kommt die entsprechende Fehlermeldung.
Hiermit wird erreicht, dass zumindest syntaktisch korrekter Code
vorliegt.
Code: buildTargets.zip
AutoMake für Arme - *autobuild.zip*
Hierauf aufbauend wurden die Skripte erweitert, um nahezu ohne
Nutzereingriffe ein Projekt zu kompilieren. Eine Config-Datei
(build.properties) enthält MCU, F_CPU, TargetName sowie eventuelle
externe Source-Verzeichnisse. Dazu ein generisches Makefile.
build.py sucht im eigenen Verzeichnis und Unterverzeichnissen (sowie
extern, wenn angegeben) nach Quellen, kompiliert und linkt diese zum
angegebene Target. Fertig.
Make für Faule, sozusagen. Individuelle, projektspezifische
Optimierungsschritte fehlen natürlich. Aber für Testprojekte mit
begrenzter Lebensdauer praktisch :-)
cu, mz.