bootloader: Import bootloader-final.ld.
[gps-watch.git] / SConscript.target
1 import os
2
3 Import('env')
4 env = env.Clone()
5
6 host = os.environ.get('HOST', 'arm-none-eabi-')
7
8 d = {
9     'CC': 'gcc',
10     'LD': 'ld',
11     'AR': 'ar',
12     'RANLIB': 'ranlib',
13     'OBJCOPY': 'objcopy',
14 }
15
16 for k, v in d.items():
17     env[k] = host + v
18
19 env.Append(CCFLAGS = [
20     '-mcpu=cortex-m0plus',
21     '-mthumb',
22     '-ffunction-sections',
23     '-fdata-sections',
24     '-Os',
25 ])
26
27 env.Append(LINKFLAGS = [
28     '-mcpu=cortex-m0plus',
29     '-mthumb',
30     '-specs=nano.specs',
31     '-specs=nosys.specs',
32     '-nostdlib',
33     '-nostartfiles',
34 ])
35
36 env.Append(RUSTCFLAGS = [
37     '-C', 'opt-level=s',
38     '--target=thumbv6m-none-eabi',
39     '-L', '$LIBPATH',
40 ])
41
42 env.Append(LINKFLAGS = [
43     '-Wl,--gc-sections'
44 ])
45
46 SConscript('SConscript.libcommon', exports='env', duplicate=0)
47
48 libbootloader_source_files = [
49     'src/bootloader/main.rs', # Must be listed first (see below).
50     'src/bootloader/bootloader.rs',
51     'src/bootloader/flash.rs',
52 ]
53
54 start_o = env.Object('src/bootloader/start.c')
55
56 for s in ['intermediate', 'final']:
57     libbootloader_env = env.Clone()
58
59     libbootloader_env.Append(RUSTCFLAGS = [
60         '--cfg',
61         'bootloader_type=\\"{}\\"'.format(s)
62     ])
63
64     libbootloader = libbootloader_env.Rustc('libbootloader-{}.a'.format(s),
65                                             libbootloader_source_files[0])
66
67     for f in libbootloader_source_files:
68         Depends(libbootloader, f)
69
70     Depends(libbootloader, 'libcommon.rlib')
71     Depends(libbootloader, 'libcommon.a')
72
73     bootloader_env = env.Clone()
74
75     bootloader_env.Append(LINKFLAGS = [
76         '-Tsrc/bootloader/bootloader-{}.ld'.format(s),
77     ])
78
79     bootloader_elf = \
80         bootloader_env.Program('gps-watch-bootloader-{}.elf'.format(s),
81                                start_o, LIBS = ['bootloader-{}'.format(s), 'common'])
82
83     bootloader_bin = bootloader_env.Objcopy(bootloader_elf)
84
85     Default(bootloader_bin)