Pergunta

Eu estou usando um compilador para TI DSPs, de modo que o CC padrão e ferramentas de link e AS não fazem sentido. Abaixo está um arquivo SConstruct que funciona para mim, eu estou querendo saber se alguém tem sugestões para torná-lo melhor. Alguns problemas:

  1. Eu gostaria de alguma forma dizer que meus arquivos obj deve ir em um diretório diferente do que os arquivos fonte .c. (Ele precisa saber onde, a fim de descobrir as fontes para a etapa de ligação, e as dependências de compilação / vinculando) Seria bom para amarrar este com o "-FR" e "fs" argumentos para o compilador , mas eu não me importo de fazer isso manualmente.
  2. Existem alguns arquivos estoque C no arquivo SConstruct abaixo, todos começam com um prefixo de DSP2804x_. Agora scons não consegue descobrir as dependências para estas, porque eu acho que ele está esperando os ficheiros.OBJ a viver no mesmo diretório, enquanto o meu uso de "-FR" e "fs" para os meios de compilador essas ficheiros.OBJ acabar no mesmo diretório que o arquivo SConstruct. Existe uma maneira melhor de fazer isso? Eu estou supondo que eu provavelmente deve ter uma etapa de compilação que copia esses arquivos de referência para um diretório local:. Se eu mudá-los, quero que as alterações se propaguem para todos os projetos que os utilizam

suspiro ....

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'
  ]);
Foi útil?

Solução

Eu resolvi ambos os problemas, fazendo um hierárquica construção e usando -fr=${TARGET.dir} em minhas bandeiras do compilador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top