Forum: Projekte & Code Eine Art automake für AVR


von Michael Z. (incunabulum)


Angehängte Dateien:

Lesenswert?

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.

von Michael Z. (incunabulum)


Angehängte Dateien:

Lesenswert?

Und der Code für autobuild

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.