2016-07-29 1 views
0

Je me demande s'il existe un équivalent de CPPPATH pour la compilation de fichiers assembleur?Scons; Variable de construction pour l'assembleur include directory;

CPPPATH=include_dirs 

fonctionne parfaitement pour .cpp fichiers, mais il semble ne pas appliquer pour .S fichiers. J'ai reçu un message d'erreur comme "aucun fichier ou répertoire"

Y a-t-il une sorte de 'ASPATH'?

Merci

PS: Pour contourner ce problème actuellement j'utilise ASFLAGS avec -I/my_path mais je ne suis pas vraiment comme ça ...

AJOUTÉE:
cette approche fonctionne (ASFLAGS)

asm_dirs = '-I' + gen_build_dir + gen_file_dir + ' ' #relative path here 
as_flags = asm_dirs + env['ASFLAGS'] 
t = env.Program('boot.elf', sources, CPPPATH=include_dirs, LIBPATH=lib_dirs, LIBS=libs, ASFLAGS=as_flags, 
    LINKFLAGS=link_flags) 


cette approche ne fonctionne pas (CPPPATH)

include_dirs += [ #add path to 'CPPPATH' 
    gen_build_dir + gen_file_dir + ' ' 
] 
t = env.Program('boot.elf', sources, CPPPATH=include_dirs, LIBPATH=lib_dirs, LIBS=libs, LINKFLAGS=link_flags) 

scénario détaillé:

asm_cppflags = ('-S -Wno-invalid-offsetof ') 
gen_build_dir = 'build/Italy4K6/rel/' 
gen_file_dir = 'OS/UserAccess/' 
gen_file_name = 'UserAccess_HandleSysCall_ConstGen' 
src_full_name = gen_file_dir + gen_file_name + '.cpp' 
obj_full_name = gen_build_dir + gen_file_dir + gen_file_name + '.o' 
dst_full_name = gen_build_dir + gen_file_dir + gen_file_name + '.h' 
a = env.Object(src_full_name, CPPFLAGS=asm_cppflags, CPPPATH=include_dirs) 
gen = env.Command(target = "HEADER", source = "", 
    action = "cat " + obj_full_name + " | " + gen_script + " > " + dst_full_name) 
Depends(gen, a) 
asm_dirs = '-I' + gen_build_dir + gen_file_dir + ' ' 
as_flags = asm_dirs + env['ASFLAGS'] 

link_script = 'Targets/LinkerScripts/%s.ld' % product 
link_flags = ('-nodefaultlibs -nostartfiles -Wl,-T -Wl,%s -Wl,-Map -Wl,LINK.MAP ' % link_script) + env['LINKFLAGS'] 

t = env.Program('boot.elf', sources, CPPPATH=include_dirs, LIBPATH=lib_dirs, LIBS=libs, ASFLAGS=as_flags, 
     LINKFLAGS=link_flags) 
Depends(t, link_script) 
+0

Quel assembleur utilisez-vous? Quelle plateforme? – bdbaddog

+0

assembleur pour ARM, GNU GCC toolchain, sous mac os. – user3124812

Répondre

0

Il devrait y avoir aucune solution nécessaire, vous pouvez utiliser pour CPPPATH assembleur (as/gas) ainsi. Lors de l'exécution simple SConstruct

env = Environment() 
print env.Dump() 

comme "scons | grep AS" vous voyez (entre autres) la définition de "ASPPCOM"

'ASPPCOM': '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES' 

et comment il utilise les variables "$CPPFLAGS", "$_CPPDEFFLAGS" et "$_CPPINCFLAGS" ainsi. Ce dernier reprend la « CPPPATH » car il est défini comme (courir scons | grep CPPINCFLAGS)

'_CPPINCFLAGS': '$(${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)' 

Je soupçonne qu'il ya une autre erreur dans vos scripts de compilation (as pas trouvé dans PATH?), Mais il est impossible de dire sans voir a) votre SConstruct, b) comment vous appelez scons et c) le message d'erreur verbatim complet. Peut-être que vous voulez vous joindre à nous et vous abonner à notre liste de diffusion d'utilisateurs à [email protected] (voir http://scons.org/lists.html)? Nous pourrions discuter de ce problème plus loin, avec beaucoup d'utilisateurs compétents pour vous aider (tous ne sont pas actifs sur SO).

+0

J'ai ajouté une partie du script pour référence. Mais j'ai quand même essayé d'utiliser 'CPPPATH' avec le même résultat. – user3124812

+0

Merci, mais ce n'est toujours pas assez pour moi (ou quelqu'un d'autre) pour pouvoir reproduire votre problème. Tant que vous ne prenez pas le temps de fournir une sorte d'exemple minimal de travail et autonome (MWE) je ne peux pas commenter ce qui ne va pas ici. Par exemple, je ne sais pas ce que 'gen_build_dir' comprend ou comment il est défini. Peut-être que vous * pensez * que ces questions ne sont pas pertinentes et ne devraient pas être posées ...Ensuite, je vous recommande de relire [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve), puis de reconsidérer votre opinion à ce sujet. – dirkbaechle

+0

La description est mise à jour. Il serait difficile de poster un script entier puisqu'il fait plus de 150 lignes. FYI 'a = env.Object()' est de générer des fichiers intermédiaires, qui est utilisé plus tard. 't = env.Program()' devrait avoir PATH pour ces fichiers intermédiaires. Les fichiers intermédiaires sont en place. – user3124812