@@ -61,7 +61,109 @@ def to_c_uint32(x):
6161 return "{" + 'U,' .join (map (str , nums )) + "U}"
6262
6363
64- def build_project (project_name , project , main , extra_flags ):
64+ common_driver_sources = [
65+ "./board/stm32h7/interrupt_handlers.c" ,
66+ "./board/stm32h7/peripherals.c" ,
67+ "./board/stm32h7/clock.c" ,
68+ "./board/stm32h7/llfdcan.c" ,
69+ "./board/stm32h7/llusb.c" ,
70+ "./board/stm32h7/llspi.c" ,
71+ "./board/stm32h7/lluart.c" ,
72+ "./board/stm32h7/lladc.c" ,
73+ "./board/drivers/gpio.c" ,
74+ "./board/drivers/registers.c" ,
75+ "./board/drivers/interrupts.c" ,
76+ "./board/drivers/timers.c" ,
77+ "./board/drivers/pwm.c" ,
78+ "./board/drivers/led.c" ,
79+ "./board/drivers/can_common.c" ,
80+ "./board/drivers/fdcan.c" ,
81+ "./board/drivers/uart.c" ,
82+ "./board/drivers/spi.c" ,
83+ "./board/drivers/usb.c" ,
84+ "./board/can_comms.c" ,
85+ ]
86+
87+ panda_extra_driver_sources = [
88+ "./board/stm32h7/board.c" ,
89+ "./board/stm32h7/llfan.c" ,
90+ "./board/stm32h7/lli2c.c" ,
91+ "./board/stm32h7/sound.c" ,
92+ "./board/boards/unused_funcs.c" ,
93+ "./board/boards/red.c" ,
94+ "./board/boards/tres.c" ,
95+ "./board/boards/cuatro.c" ,
96+ "./board/drivers/simple_watchdog.c" ,
97+ "./board/drivers/bootkick.c" ,
98+ "./board/drivers/clock_source.c" ,
99+ "./board/drivers/fan.c" ,
100+ "./board/drivers/harness.c" ,
101+ "./board/drivers/fake_siren.c" ,
102+ "./board/sys/power_saving.c" ,
103+ "./board/main_comms.c" ,
104+ ]
105+
106+ jungle_extra_driver_sources = [
107+ "./board/jungle/stm32h7/board.c" ,
108+ "./board/jungle/boards/board_v2.c" ,
109+ "./board/jungle/main_comms.c" ,
110+ ]
111+
112+ body_extra_driver_sources = [
113+ "./board/body/stm32h7/board.c" ,
114+ "./board/body/boards/board_body.c" ,
115+ "./board/body/motor_encoder.c" ,
116+ "./board/body/motor_control.c" ,
117+ "./board/body/can.c" ,
118+ "./board/body/main_comms.c" ,
119+ ]
120+
121+ bootstub_common_driver_sources = [
122+ "./board/stm32h7/interrupt_handlers.c" ,
123+ "./board/stm32h7/peripherals.c" ,
124+ "./board/stm32h7/clock.c" ,
125+ "./board/stm32h7/llflash.c" ,
126+ "./board/stm32h7/llusb.c" ,
127+ "./board/stm32h7/llspi.c" ,
128+ "./board/stm32h7/lladc.c" ,
129+ "./board/drivers/gpio.c" ,
130+ "./board/drivers/registers.c" ,
131+ "./board/drivers/interrupts.c" ,
132+ "./board/drivers/timers.c" ,
133+ "./board/drivers/pwm.c" ,
134+ "./board/drivers/led.c" ,
135+ "./board/drivers/spi.c" ,
136+ "./board/drivers/usb.c" ,
137+ ]
138+
139+ panda_extra_bootstub_driver_sources = [
140+ "./board/stm32h7/board.c" ,
141+ "./board/stm32h7/llfan.c" ,
142+ "./board/stm32h7/lli2c.c" ,
143+ "./board/stm32h7/sound.c" ,
144+ "./board/boards/unused_funcs.c" ,
145+ "./board/boards/red.c" ,
146+ "./board/boards/tres.c" ,
147+ "./board/boards/cuatro.c" ,
148+ "./board/drivers/harness.c" ,
149+ "./board/drivers/fan.c" ,
150+ "./board/drivers/fake_siren.c" ,
151+ "./board/drivers/clock_source.c" ,
152+ ]
153+
154+ jungle_extra_bootstub_driver_sources = [
155+ "./board/jungle/stm32h7/board.c" ,
156+ "./board/jungle/boards/board_v2.c" ,
157+ ]
158+
159+ body_extra_bootstub_driver_sources = [
160+ "./board/body/stm32h7/board.c" ,
161+ "./board/body/boards/board_body.c" ,
162+ "./board/body/motor_encoder.c" ,
163+ "./board/body/motor_control.c" ,
164+ ]
165+
166+ def build_project (project_name , project , main , extra_flags , extra_driver_sources = None , extra_bootstub_driver_sources = None ):
65167 project_dir = Dir (f'./board/obj/{ project_name } /' )
66168
67169 flags = project ["FLAGS" ] + extra_flags + common_flags + [
@@ -100,21 +202,58 @@ def build_project(project_name, project, main, extra_flags):
100202 )
101203
102204 startup = env .Object (project ["STARTUP_FILE" ])
205+ libc_obj = env .Object ("./board/libc.c" )
206+ crc_obj = env .Object ("./board/crc.c" )
207+ provision_obj = env .Object ("./board/provision.c" )
208+ critical_obj = env .Object ("./board/sys/critical.c" )
209+ faults_obj = env .Object ("./board/sys/faults.c" )
210+ main_globals_obj = env .Object ("./board/main_globals.c" )
211+ gitversion_obj = env .Object ("./board/obj/gitversion.c" )
212+
213+ drv_env = env .Clone ()
214+ drv_env .Append (CFLAGS = "-DDRIVER_BUILD" )
215+ early_init_obj = drv_env .Object ("./board/early_init.c" )
103216
104217 # Build bootstub
105218 bs_env = env .Clone ()
106219 bs_env .Append (CFLAGS = "-DBOOTSTUB" , ASFLAGS = "-DBOOTSTUB" , LINKFLAGS = "-DBOOTSTUB" )
220+ bs_env ['OBJPREFIX' ] = Dir (f'{ project_dir } /bs_' )
221+ bs_drv_env = bs_env .Clone ()
222+ bs_drv_env .Append (CFLAGS = "-DDRIVER_BUILD" )
223+ bs_all_driver_sources = bootstub_common_driver_sources + (extra_bootstub_driver_sources or [])
224+ bs_driver_objs = [bs_drv_env .Object (src ) for src in bs_all_driver_sources ]
107225 bs_elf = bs_env .Program (f"{ project_dir } /bootstub.elf" , [
108226 startup ,
109227 "./board/crypto/rsa.c" ,
110228 "./board/crypto/sha.c" ,
229+ libc_obj ,
230+ crc_obj ,
231+ provision_obj ,
232+ critical_obj ,
233+ faults_obj ,
234+ gitversion_obj ,
235+ bs_env .Object ("./board/bootstub_globals.c" ),
236+ bs_drv_env .Object ("./board/early_init.c" ),
237+ bs_drv_env .Object ("./board/flasher.c" ),
238+ ] + bs_driver_objs + [
111239 "./board/bootstub.c" ,
112240 ])
113241 bs_env .Objcopy (f"./board/obj/bootstub.{ project_name } .bin" , bs_elf )
114242
115243 # Build + sign main (aka app)
244+ driver_sources = common_driver_sources + (extra_driver_sources or [])
245+ driver_objs = [drv_env .Object (src ) for src in driver_sources ]
116246 main_elf = env .Program (f"{ project_dir } /main.elf" , [
117247 startup ,
248+ libc_obj ,
249+ crc_obj ,
250+ provision_obj ,
251+ critical_obj ,
252+ faults_obj ,
253+ main_globals_obj ,
254+ gitversion_obj ,
255+ early_init_obj ,
256+ ] + driver_objs + [
118257 main
119258 ], LINKFLAGS = [f"-Wl,--section-start,.isr_vector={ project ['APP_START_ADDRESS' ]} " ] + flags )
120259 main_bin = env .Objcopy (f"{ project_dir } /main.bin" , main_elf )
@@ -141,6 +280,10 @@ base_project_h7 = {
141280with open ("board/obj/gitversion.h" , "w" ) as f :
142281 version = get_version (BUILDER , BUILD_TYPE )
143282 f .write (f'extern const uint8_t gitversion[{ len (version )+ 1 } ];\n ' )
283+
284+ with open ("board/obj/gitversion.c" , "w" ) as f :
285+ version = get_version (BUILDER , BUILD_TYPE )
286+ f .write (f'#include <stdint.h>\n ' )
144287 f .write (f'const uint8_t gitversion[{ len (version )+ 1 } ] = "{ version } ";\n ' )
145288
146289with open ("board/obj/version" , "w" ) as f :
@@ -160,16 +303,22 @@ common_flags += [f"-DHEALTH_PACKET_VERSION=0x{hh:08X}U", f"-DCAN_PACKET_VERSION_
160303 f"-DJUNGLE_HEALTH_PACKET_VERSION=0x{ jh :08X} U" ]
161304
162305# panda fw
163- build_project ("panda_h7" , base_project_h7 , "./board/main.c" , [])
306+ build_project ("panda_h7" , base_project_h7 , "./board/main.c" , [],
307+ extra_driver_sources = panda_extra_driver_sources ,
308+ extra_bootstub_driver_sources = panda_extra_bootstub_driver_sources )
164309
165310# panda jungle fw
166311flags = [
167312 "-DPANDA_JUNGLE" ,
168313]
169- build_project ("panda_jungle_h7" , base_project_h7 , "./board/jungle/main.c" , flags )
314+ build_project ("panda_jungle_h7" , base_project_h7 , "./board/jungle/main.c" , flags ,
315+ extra_driver_sources = jungle_extra_driver_sources ,
316+ extra_bootstub_driver_sources = jungle_extra_bootstub_driver_sources )
170317
171318# body fw
172- build_project ("body_h7" , base_project_h7 , "./board/body/main.c" , ["-DPANDA_BODY" ])
319+ build_project ("body_h7" , base_project_h7 , "./board/body/main.c" , ["-DPANDA_BODY" ],
320+ extra_driver_sources = body_extra_driver_sources ,
321+ extra_bootstub_driver_sources = body_extra_bootstub_driver_sources )
173322
174323# test files
175324SConscript ('tests/libpanda/SConscript' )
0 commit comments