помощь scons для альтернативных инструментов сборки - PullRequest
1 голос
/ 24 августа 2009

Я использую компилятор для TI DSP, поэтому инструменты CC и LINK и AS по умолчанию не имеют смысла. Ниже приведен файл SConstruct, который мне подходит, мне интересно, есть ли у кого-нибудь предложения по его улучшению. Некоторые проблемы:

  1. Я бы хотел как-то сказать, что мои файлы .obj должны находиться в другом каталоге, чем исходные файлы .c. (ему нужно знать, где, чтобы выяснить ИСТОЧНИКИ для шага компоновки и зависимости для компиляции / компоновки) Было бы неплохо связать это с аргументами "-fr" и "-fs" для компилятора , но я не против сделать это вручную.
  2. В файле SConstruct ниже есть несколько стандартных файлов C, все начинаются с префикса DSP2804x_. В настоящее время scons не может определить зависимости для них, потому что я предполагаю, что они ожидают, что файлы .obj будут находиться в одной и той же директории, в то время как мое использование "-fr" и "-fs" для компилятора означает эти файлы .obj в конечном итоге в том же каталоге, что и файл SConstruct. Есть лучший способ сделать это? Я предполагаю, что у меня, вероятно, должен быть шаг сборки, который копирует эти справочные файлы в локальный каталог: если я изменю их, я хочу, чтобы изменения распространялись на все проекты, которые их используют.

Вздох ....

env = Environment(
   CC = 'C:/appl/ti/ccs/3.3/C2000/cgtools/bin/cl2000',
   CCCOM = '$CC $CFLAGS $CCFLAGS $SOURCES',
   CCFLAGS = Split('-g -q -pdr -d"_DEBUG" -d"LARGE_MODEL" -ml -mt -v28'),

   LINKCOM = '$LINK $LINKFLAGS ${SOURCES.file} -o ${TARGET.base}.out',
   LINK = 'C:/appl/ti/ccs/3.3/C2000/cgtools/bin/cl2000',
   LINKFLAGS = Split('-z -q -c -ecode_start -stack0x200 -w -x'),

   ASCOM = '$CC $CFLAGS $CCFLAGS $SOURCES',
#Bizarre but true. assembly is just like compiling C.
   );


includes = {'CCFLAGS' : [
  '-i../common/headers/include',
  '-i../common/include',
  '-fr.',
  '-fs.'
  ]};
env.MergeFlags(includes);

links = {'LINKFLAGS' : [
  '-m./Debug/Example_2804xGpioToggle.map',
  '-i../common/headers/include', 
  '-iC:/appl/ti/ccs/3.3/C2000/xdais/lib',
  '-iC:/appl/ti/ccs/3.3/C2000/cgtools/lib', 
  '-lrts2800_ml.lib',
  '../common/cmd/28044_RAM_lnk.cmd',
  '../common/headers/cmd/DSP2804x_Headers_nonBIOS.cmd'
  ]};
env.MergeFlags(links);

print "CCCOM is:", env['CCCOM'], "\n", env['LINKCOM'], '\n', env['ASCOM'];

env.Program('blink_gpio', [
  'Example_2804xGpioToggle.c',
  '../common/headers/source/DSP2804x_GlobalVariableDefs.c',
  '../common/source/DSP2804x_CodeStartBranch.asm',
  '../common/source/DSP2804x_DefaultIsr.c',
  '../common/source/DSP2804x_PieCtrl.c',
  '../common/source/DSP2804x_PieVect.c',
  '../common/source/DSP2804x_SysCtrl.c'
  ]);

1 Ответ

1 голос
/ 17 сентября 2009

Я решил обе проблемы, выполнив иерархическую сборку и используя -fr=${TARGET.dir} в своих флагах компилятора.

...