2016-04-26 12 views
0

Ich entwickle einen Code für eine digitale Signalverarbeitungskarte, die eine Sprache namens "Cn" verwendet - sehr ähnlich wie C, mit ein paar wichtigen Unterschieden wie die Einführung von "mono" und "poly" Variablen.Wie verwende ich einen Nicht-Gnu-Compiler mit SCons?

Der Compiler heißt 'cscn' und befindet sich unter 'C: \ Programme (x86) \ clearspeed \ bin \ cscn.exe' (es ist ein Windows-Host-System.) Ich untersuche die Verwendung von SCons um meine Kompilierung und Abhängigkeitsgenerierung durchzuführen, aber ich kann SCOs nicht dazu bringen, den cscn Compiler zu erkennen/zu benutzen. Eine sehr einfache Zusammenstellung Befehl sollte

sein
cscn pi.cn -lcn_reduction -o pi.csx 

Mein letzter Versuch einer Konfigurationsskript

ist
env = Environment() 
env.Replace(CC = ['C:\Program Files (x86)\clearspeed\bin\cscn.exe']) 
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction') 

Was ich jedoch eine Fehlermeldung mir zu sagen, dass ‚keine Version von Visual Studio Compiler gefunden 'und dass ich mindestens ein .exe-Ziel für mein Build angeben muss. cscn erstellt keine EXE-Datei, sondern erstellt eine CSX-Datei. Ich hatte gehofft, ich könnte den Compiler ersetzen, den er versucht, mit dem Befehl env.Replace() zu verwenden, aber offensichtlich nicht.

Gibt es eine Möglichkeit, dies zu tun?

+0

Abgesehen von Ihrer Frage: Backslashes in Python-Strings verwenden wird Sie schließlich beißen. Lieber '' C:/Prog ... ''oder'' C: \\ Prog ... ''oder' r'C: \ Prog ...' '. –

Antwort

1

Bitte versuchen Sie es

env = Environment(CC = 'C:/Program Files (x86)/clearspeed/bin/cscn.exe') 
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction') 

statt. Der einfache Environment() Anruf standardmäßig

env = Environment(tools=['default']) 

was bedeutet, dass SCons versucht, seine Werkzeuge zu finden, wie gcc oder g++, zuerst. Wenn Sie ihre Pfade danach ersetzen, wird es zu spät sein ... die entsprechenden Builder s wie Program und Library wurden für die aktuelle Umgebung nicht initialisiert, da kein Compiler gefunden wurde. Beachten Sie, dass Sie möglicherweise mehrere andere Variablen (AR und LINK in den Sinn kommen) ersetzen müssen, um Ihre gesamte Toolchain ordnungsgemäß zu betreiben. Siehe auch How can I use a cross compiler with Scons?.

Wenn Sie weiterhin damit zu kämpfen haben, möchten Sie vielleicht zu unserer Benutzer-Mailingliste unter sco[email protected] (siehe http://scons.org/lists.html) gehen und Ihre weiteren Fragen dort stellen.

+0

Unsere Antworten sind im Äther gekreuzt ..;) – bdbaddog

1

Sieht so aus, als müssten Sie ein paar Änderungen vornehmen. Erstens, da Sie auf Fenster sind, wird SCons zur Konfiguration von Visual Studio-Tools standardmäßig, wenn sie verfügbar sind

See: SCons/Tool/init.py

c_compilers = ['msvc', 'mingw', 'gcc', 'intelc', 'icl', 'icc', 'cc', 'bcc32' ] 

Also zuerst das, dass wir beheben:

env = Environment(tools=[]) 
env['CC'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('cc') 
env['LINK'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('link') 
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction') 

Likely Das ist immer noch nicht genug, weil SCons nichts über .csx und .cn Dateisuffixe weiß. Also lassen Sie uns das beheben:

Als nächstes müssen Sie SCons sagen, dass .cn's Objektdateien erstellen können.

import SCons.Tool 
import SCons.Default 
static_obj, shared_obj = SCons.Tool.createObjBuilders(env) 
my_suffix = '.cn' 
static_obj.add_action(my_suffix, SCons.Defaults.CAction) 
#shared_obj.add_action(my_suffix, SCons.Defaults.ShCAction) 
static_obj.add_emitter(my_suffix, SCons.Defaults.StaticObjectEmitter) 
#shared_obj.add_emitter(my_suffix, SCons.Defaults.SharedObjectEmitter) 

Das sollte darauf achten.

So machen wir es alle zusammen:

env = Environment(tools=[]) 
env['CC'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('cc') 
env['LINK'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('link') 
env['PROGSUFFIX'] = '.csx' 

# Add .cn suffix as able to create objects. 
import SCons.Tool 
import SCons.Default 
static_obj, shared_obj = SCons.Tool.createObjBuilders(env) 
my_suffix = '.cn' 
static_obj.add_action(my_suffix, SCons.Defaults.CAction) 
#shared_obj.add_action(my_suffix, SCons.Defaults.ShCAction) 
static_obj.add_emitter(my_suffix, SCons.Defaults.StaticObjectEmitter) 
#shared_obj.add_emitter(my_suffix, SCons.Defaults.SharedObjectEmitter) 

# Note we removed that from the output for program as it should automatically add it. 
env.Program('pi', 'pi.cn', CFLAGS='-lcn_reduction') 

Nun, ich habe keinen Zugriff auf Ihre Compiler Toolchain, also habe ich nicht die oben versucht, aber ich glaube, es sollte Sie am meisten erhalten, wenn nicht den ganzen Weg dorthin.

+0

Und wenn dieser ausgeklügelte Ansatz von @bdbaddog funktioniert, sollten Sie ihn in ein "clearspeed" Tool wie in unserem [Tools for Fools Guide] (https: // bitbucket) beschrieben einfügen. org/scons/scons/wiki/ToolsForFools) und spende es dann für den [index von externen Tools] (https://bitbucket.org/scons/scons/wiki/ToolsIndex) ... – dirkbaechle

+0

Sicher wäre ein echtes Tool viel sauberer Weg, dies zu tun. :) – bdbaddog