www.mikrocontroller.net

Forum: Compiler & IDEs SCons stat make für avr gcc


Autor: MarkusB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich bin eine der make geplagten Seelen. Ich weiß nicht wieso, aber ich 
bin mit make bisher nie klargekommen. Gestern bin ich auf SCons gestoßen 
und war sofort begeistert.

Es macht eigentlich nichts anderes als make, nur irgendwie einfacher. 
Außerdem hat man den vollen Funktionsumfang von Python zur Verfügung 
wodurch ganz andere Möglichkeiten entstehen. Es hat mich so begeistert 
das ich gleich mal einen Artikel darüber schreiben musste.

http://wiki.elektronik-projekt.de/mikrocontroller/...

Was haltet ihr davon?

Autor: Hermann-Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo MarkusB,

bin selbst von SCons auch begeistert... verwende es jetzt praktisch 
ausschließlich in meinen (Nicht-)AVR-Projekten. Für AVR sollte man ein 
eigenes Tool schreiben, vielleicht investierst Du ja darein etwas Zeit ?

Beim AVR benutze ich immer noch ein Makefile (basierend auf einem 
Template).

Seit der neuen Version 0.98.5 läuft es auch endlich vernünftig schnell 
los. Die mangelnde Geschwindigkeit bis es bei großen Projekten (ca. 400 
kLOC) losläuft, hatte mich immer gestört. Nach Portieren unseres 
Projektes von imake (ja, ist steinalt) auf SCons hing die Anzahl der 
Zeilen für das Build-System auf etwa 40% zurück, jetzt ist es etwas 
mehr, wir haben eine Reihe von Custom-Buildern geschrieben/übernommen 
(Corba, RPC z.B.) sowie einige Tests wie man sie von den GNU autotools 
her kennt.

Einen Vorteil gegenüber make-basierenden Build-Tools sehe ich darin, 
dass die Verzeichnisstruktur für die Reihenfolge der Übersetzung nicht 
relevant ist. Bei uns gab es einige Verschiebungen, da war dann die 
Struktur durch CVS leider fest - mit subversion hätten wir diese 
Probleme nicht gehabt. Wir benutzen auch ccache und distcc, das läßt 
sich sehr elegant benutzen und läuft meistens auch recht gut.

Allerdings ist es recht schwierig, wenn man andere Compiler/Platformen 
verwenden will wenn sie nicht schon eingebaut sind. Mein Ausflug zum ICC 
(Intel-Compiler) war damals ein Trauerspiel... War wohl auch der Grund 
warum KDE gleich wieder von SCons auf CMake umgeschwenkt ist.

Wenn man übrigens auf eine andere SCons-Version umschwenkt, tut man gut 
daran, ein 'scons -c' zu machen, die internen Files sind wohl recht 
unterschiedlich.

Viel Spaß damit
Hermann-Josef

Autor: MarkusB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Hermann-Josef,

>Für AVR sollte man ein
>eigenes Tool schreiben, vielleicht investierst Du ja darein etwas Zeit ?

Was meinst du mit "eigenem Tool"? Wie ich in meinem Artikel geschrieben 
hab funktioniert das ganze schon mit dem avr-gcc. Ich hab zwar außer dem 
Beispiel noch nichts ausprobiert, aber ich denke man sollte alles machen 
können was make auch kann

Autor: Hermann-Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo MarkusB,

war nur ein etwas eigennütziger Vorschlag das zu perfektionieren, dann 
könnte ich in Zukunft auch davon profitieren. Aber wie Du gezeigt hast, 
geht es ja schon mit weniger Aufwand.

In dem Tool (oder sollte man es besser Modul nennen ? ... bin mit Python 
noch nicht so bewandert) würde u.a. Folgendes gemacht:
- Setzen von Variablen wie z.B. CC oder CCFLAGS bzw. Namen von Compiler, 
Linker etc.
- Bereitstellung zusätzlicher Kommandos wie z.B. *.elf -> *.hex o.ä.
- Hinzufügen von Buildern und Emittern (SCons-Slang)

In der SCons-man-page wird sowas als Tool bezeichnet.

Natürlich geht es für eine bestimmte Platform immer, direkt etwas an die 
Kommandozeile durchzureichen (auc bei make), aber platformunabhängig ist 
das dann nicht.

