Моя функция для создания environment под IAR
Код
from os.path import join
import os
import sys
import string
sys.path = [ join(sys.prefix, 'Lib', 'site-packages', 'scons-0.97.0d20071212')] + sys.path
from SCons.Environment import Environment
def EnvironmentIAR (iarDir, linkerDefs, numOfAddTargets = 0):
env = Environment(ENV = os.environ)
PROC_DIR = iarDir + r'/avr'
LINKER_DIR = iarDir + r'/common/bin'
env['OBJSUFFIX'] = '.r90'
env['PROGSUFFIX'] = '.hex'
env['PROC_DIR'] = PROC_DIR
env['CPPPATH'] = ['$PROC_DIR/INC', '$PROC_DIR/INC/$LIB']
env['CC_DIR'] = '"' + PROC_DIR + '"'
env['CC'] = '"' + PROC_DIR + '/bin/iccavr.exe"'
env['CXXCOM'] = '$CXX $SOURCES $CCCOMFLAGS $CXXFLAGS'
env['CCCOM'] = env['CXXCOM']
env['LIBOBJFILE'] = '$CC_DIR\LIB\$LIB\$($LIBFILE$).h'
env['CXXFLAGS'] = r"--silent --cpu=$CPU -m$MEMORY_MODEL --no_wrap_diagnostics -y" + \
" -e --debug --initializers_in_flash -$OPT --eeprom_size $EEPROM_SIZE -DENABLE_BIT_DEFINITIONS" + \
" $LANGUAGE --dlib_config $LIBOBJFILE -o $TARGET $OBJLIST $CXXADDFLAGS"
env['CCCOMFLAGS'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS'
env['INCPREFIX'] = '-I '
env['CCCOMSTR'] = 'Compiling $SOURCE -> $TARGET ...'
env['CXXCOMSTR'] = env['CCCOMSTR']
env['LINK'] = '"' + LINKER_DIR + '\\xlink.exe"'
env['LINK_LIB'] = '"%s\\LIB\\$LIB\\$($LIBFILE$).r90"' % (PROC_DIR)
targets = '-o $TARGET -F$OUT1_FORMAT '
for i in xrange(numOfAddTargets):
targets += '-O$OUT%d_FORMAT=$($TARGET$)$OUT%d_EXT' % (i+2, i+2)
env['_TARGETS'] = targets
env['LIST'] = '-l $($TARGET$).html -x$LIST_FORMAT'
env['INCLUDE'] = ''
segments = ''
for s in string.split(linkerDefs):
if s[0] == '@':
segments += '-f "%s\\src\\template\\%s" ' % (PROC_DIR, s[1:])
else:
segments += s + ' '
env['SEGMENTS'] = segments
env['PROG_START'] = '-s __program_start'
env['LINKCOM'] = '$LINK $SOURCES $LINK_LIB $_TARGETS $LIST $INCLUDE $SEGMENTS $PROG_START'
env['LINKCOMSTR'] = "Linking $TARGET"
return env
linkerDefs - это строка, примерно такая
linker_defs128 = '''
@cfgm128.xcl
-D_..X_HEAP_SIZE=0
-D_..X_TINY_HEAP_SIZE=0
-D_..X_NEAR_HEAP_SIZE=0
-D_..X_FAR_HEAP_SIZE=0
-D_..X_HUGE_HEAP_SIZE=0
-D_..X_CSTACK_SIZE=$CSTACK
-D_..X_RSTACK_SIZE=$RSTACK
@cfg3s.xcl
-D_..X_FLASH_BASE=_..X_INTVEC_SIZE
-H1895
-h(CODE)0-(_..X_INTVEC_SIZE-1)
-D_..X_EXT_SRAM_BASE=_..X_SRAM_END
-D_..X_EXT_SRAM_SIZE=0
-D_..X_EXT_ROM_BASE=_..X_SRAM_END
-D_..X_EXT_ROM_SIZE=0
-D_..X_EXT_NV_BASE=_..X_SRAM_END
-D_..X_EXT_NV_SIZE=0
-D_..X_CSTACK_BASE=_..X_SRAM_BASE
-D_..X_CSTACK_END=_..X_SRAM_END
-D_..X_RSTACK_BASE=_..X_SRAM_BASE
-D_..X_RSTACK_END=_..X_SRAM_END
'''
Вместо @ подставится путь к файлу
Юзать примерно так:
Код
env = EnvironmentIAR(os.environ['IAR'], ut.linker_defs128, 1)
# директивы компилятора
env['CPU'] = 'm128'
env['MEMORY_MODEL'] = 'small'
env['OPT'] = 's9'
env['EEPROM_SIZE'] = 4096
env['LANGUAGE'] = '--eec++'
env['OUT1_FORMAT'] = 'intel-extended'
env['OUT2_FORMAT'] = 'ubrof8'
env['OUT2_EXT'] = '.dbg'
env['LIST_FORMAT'] = 'msniohe'
env['CSTACK'] = 150
env['RSTACK'] = 'BE'
env['OBJLIST'] = "-lCN build\\list\\"
env['LIB'] = 'dlib'
env['LIBFILE'] = 'dlAVR-3s-ec_mul-n'
env['DEF_VAR'] = defVar
env['CXXADDFLAGS'] = '--preinclude sources/preinc103mk1.h'