Add README.
[gps-watch.git] / SConstruct
1 import SCons
2 import os
3
4 root_env = Environment(ENV = {'PATH': os.environ['PATH']})
5
6 # Beautify output.
7 if ARGUMENTS.get('V', '0') != '1':
8     root_env['CCCOMSTR'] = '    CC $TARGET'
9     root_env['RUSTCCOMSTR'] = '    RUSTC $TARGET'
10     root_env['LINKCOMSTR'] = '    LINK $TARGET'
11     root_env['ARCOMSTR'] = '    AR $TARGET'
12     root_env['RANLIBCOMSTR'] = '    RANLIB $TARGET'
13     root_env['OBJCOPYCOMSTR'] = '    OBJCOPY $TARGET'
14     root_env['FRMCOMSTR'] = '    FRM $TARGET'
15
16 # Make colored output of e.g. gcc work.
17 root_env['ENV']['TERM'] = os.environ.get('TERM')
18
19 root_env.Append(CCFLAGS = [
20     '-std=gnu99',
21     '-Wall',
22     '-Wextra',
23     '-Wwrite-strings',
24 ])
25
26 root_env.Append(RUSTC = 'rustc')
27
28 root_env.Append(BUILDERS = { 'Rustc': Builder(
29     action=Action('$RUSTC $RUSTCFLAGS -o $TARGET $SOURCE', '$RUSTCCOMSTR'))})
30
31 root_env.Append(BUILDERS = { 'Objcopy': Builder(
32     action=Action('$OBJCOPY -O binary $OBJCOPYFLAGS $SOURCES $TARGET', '$OBJCOPYCOMSTR'),
33     suffix='.bin',
34     src_suffix='.elf')})
35
36 def xor8(buf):
37     import functools
38
39     return functools.reduce(lambda x, y: (x & 0xff) ^ (y & 0xff), buf)
40
41 def build_frm(target, source, env):
42     with open(str(source[0]), 'rb') as f_in:
43         buf = f_in.read()
44
45         with open(str(target[0]), 'wb') as f_out:
46             f_out.write(buf)
47             f_out.write(bytearray([xor8(buf)]))
48
49     return 0
50
51 root_env.Append(BUILDERS = { 'Frm': Builder(
52     action=Action(build_frm, '$FRMCOMSTR'),
53     suffix='.frm',
54     src_suffix='.bin')})
55
56 env = root_env.Clone()
57 env['variant_dir'] = 'build-target'
58 env['LIBPATH'] = env['variant_dir']
59 SConscript('SConscript.target', exports='env', variant_dir=env['variant_dir'], duplicate=0)
60
61 env = root_env.Clone()
62 env['variant_dir'] = 'build-test'
63 env['LIBPATH'] = env['variant_dir']
64 SConscript('SConscript.test', exports='env', variant_dir=env['variant_dir'], duplicate=0)