summaryrefslogtreecommitdiffstats
path: root/platforms/chibios/vendors/RP/RP2040.mk
blob: 1aa925cb158b1bbbdeb5ef67f7c91ad47e540e8a (plain)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
#
# Raspberry Pi RP2040 specific drivers
##############################################################################
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/vendor/$(MCU_FAMILY)/$(MCU_SERIES)

ifeq ($(strip $(WS2812_DRIVER)), vendor)
    OPT_DEFS += -DRP_DMA_REQUIRED=TRUE
endif

#
# Raspberry Pi Pico SDK Support
##############################################################################
ADEFS  += -DCRT0_VTOR_INIT=1 \
		  -DCRT0_EXTRA_CORES_NUMBER=0

CFLAGS += -DPICO_NO_FPGA_CHECK \
          -DNDEBUG

#
# Pico SDK source and header files needed by QMK and ChibiOS
##############################################################################
PICOSDKROOT   := $(TOP_DIR)/lib/pico-sdk

PICOSDKSRC     = $(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \
                 $(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \
                 $(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \
                 $(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \
                 $(PICOSDKROOT)/src/rp2_common/hardware_claim/claim.c \
                 $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/watchdog.c \
                 $(PICOSDKROOT)/src/rp2_common/hardware_xosc/xosc.c \
                 $(PICOSDKROOT)/src/rp2_common/pico_bootrom/bootrom.c

PICOSDKINC     = $(CHIBIOS)//os/various/pico_bindings/dumb/include \
                 $(PICOSDKROOT)/src/common/pico_base/include \
                 $(PICOSDKROOT)/src/rp2_common/pico_platform/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_base/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_clocks/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_claim/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_gpio/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_irq/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_pll/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_pio/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_sync/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_resets/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \
                 $(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \
                 $(PICOSDKROOT)/src/rp2040/hardware_regs/include \
                 $(PICOSDKROOT)/src/rp2040/hardware_structs/include \
                 $(PICOSDKROOT)/src/boards/include \
                 $(PICOSDKROOT)/src/rp2_common/pico_bootrom/include

PLATFORM_SRC += $(PICOSDKSRC)
EXTRAINCDIRS += $(PICOSDKINC)

PLATFORM_RP2040_PATH := $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)

PLATFORM_SRC +=	$(PLATFORM_RP2040_PATH)/stage2_bootloaders.c \
				$(PLATFORM_RP2040_PATH)/pico_sdk_shims.c

EXTRAINCDIRS += $(PLATFORM_RP2040_PATH)

#
# RP2040 optimized compiler intrinsics
##############################################################################

# Enables optimized Compiler intrinsics which are located in the RP2040
# bootrom. This needs startup code and linker script support from ChibiOS,
# which is WIP. Therefore disabled by default for now.
RP2040_INTRINSICS_ENABLED ?= no
ifeq ($(strip $(RP2040_INTRINSICS_ENABLED)), yes)
    PICOSDKINTRINSICSSRC =  $(PICOSDKROOT)/src/rp2_common/pico_float/float_aeabi.S \
                            $(PICOSDKROOT)/src/rp2_common/pico_float/float_math.c \
                            $(PICOSDKROOT)/src/rp2_common/pico_float/float_init_rom.c \
                            $(PICOSDKROOT)/src/rp2_common/pico_float/float_v1_rom_shim.S \
                            $(PICOSDKROOT)/src/rp2_common/pico_double/double_aeabi.S \
                            $(PICOSDKROOT)/src/rp2_common/pico_double/double_math.c \
                            $(PICOSDKROOT)/src/rp2_common/pico_double/double_init_rom.c \
                            $(PICOSDKROOT)/src/rp2_common/pico_double/double_v1_rom_shim.S \
                            $(PICOSDKROOT)/src/rp2_common/pico_divider/divider.S \
                            $(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S \
                            $(PICOSDKROOT)/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S \
                            $(PICOSDKROOT)/src/rp2_common/pico_malloc/pico_malloc.c \
                            $(PICOSDKROOT)/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S

    PICOSDKINTRINSICSINC =  $(PICOSDKROOT)/src/common/pico_base/include \
                            $(PICOSDKROOT)/src/rp2_common/pico_platfrom/include \
                            $(PICOSDKROOT)/src/rp2_common/pico_bootrom/include \
                            $(PICOSDKROOT)/src/rp2_common/hardware_divider/include \
                            $(PICOSDKROOT)/src/rp2_common/pico_float/include \
                            $(PICOSDKROOT)/src/rp2_common/pico_double/include \
                            $(PICOSDKROOT)/src/rp2_common/pico_malloc/include

    OPT_DEFS += -DPICO_FLOAT_SUPPORT_ROM_V1=0 -DPICO_DOUBLE_SUPPORT_ROM_V1=0

    CFLAGS += -Wl,--defsym=__StackLimit=__heap_end__
    CFLAGS += -Wl,--defsym=__unhandled_user_irq=_unhandled_exception
    CFLAGS += -Wl,--build-id=none

    # single precision floating point intrinsics
    OPT_DEFS += -DPICO_FLOAT_IN_RAM=1
    OPT_DEFS += -DPICO_FLOAT_PROPAGATE_NANS=0

    CFLAGS += -Wl,--wrap=__aeabi_fdiv
    CFLAGS += -Wl,--wrap=__aeabi_fmul
    CFLAGS += -Wl,--wrap=__aeabi_frsub
    CFLAGS += -Wl,--wrap=__aeabi_fsub
    CFLAGS += -Wl,--wrap=__aeabi_cfcmpeq
    CFLAGS += -Wl,--wrap=__aeabi_cfrcmple
    CFLAGS += -Wl,--wrap=__aeabi_cfcmple
    CFLAGS += -Wl,--wrap=__aeabi_fcmpeq
    CFLAGS += -Wl,--wrap=__aeabi_fcmplt
    CFLAGS += -Wl,--wrap=__aeabi_fcmple
    CFLAGS += -Wl,--wrap=__aeabi_fcmpge
    CFLAGS += -Wl,--wrap=__aeabi_fcmpgt
    CFLAGS += -Wl,--wrap=__aeabi_fcmpun
    CFLAGS += -Wl,--wrap=__aeabi_i2f
    CFLAGS += -Wl,--wrap=__aeabi_l2f
    CFLAGS += -Wl,--wrap=__aeabi_ui2f
    CFLAGS += -Wl,--wrap=__aeabi_ul2f
    CFLAGS += -Wl,--wrap=__aeabi_i2f
    CFLAGS += -Wl,--wrap=__aeabi_f2iz
    CFLAGS += -Wl,--wrap=__aeabi_f2lz
    CFLAGS += -Wl,--wrap=__aeabi_f2uiz
    CFLAGS += -Wl,--wrap=__aeabi_f2ulz
    CFLAGS += -Wl,--wrap=__aeabi_f2d
    CFLAGS += -Wl,--wrap=sqrtf
    CFLAGS += -Wl,--wrap=cosf
    CFLAGS += -Wl,--wrap=sinf
    CFLAGS += -Wl,--wrap=tanf
    CFLAGS += -Wl,--wrap=atan2f
    CFLAGS += -Wl,--wrap=expf
    CFLAGS += -Wl,--wrap=logf
    CFLAGS += -Wl,--wrap=ldexpf
    CFLAGS += -Wl,--wrap=copysignf
    CFLAGS += -Wl,--wrap=truncf
    CFLAGS += -Wl,--wrap=floorf
    CFLAGS += -Wl,--wrap=ceilf
    CFLAGS += -Wl,--wrap=roundf
    CFLAGS += -Wl,--wrap=sincosf
    CFLAGS += -Wl,--wrap=asinf
    CFLAGS += -Wl,--wrap=acosf
    CFLAGS += -Wl,--wrap=atanf
    CFLAGS += -Wl,--wrap=sinhf
    CFLAGS += -Wl,--wrap=coshf
    CFLAGS += -Wl,--wrap=tanhf
    CFLAGS += -Wl,--wrap=asinhf
    CFLAGS += -Wl,--wrap=acoshf
    CFLAGS += -Wl,--wrap=atanhf
    CFLAGS += -Wl,--wrap=exp2f
    CFLAGS += -Wl,--wrap=log2f
    CFLAGS += -Wl,--wrap=exp10f
    CFLAGS += -Wl,--wrap=log10f
    CFLAGS += -Wl,--wrap=powf
    CFLAGS += -Wl,--wrap=powintf
    CFLAGS += -Wl,--wrap=hypotf
    CFLAGS += -Wl,--wrap=cbrtf
    CFLAGS += -Wl,--wrap=fmodf
    CFLAGS += -Wl,--wrap=dremf
    CFLAGS += -Wl,--wrap=remainderf
    CFLAGS += -Wl,--wrap=remquof
    CFLAGS += -Wl,--wrap=expm1f
    CFLAGS += -Wl,--wrap=log1pf
    CFLAGS += -Wl,--wrap=fmaf

    # double precision floating point intrinsics
    OPT_DEFS += -DPICO_DOUBLE_IN_RAM=1
    OPT_DEFS += -DPICO_DOUBLE_PROPAGATE_NANS=0

    CFLAGS += -Wl,--wrap=__aeabi_dadd
    CFLAGS += -Wl,--wrap=__aeabi_ddiv
    CFLAGS += -Wl,--wrap=__aeabi_dmul
    CFLAGS += -Wl,--wrap=__aeabi_drsub
    CFLAGS += -Wl,--wrap=__aeabi_dsub
    CFLAGS += -Wl,--wrap=__aeabi_cdcmpeq
    CFLAGS += -Wl,--wrap=__aeabi_cdrcmple
    CFLAGS += -Wl,--wrap=__aeabi_cdcmple
    CFLAGS += -Wl,--wrap=__aeabi_dcmpeq
    CFLAGS += -Wl,--wrap=__aeabi_dcmplt
    CFLAGS += -Wl,--wrap=__aeabi_dcmple
    CFLAGS += -Wl,--wrap=__aeabi_dcmpge
    CFLAGS += -Wl,--wrap=__aeabi_dcmpgt
    CFLAGS += -Wl,--wrap=__aeabi_dcmpun
    CFLAGS += -Wl,--wrap=__aeabi_i2d
    CFLAGS += -Wl,--wrap=__aeabi_l2d
    CFLAGS += -Wl,--wrap=__aeabi_ui2d
    CFLAGS += -Wl,--wrap=__aeabi_ul2d
    CFLAGS += -Wl,--wrap=__aeabi_d2iz
    CFLAGS += -Wl,--wrap=__aeabi_d2lz
    CFLAGS += -Wl,--wrap=__aeabi_d2uiz
    CFLAGS += -Wl,--wrap=__aeabi_d2ulz
    CFLAGS += -Wl,--wrap=__aeabi_d2f
    CFLAGS += -Wl,--wrap=sqrt
    CFLAGS += -Wl,--wrap=cos
    CFLAGS += -Wl,--wrap=sin
    CFLAGS += -Wl,--wrap=tan
    CFLAGS += -Wl,--wrap=atan2
    CFLAGS += -Wl,--wrap=exp
    CFLAGS += -Wl,--wrap=log
    CFLAGS += -Wl,--wrap=ldexp
    CFLAGS += -Wl,--wrap=copysign
    CFLAGS += -Wl,--wrap=trunc
    CFLAGS += -Wl,--wrap=floor
    CFLAGS += -Wl,--wrap=ceil
    CFLAGS += -Wl,--wrap=round
    CFLAGS += -Wl,--wrap=sincos
    CFLAGS += -Wl,--wrap=asin
    CFLAGS += -Wl,--wrap=acos
    CFLAGS += -Wl,--wrap=atan
    CFLAGS += -Wl,--wrap=sinh
    CFLAGS += -Wl,--wrap=cosh
    CFLAGS += -Wl,--wrap=tanh
    CFLAGS += -Wl,--wrap=asinh
    CFLAGS += -Wl,--wrap=acosh
    CFLAGS += -Wl,--wrap=atanh
    CFLAGS += -Wl,--wrap=exp2
    CFLAGS += -Wl,--wrap=log2
    CFLAGS += -Wl,--wrap=exp10
    CFLAGS += -Wl,--wrap=log10
    CFLAGS += -Wl,--wrap=pow
    CFLAGS += -Wl,--wrap=powint
    CFLAGS += -Wl,--wrap=hypot
    CFLAGS += -Wl,--wrap=cbrt
    CFLAGS += -Wl,--wrap=fmod
    CFLAGS += -Wl,--wrap=drem
    CFLAGS += -Wl,--wrap=remainder
    CFLAGS += -Wl,--wrap=remquo
    CFLAGS += -Wl,--wrap=expm1
    CFLAGS += -Wl,--wrap=log1p
    CFLAGS += -Wl,--wrap=fma

    # bit operation intrinsics
    OPT_DEFS += -DPICO_BITS_IN_RAM=1

    CFLAGS += -Wl,--wrap=__clzsi2
    CFLAGS += -Wl,--wrap=__clzsi2
    CFLAGS += -Wl,--wrap=__clzdi2
    CFLAGS += -Wl,--wrap=__ctzsi2
    CFLAGS += -Wl,--wrap=__ctzdi2
    CFLAGS += -Wl,--wrap=__popcountsi2
    CFLAGS += -Wl,--wrap=__popcountdi2
    CFLAGS += -Wl,--wrap=__clz
    CFLAGS += -Wl,--wrap=__clzl
    CFLAGS += -Wl,--wrap=__clzsi2
    CFLAGS += -Wl,--wrap=__clzll

    # integer division intrinsics
    OPT_DEFS += -DPICO_DIVIDER_IN_RAM=1
    OPT_DEFS += -DPICO_DIVIDER_DISABLE_INTERRUPTS=1

    CFLAGS += -Wl,--wrap=__aeabi_idiv
    CFLAGS += -Wl,--wrap=__aeabi_idivmod
    CFLAGS += -Wl,--wrap=__aeabi_ldivmod
    CFLAGS += -Wl,--wrap=__aeabi_uidiv
    CFLAGS += -Wl,--wrap=__aeabi_uidivmod
    CFLAGS += -Wl,--wrap=__aeabi_uldivmod

    # 64bit integer intrinsics
    OPT_DEFS += -DPICO_INT64_OPS_IN_RAM=1

    CFLAGS += -Wl,--wrap=__aeabi_lmul

    # malloc and friends functions
    OPT_DEFS += -DPICO_USE_MALLOC_MUTEX=0
    OPT_DEFS += -DPICO_DEBUG_MALLOC=0
    OPT_DEFS ?= -DPICO_MALLOC_PANIC=0

    CFLAGS += -Wl,--wrap=malloc
    CFLAGS += -Wl,--wrap=calloc
    CFLAGS += -Wl,--wrap=free

    # memory operation intrinsics
    OPT_DEFS += -DPICO_MEM_IN_RAM=1

    CFLAGS += -Wl,--wrap=memcpy
    CFLAGS += -Wl,--wrap=memset
    CFLAGS += -Wl,--wrap=__aeabi_memcpy
    CFLAGS += -Wl,--wrap=__aeabi_memset
    CFLAGS += -Wl,--wrap=__aeabi_memcpy4
    CFLAGS += -Wl,--wrap=__aeabi_memset4
    CFLAGS += -Wl,--wrap=__aeabi_memcpy8
    CFLAGS += -Wl,--wrap=__aeabi_memset8

    PLATFORM_SRC += $(PICOSDKINTRINSICSSRC)
    EXTRAINCDIRS += $(PICOSDKINTRINSICSINC)
endif