Das Tool würde das Umschalten von z.B. avr-gcc auf avr-gcc.exe 
automatisch machen - natürlich muss das vorher auch jemand in das Tool 
einprogrammiert haben.

Ich selbst habe sowas auch noch nicht gemacht, ich weiß nur dass es das 
gibt, bzw. benutze es nur für doxygen und Qt, so fügt beispielsweise 
dieses Fragment
Import('env')

my_env = env.Clone(tools = ['qt'])
dem SCons das "Wissen" hinzu, wie man *.ui-Dateien sowie den moc für 
Qt-basierende Anwendungen richtig benutzt. Dann kann man einfach 
schreiben:
srcs = Split('main.cc Window.ui')

my_env.program('program',srcs)

Hermann-Josef

Autor: MarkusB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, ich verstehe was du meinst. Ja, kann man machen. Ich werde da 
sicher noch ein bisschen mehr machen. Fang ja gerade erst damit an. 
Python ist sowieso meine Lieblingssprache

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo MarkusB, Hermann-Josef,

privat und in der Firma setze ich seit längerem scons ein, auch für avr 
Projekte. Das langsame Starten ist mir vor allem bei Windows 
aufgefallen, wenn Netzlaufwerke im Spiel waren. Da verkehrt sich der 
Vorteil von Scons, die Abhängigkeiten per Hash-Summe zu prüfen ins 
Gegenteil, weil jedes der beteiligten Files komplett von der Platte 
gelesen werden muss.

Ein anderer Vorteil von Scons ist, dass man sich nicht um die sekundären
Abhängigkeiten (Include-Files) kümmern muss und problemlos verschiedene 
Compiler / Codegeneratoren, etc. miteinander verheiraten kann. "scons 
-c" braucht man wirklich nur ganz selten.

Weiterhin bringt scons viele nützliche Tools, die installieren, 
kopieren, packen, ....

Ein paar Anmerkungen zum Artikel und zur Verwendung von scons
hätte ich noch:

 - möglichst der Versuchung wiederstehen, mit python direkt im
   Sconscript zu arbeiten, das macht den Code nur unübersichtlicher und
   es kann zu komischen Seiteneffekten kommen, also besser:
   env['F_CPU'] = "16000000UL"
   env['CCFLAGS'] = "... -DF_CPU=$F_CPU"

 - möglichst die eingebauten Mechanismen verwenden, also
   * env['CPPPATH'] += Split("./inc ../inc")
   anstelle von
   * env['CCFLAGS'] = "... -Iinc -I../inc"

 - sinnvoll für ein plattformunabhängiges Buildscript ist die
   Generierung der Umgebung mit
   * env = Environment(tools=['gcc'])
   ansonsten nimmt Scons auf einem nicht-posix (Windows) System an, dass
   u.a. die Optionen im Windows-Style genutzt werden, die Kommandozeile
   würde dann mit "/Iinc" statt "-Iinc" aufgebaut und vom avr-gcc nicht
   verstanden.

 - Vorsicht vor der Zeile env.Clean('tusnicht','') die löscht den
   Sourcebaum zuverlässig (... ja ich hatte ein Backup)

 - wenn man die Übersicht über die Dateiabhängigkeiten verloren hat,
   hilft "scons --debug=tree"

Bleibt nun zu hoffen, dass früher oder später scons-local mit WinAVR 
geliefert wird ;-)

Beispiele für ein etwas umfangreicheres Scons/AVR Projekt findet man
unter http://www.nongnu.org/uracoli

Gruss, Axel


PS: Von cmake war bei Hermann-Josef auch die Rede, damit bin ich mit den
avr tools allerdings nicht so recht klar gekommen, trotz Kauf des 
Buches.

Autor: MarkusB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Axel,
danke für die Infos. Ich werd die Ratschläge beherzigen. Ich kenn SCons 
erst seit zwei Tagen, aber ich werd mir mal anschauen was du in deinem 
Projekt da alles anstellst. Ich muss gestehen das ich keine Ahnung habe 
wozu man das alles braucht

Gruß
Markus

Autor: Markus Burrer (Firma: Embedit Mikrocontrollertechnik) (_mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich habe das SConstruct etwas überarbeitet und eine kleine Referenz 
hinzugefügt
http://www.wiki.elektronik-projekt.de/mikrocontrol...

@Axel: das Beispiel von uracoli bereitet mir bis heute Kopfschmerzen ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.