2
from SCons.Script import *
5
def setup_gnu_tools(env, prefix):
7
for tool in ['gcc', 'g++', 'gnulink', 'ar', 'gas']:
10
env['CC'] = prefix+'gcc'
11
env['CXX'] = prefix+'g++'
12
env['AR'] = prefix+'ar'
13
env['AS'] = prefix+'as'
14
env['LINK'] = prefix+'gcc'
15
env['OBJCOPY'] = prefix+'objcopy'
16
env['OBJDUMP'] = prefix+'objdump'
17
env['NM'] = prefix+"nm"
18
env['RANLIB'] = prefix+"ranlib"
19
env['SIZE'] = prefix+"size"
20
env['PROGSUFFIX'] = '.elf'
21
env['GDB'] = prefix + 'gdb'
23
env['CFLAGS'] = ["-std=gnu11", "-Wredundant-decls","-Wnested-externs"]
28
"-funsigned-bitfields",
30
"-ffunction-sections",
42
"-fno-threadsafe-statics",
45
"-Woverloaded-virtual",
52
"-xassembler-with-cpp",
57
env.Append(CPPDEFINES = {})
60
device = env['DEVICE']
62
if 'defines' in device:
63
env.Append(CPPDEFINES = device['defines'])
66
env.Append(CPPDEFINES = {'F_CPU' : device['clock'] })
67
if 'linkerScript' in device and device['linkerScript'] is not None:
68
formattedLinkerScript = device['linkerScript'] % env
69
linkerscript = env.File(formattedLinkerScript).srcnode().abspath
70
linkerscript = '-T%s' % linkerscript
72
if 'includes' in device and device['includes'] is not None:
73
formattedIncludes = [os.path.abspath( include % env) for include in device['includes']]
74
env.Append(CPPPATH = formattedIncludes)
76
if 'startup' in device and device['startup'] is not None:
77
startFiles = '-nostartfiles'
81
"-Wl,-Map=${TARGET.base}.map",
87
action = '$OBJCOPY -O binary --only-section $SECTION_NAME $SOURCE $TARGET',
91
disasmBuilder = Builder(
92
action = '$OBJDUMP -h -S $SOURCE > $TARGET',
96
env.Append(BUILDERS = {
97
'Disassembly': disasmBuilder,
98
'DumpSection': binBuilder})
100
prettyPrefix = prefix
101
if prettyPrefix.endswith('-'):
102
prettyPrefix = prettyPrefix[:-1]
104
env['CCCOMSTR'] = "Compiling C (%s): $TARGET" % prettyPrefix
105
env['CXXCOMSTR'] = "Compiling C++ (%s): $TARGET" % prettyPrefix
106
env['ASCOMSTR'] = "Assembling (%s): $TARGET" % prettyPrefix
107
env['ASPPCOMSTR'] = "Assembling (%s): $TARGET" % prettyPrefix
108
env['LINKCOMSTR'] = "Linking (%s): $TARGET" % prettyPrefix
110
def generate(env, **kw):
111
prefix = env['TOOL_PREFIX']
112
setup_gnu_tools(env, prefix)
115
prefix = env['TOOL_PREFIX']
116
return env.Detect('%s-gcc' % prefix)