|
|
- #
- # 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
|