1
- from os .path import isdir , join
1
+ from os .path import isdir , isfile , join
2
2
from os import makedirs
3
3
from pathlib import Path
4
4
import sys
11
11
FRAMEWORK_DIR = platform .get_package_dir ("framework-picosdk" )
12
12
assert isdir (FRAMEWORK_DIR )
13
13
14
- # hardcoded for now
15
- rp2_variant_dir = join (FRAMEWORK_DIR , "src" , "rp2040" )
16
- # todo: try to better guess the board header name based from the board definition name
17
- # instead of requiring them to explicitly include it
18
- rp2_board_header = board .get ("build.picosdk.board_header" , "pico.h" )
14
+ mcu = "rp2350" if board .get ('build.mcu' ) == "rp2350" else "rp2040"
15
+ rp2_variant_dir = join (FRAMEWORK_DIR , "src" , mcu )
16
+ header = "%s.h" % board .get ("build.variant" )
17
+ # try to find the board header in the common directory
18
+ if isfile (join (FRAMEWORK_DIR , "src" , "boards" , "include" , "boards" , header )):
19
+ rp2_board_header = board .get ("build.picosdk.board_header" , header )
20
+ else :
21
+ rp2_board_header = board .get ("build.picosdk.board_header" , "pico.h" )
19
22
20
23
# include basic settings
21
24
env .SConscript ("_bare.py" )
@@ -32,7 +35,6 @@ def gen_config_autogen(target_base_dir, board_hdr):
32
35
env .Exit (- 1 )
33
36
autogen_content_paths = [
34
37
join (FRAMEWORK_DIR , "src" , "boards" , "include" , "boards" , board_hdr ),
35
- # only for ARM based RP2040
36
38
join (FRAMEWORK_DIR , "src" , "rp2_common" , "cmsis" , "include" , "cmsis" , "rename_exceptions.h" )
37
39
]
38
40
# read content
@@ -55,11 +57,12 @@ def gen_config_autogen(target_base_dir, board_hdr):
55
57
#CFLAGS=sorted(list(cflags - ccflags)),
56
58
#CCFLAGS=sorted(list(ccflags)),
57
59
CPPDEFINES = [
58
- ("PICO_RP2040" , 1 ),
59
- ("PICO_RP2350" , 0 ),
60
+ # BUG: defining PICO_RP2040 in any way will force compilation for 2040 only.
61
+ # FIX: add RP2350 only if board requested was 2350
62
+ ("PICO_RP2350" if board .get ('build.mcu' ) == "rp2350" else "PICO_RP2040" , 1 ),
60
63
("PICO_RISCV" , 0 ),
61
64
("PICO_ARM" , 1 ),
62
- ("PICO_CMSIS_DEVICE" , "\" RP2040 \" " ),
65
+ ("PICO_CMSIS_DEVICE" , "\" %s \" " % mcu . upper () ),
63
66
("PICO_DEFAULT_FLASH_SIZE_BYTES" , 2 * 1024 * 1024 ),
64
67
# default SDK defines for on-hardware build
65
68
("PICO_ON_DEVICE" , "1" ),
@@ -98,8 +101,9 @@ def gen_config_autogen(target_base_dir, board_hdr):
98
101
join (rp2_variant_dir , "boot_stage2" , "include" ),
99
102
100
103
# common for rp2040, rp2350
101
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_base " , "include" ),
104
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "boot_bootrom_headers " , "include" ),
102
105
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_adc" , "include" ),
106
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_base" , "include" ),
103
107
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_boot_lock" , "include" ),
104
108
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_clocks" , "include" ),
105
109
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_divider" , "include" ),
@@ -116,41 +120,41 @@ def gen_config_autogen(target_base_dir, board_hdr):
116
120
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_resets" , "include" ),
117
121
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_rtc" , "include" ),
118
122
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_spi" , "include" ),
119
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_sync" , "include" ),
120
123
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_sync_spin_lock" , "include" ),
124
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_sync" , "include" ),
121
125
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_ticks" , "include" ),
122
126
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_timer" , "include" ),
123
127
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_uart" , "include" ),
124
128
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_vreg" , "include" ),
125
129
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_watchdog" , "include" ),
126
130
join (FRAMEWORK_DIR , "src" , "rp2_common" , "hardware_xosc" , "include" ),
127
131
128
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_bootrom" , "include" ),
129
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_platform_compiler" , "include" ),
130
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_platform_sections" , "include" ),
131
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_platform_panic" , "include" ),
132
132
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_aon_timer" , "include" ),
133
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_bootsel_via_double_reset" , "include" ),
134
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_multicore" , "include" ),
135
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_unique_id" , "include" ),
136
133
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_atomic" , "include" ),
137
134
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_bit_ops" , "include" ),
135
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_bootrom" , "include" ),
136
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_bootsel_via_double_reset" , "include" ),
138
137
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_divider" , "include" ),
139
138
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_double" , "include" ),
140
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_int64_ops" , "include" ),
141
139
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_flash" , "include" ),
142
140
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_float" , "include" ),
143
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_mem_ops " , "include" ),
141
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_int64_ops " , "include" ),
144
142
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_malloc" , "include" ),
143
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_mem_ops" , "include" ),
144
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_multicore" , "include" ),
145
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_platform_compiler" , "include" ),
146
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_platform_panic" , "include" ),
147
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_platform_sections" , "include" ),
145
148
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_printf" , "include" ),
146
149
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_rand" , "include" ),
150
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_stdio_rtt" , "include" ),
147
151
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_stdio_semihosting" , "include" ),
148
152
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_stdio_uart" , "include" ),
149
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_stdio_rtt " , "include" ),
153
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_unique_id " , "include" ),
150
154
# CMSIS only for ARM
151
155
join (FRAMEWORK_DIR , "src" , "rp2_common" , "cmsis" , "include" ),
152
156
join (FRAMEWORK_DIR , "src" , "rp2_common" , "cmsis" , "stub" , "CMSIS" , "Core" , "Include" ),
153
- join (FRAMEWORK_DIR , "src" , "rp2_common" , "cmsis" , "stub" , "CMSIS" , "Device" , "RP2040" , "Include" ),
157
+ join (FRAMEWORK_DIR , "src" , "rp2_common" , "cmsis" , "stub" , "CMSIS" , "Device" , mcu . upper () , "Include" ),
154
158
155
159
join (FRAMEWORK_DIR , "src" , "rp2_common" , "tinyusb" , "include" ),
156
160
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_stdio_usb" , "include" ),
@@ -177,7 +181,7 @@ def gen_config_autogen(target_base_dir, board_hdr):
177
181
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_stdio" , "include" ),
178
182
join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_stdlib" , "include" ),
179
183
180
- join (FRAMEWORK_DIR , "src" , "rp2040" , "boot_stage2" , "asminclude" ),
184
+ join (FRAMEWORK_DIR , "src" , mcu , "boot_stage2" , "asminclude" ),
181
185
],
182
186
#CXXFLAGS=sorted(list(cxxflags - ccflags)),
183
187
LIBPATH = [
@@ -205,6 +209,9 @@ def gen_config_autogen(target_base_dir, board_hdr):
205
209
pass
206
210
if not "PIO_NO_STDIO_UART" in cpp_defines :
207
211
flags .append (("PICO_STDIO_UART" , 1 ))
212
+ # SDK C code specifies it as LIB_... so do that too
213
+ flags .append (("LIB_PICO_STDIO" , 1 ))
214
+ flags .append (("LIB_PICO_STDIO_UART" , 1 ))
208
215
if not "PIO_NO_MULTICORE" in cpp_defines :
209
216
flags .append (("PICO_MULTICORE_ENABLED" , 1 ))
210
217
# check selected double implementation
@@ -266,7 +273,7 @@ def configure_printf_impl():
266
273
flash_region = "FLASH(rx) : ORIGIN = 0x10000000, LENGTH = %s\n " % str (board .get ("upload.maximum_size" ))
267
274
Path (join (genned_dir , "pico_flash_region.ld" )).write_text (flash_region )
268
275
269
- env .Replace (LDSCRIPT_PATH = join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_crt0" , "rp2040" , "memmap_default.ld" ))
276
+ env .Replace (LDSCRIPT_PATH = join (FRAMEWORK_DIR , "src" , "rp2_common" , "pico_crt0" , mcu , "memmap_default.ld" ))
270
277
271
278
# build base files
272
279
# system_RP2040.c
@@ -277,7 +284,7 @@ def configure_printf_impl():
277
284
278
285
gen_boot2_cmd = env .Command (
279
286
join ("$BUILD_DIR" , "boot2.S" ), # $TARGET
280
- join (FRAMEWORK_DIR , "src" , "rp2040" , "boot_stage2" , "compile_time_choice.S" ), # $SOURCE
287
+ join (FRAMEWORK_DIR , "src" , mcu , "boot_stage2" , "compile_time_choice.S" ), # $SOURCE
281
288
env .VerboseAction (" " .join ([
282
289
"$CC" ,
283
290
"$ASPPFLAGS" ,
@@ -286,8 +293,8 @@ def configure_printf_impl():
286
293
]
287
294
+ ["-D%s=%s" % (flag [0 ], str (flag [1 ])) for flag in env ["CPPDEFINES" ]]
288
295
+ [
289
- "-I\" %s\" " % join (FRAMEWORK_DIR , "src" , "rp2040" , "boot_stage2" , "asminclude" ),
290
- "-I\" %s\" " % join (FRAMEWORK_DIR , "src" , "rp2040" , "boot_stage2" , "include" ),
296
+ "-I\" %s\" " % join (FRAMEWORK_DIR , "src" , mcu , "boot_stage2" , "asminclude" ),
297
+ "-I\" %s\" " % join (FRAMEWORK_DIR , "src" , mcu , "boot_stage2" , "include" ),
291
298
"-I\" %s\" " % join (FRAMEWORK_DIR , "src" , "common" , "pico_base_headers" , "include" ),
292
299
"-I\" %s\" " % join (FRAMEWORK_DIR , "generated" ),
293
300
"-I" , "$PROJECT_BUILD_DIR/$PIOENV/generated" ,
@@ -301,7 +308,7 @@ def configure_printf_impl():
301
308
"-nostdlib" ,
302
309
"--specs=nosys.specs" ,
303
310
"-nostartfiles" ,
304
- "-Wl,-T,\" %s\" " % join (FRAMEWORK_DIR , "src" , "rp2040" , "boot_stage2" , "boot_stage2.ld" ),
311
+ "-Wl,-T,\" %s\" " % join (FRAMEWORK_DIR , "src" , mcu , "boot_stage2" , "boot_stage2.ld" ),
305
312
"$SOURCE"
306
313
] + [ " && " ] + [
307
314
"$OBJCOPY" ,
@@ -310,7 +317,7 @@ def configure_printf_impl():
310
317
join ("$BUILD_DIR" , "boot2.bin" )
311
318
] + [ " && " ] + [
312
319
"$PYTHONEXE" ,
313
- join (FRAMEWORK_DIR , "src" , "rp2040" , "boot_stage2" , "pad_checksum" ),
320
+ join (FRAMEWORK_DIR , "src" , mcu , "boot_stage2" , "pad_checksum" ),
314
321
"-s 0xffffffff" ,
315
322
join ("$BUILD_DIR" , "boot2.bin" ),
316
323
join ("$BUILD_DIR" , "boot2.S" ),
@@ -320,21 +327,26 @@ def configure_printf_impl():
320
327
321
328
# default compontents
322
329
default_common_rp2_components = [
323
- ("pico_runtime_init" , "+<*>" ),
324
330
("hardware_adc" , "+<*>" ),
325
331
("hardware_boot_lock" , "+<*>" ),
326
332
("hardware_clocks" , "+<*>" ),
327
- ("hardware_xosc" , "+<*>" ),
328
- ("hardware_pll" , "+<*>" ),
329
- ("hardware_ticks" , "+<*>" ),
330
- ("pico_clib_interface" , "-<*> +<newlib_interface.c>" ),
331
333
("hardware_gpio" , "+<*>" ),
332
- ("hardware_timer" , "+<*>" ),
333
334
("hardware_irq" , "+<*>" ),
335
+ ("hardware_pll" , "+<*>" ),
334
336
("hardware_sync" , "+<*>" ),
335
337
("hardware_sync_spin_lock" , "+<*>" ),
338
+ ("hardware_ticks" , "+<*>" ),
339
+ ("hardware_timer" , "+<*>" ),
340
+ ("hardware_uart" , "+<*>" ),
341
+ ("hardware_xosc" , "+<*>" ),
342
+ ("pico_bootrom" , "+<*>" ),
343
+ ("pico_clib_interface" , "-<*> +<newlib_interface.c>" ),
336
344
("pico_platform_panic" , "+<*>" ),
337
345
("pico_runtime" , "+<*>" ),
346
+ ("pico_runtime_init" , "+<*>" ),
347
+ ("pico_stdlib" , "+<*>" ),
348
+ ("pico_stdio" , "+<*>" ),
349
+ ("pico_stdio_uart" , "+<*>" ),
338
350
]
339
351
340
352
for component , src_filter in default_common_rp2_components :
@@ -362,4 +374,4 @@ def configure_printf_impl():
362
374
join ("$BUILD_DIR" , "PicoSDKCommon%s" % component ),
363
375
join (FRAMEWORK_DIR , "src" , "common" , component ),
364
376
src_filter
365
- )
377
+ )
0 commit comments