-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSConscript
96 lines (70 loc) · 2.99 KB
/
SConscript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# coding=utf-8
import os
import sys
from datetime import date
import copy
import binascii
Import('*')
if not 'MCUCPP_PATH' in globals():
MCUCPP_PATH = '#/../Mcucpp'
if 'device' in ARGUMENTS:
deviceName = ARGUMENTS['device']
if 'key' in ARGUMENTS:
key = binascii.unhexlify(ARGUMENTS['key'])
keyStr = ', '.join(['0x%x' % b for b in key ])
print (keyStr)
else:
raise Exception('No AES key was provided in command line')
sys.path.insert(1, Dir(MCUCPP_PATH + '/scons').srcnode().abspath)
import devices
device = copy.deepcopy(devices.SupportedDevices[deviceName])
deviceCopy = copy.deepcopy(device)
linkerScripts = {'stm32f407': r'linker_scripts\stm32_40x.ld',
'stm32f429': r'linker_scripts\stm32_40x.ld',
'stm32f100': r'linker_scripts\stm32_100xB.ld',
'stm32f103': r'linker_scripts\stm32_103xB.ld',
'stm32l471': r'linker_scripts\stm32_471.ld'}
device['linkerScript'] = linkerScripts[deviceName]
env = Environment(DEVICE=device,
toolpath=['%s/scons' % MCUCPP_PATH],
tools=['mcucpp'])
testEnv = Environment(DEVICE=deviceCopy,
toolpath=['%s/scons' % MCUCPP_PATH],
tools=['mcucpp'])
env['CUSTOM_HEX_PARAMS'] = '--only-section .isr_vectors_orig'
env.Append(CPPDEFINES={
'BUILD_YEAR': date.today().year,
'BUILD_MONTH': date.today().month,
'BUILD_DAY': date.today().day,
'AES_KEY' : keyStr},
)
env.Append(CPPDEFINES={'_DEBUG': 0})
env.Append(CPPPATH=['./tiny-AES-c'])
#env.Append(LINKFLAGS = ["-nostdlib"])
env.Append(CCFLAGS=["-Os"])
testEnv.Append(CCFLAGS=["-Os"])
bootTargets = []
def BuildBootloader(envBoot, testEnv, suffix):
bootloader = envBoot.Object('bootloader%s' % suffix, './bootloader.cpp')
protocol = envBoot.Object('boot_protocol%s' % suffix, './boot_protocol.cpp')
main = envBoot.Object('boot_main%s' % suffix, './boot_main.cpp')
crypt = envBoot.Object('boot_crypt%s' % suffix, './Encryption.cpp')
aes = envBoot.Object('boot_aes%s' % suffix, './tiny-AES-c/aes.c')
bootloader_objects = [bootloader, protocol, main, crypt, aes]
elfBootloader = envBoot.Program(
'Bootloader%s' % suffix, bootloader_objects)
bootLss = envBoot.Disassembly(elfBootloader)
bootHex = envBoot.Hex(elfBootloader)
#BootSize = envBoot.Size(elfBootloader, 'BootSize')
testAppObj = testEnv.Object('test_app_%s' % suffix, './test_app.cpp')
elfTestApp = testEnv.Program('test_app_%s' % suffix, testAppObj)
testAppLss = testEnv.Disassembly(elfTestApp)
testAppHex = testEnv.Hex(elfTestApp)
bootTargets.extend([elfBootloader, bootLss, bootHex, elfTestApp, testAppLss, testAppHex])
# if hasattr(envBoot.__class__, 'Flash') and callable(getattr(envBoot.__class__, 'Flash')):
flash = envBoot.Flash(bootHex)
protect = envBoot.Protect(bootHex)
# flash = testEnv.Flash(elfTestApp)
bootTargets.extend([flash, protect])
BuildBootloader(env, testEnv, deviceName)
env.Alias('Bootloader', bootTargets)