summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/atmel-samd/Makefile292
-rw-r--r--ports/atmel-samd/mpconfigport.h6
-rw-r--r--ports/circuitpy-common/circuitpy_defns.mk346
-rw-r--r--ports/circuitpy-common/circuitpy_rules.mk48
-rw-r--r--ports/circuitpy-common/mpconfig_circuitpy.h8
-rw-r--r--ports/circuitpy-common/mpconfig_circuitpy.mk11
-rwxr-xr-xports/nrf/Makefile309
-rw-r--r--ports/nrf/bluetooth/ble_drv.c3
-rw-r--r--ports/nrf/bluetooth/ble_drv.h2
-rw-r--r--ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk1
-rw-r--r--ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk1
-rw-r--r--ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk1
-rw-r--r--ports/nrf/boards/particle_argon/mpconfigboard.mk1
-rw-r--r--ports/nrf/boards/particle_boron/mpconfigboard.mk1
-rw-r--r--ports/nrf/boards/particle_xenon/mpconfigboard.mk1
-rw-r--r--ports/nrf/boards/pca10056/mpconfigboard.mk1
-rw-r--r--ports/nrf/boards/pca10059/mpconfigboard.mk1
-rw-r--r--ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk7
-rw-r--r--ports/nrf/common-hal/neopixel_write/__init__.c2
-rw-r--r--ports/nrf/common-hal/pulseio/PWMOut.c6
-rw-r--r--ports/nrf/common-hal/pulseio/PulseIn.c4
-rw-r--r--ports/nrf/mpconfigport.h211
-rw-r--r--ports/nrf/mpconfigport.mk17
-rw-r--r--ports/nrf/supervisor/internal_flash.c2
-rw-r--r--shared-bindings/bleio/Address.c4
-rw-r--r--shared-bindings/bleio/ScanEntry.c2
-rw-r--r--shared-bindings/bleio/UUID.c2
27 files changed, 587 insertions, 703 deletions
diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile
index 5a43468ee..6cd605069 100644
--- a/ports/atmel-samd/Makefile
+++ b/ports/atmel-samd/Makefile
@@ -40,7 +40,7 @@ include boards/$(BOARD)/mpconfigboard.mk
# Port-specific
include mpconfigport.mk
# CircuitPython-specific
-include ../circuitpy-common/mpconfig_circuitpy.mk
+include $(TOP)/ports/circuitpy-common/mpconfig_circuitpy.mk
# qstr definitions (must come before including py.mk)
QSTR_DEFS = qstrdefsport.h
@@ -50,6 +50,9 @@ include $(TOP)/py/py.mk
include $(TOP)/supervisor/supervisor.mk
+# Include make rules and variables common across CircuitPython builds.
+include $(TOP)/ports/circuitpy-common/circuitpy_defns.mk
+
CROSS_COMPILE = arm-none-eabi-
HAL_DIR=hal/$(MCU_SERIES)
@@ -79,36 +82,6 @@ INC += -I. \
-I../../supervisor/shared/usb \
-I$(BUILD)
-BASE_CFLAGS = \
- -fsingle-precision-constant \
- -fno-strict-aliasing \
- -Wdouble-promotion \
- -Wno-endif-labels \
- -Wstrict-prototypes \
- -Werror-implicit-function-declaration \
- -Wfloat-equal \
- -Wundef \
- -Wshadow \
- -Wwrite-strings \
- -Wsign-compare \
- -Wmissing-format-attribute \
- -Wno-deprecated-declarations \
- -Wnested-externs \
- -Wunreachable-code \
- -Wcast-align \
- -Wno-error=lto-type-mismatch \
- -D__$(CHIP_VARIANT)__ \
- -ffunction-sections \
- -fdata-sections \
- -fshort-enums \
- -DCIRCUITPY_SOFTWARE_SAFE_MODE=0x0ADABEEF \
- -DCIRCUITPY_CANARY_WORD=0xADAF00 \
- -DCIRCUITPY_SAFE_RESTART_WORD=0xDEADBEEF \
- --param max-inline-insns-single=500
-
-# Use these flags to debug build times and header includes.
-# -ftime-report
-# -H
# NDEBUG disables assert() statements. This reduces code size pretty dramatically, per tannewt.
@@ -169,22 +142,7 @@ CFLAGS += \
-DSAMD51
endif
-ifneq ($(FROZEN_DIR),)
-# To use frozen source modules, put your .py files in a subdirectory (eg scripts/)
-# and then invoke make with FROZEN_DIR=scripts (be sure to build from scratch).
-CFLAGS += -DMICROPY_MODULE_FROZEN_STR
-CFLAGS += -Wno-error=lto-type-mismatch
-endif
-
-# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
-# then invoke make with FROZEN_MPY_DIR=frozen or FROZEN_MPY_DIRS="dir1 dir2"
-# (be sure to build from scratch).
-ifneq ($(FROZEN_MPY_DIRS),)
-CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
-CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
-CFLAGS += -Wno-error=lto-type-mismatch
-endif
LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
LIBS := -lgcc -lc
@@ -194,20 +152,6 @@ ifndef INTERNAL_LIBM
LIBS += -lm
endif
-# Propagate longint choice from .mk to C. There's no easy string comparison
-# in cpp coniditionals, so we #define separate names for each.
-ifeq ($(LONGINT_IMPL),NONE)
-CFLAGS += -DLONGINT_IMPL_NONE
-endif
-
-ifeq ($(LONGINT_IMPL),MPZ)
-CFLAGS += -DLONGINT_IMPL_MPZ
-endif
-
-ifeq ($(LONGINT_IMPL),LONGLONG)
-CFLAGS += -DLONGINT_IMPL_LONGLONG
-endif
-
ifeq ($(CHIP_FAMILY), samd21)
LDFLAGS += -mthumb -mcpu=cortex-m0plus -Lasf/thirdparty/CMSIS/Lib/GCC/
BOOTLOADER_SIZE := 0x2000
@@ -302,6 +246,7 @@ SRC_C = \
supervisor/shared/memory.c \
tick.c \
+
ifeq ($(CIRCUITPY_NETWORK),1)
CFLAGS += -DMICROPY_PY_NETWORK=1
@@ -322,231 +267,6 @@ SRC_MOD += $(addprefix $(WIZNET5K_DIR)/,\
endif # MICROPY_PY_WIZNET5K
endif # CIRCUITPY_NETWORK
-ifeq ($(CIRCUITPY_ANALOGIO),1)
-SRC_PATTERNS += analogio/%
-endif
-ifeq ($(CIRCUITPY_AUDIOBUSIO),1)
-SRC_PATTERNS += audiobusio/%
-endif
-ifeq ($(CIRCUITPY_AUDIOIO),1)
-SRC_PATTERNS += audioio/%
-endif
-ifeq ($(CIRCUITPY_BITBANGIO),1)
-SRC_PATTERNS += bitbangio/%
-endif
-ifeq ($(CIRCUITPY_BOARD),1)
-SRC_PATTERNS += board/%
-endif
-ifeq ($(CIRCUITPY_BUSIO),1)
-SRC_PATTERNS += busio/% bitbangio/OneWire.%
-endif
-ifeq ($(CIRCUITPY_DIGITALIO),1)
-SRC_PATTERNS += digitalio/%
-endif
-ifeq ($(CIRCUITPY_DISPLAYIO),1)
-SRC_PATTERNS += displayio/% terminalio/%
-endif
-ifeq ($(CIRCUITPY_GAMEPAD),1)
-SRC_PATTERNS += gamepad/%
-endif
-ifeq ($(CIRCUITPY_I2CSLAVE),1)
-SRC_PATTERNS += i2cslave/%
-endif
-ifeq ($(CIRCUITPY_MATH),1)
-SRC_PATTERNS += math/%
-endif
-ifeq ($(CIRCUITPY_MICROCONTROLLER),1)
-SRC_PATTERNS += microcontroller/%
-endif
-ifeq ($(CIRCUITPY_NEOPIXEL_WRITE),1)
-SRC_PATTERNS += neopixel_write/%
-endif
-ifeq ($(CIRCUITPY_NETWORK),1)
-SRC_PATTERNS += network/% socket/%
-endif
-ifeq ($(CIRCUITPY_NVM),1)
-SRC_PATTERNS += nvm/%
-endif
-ifeq ($(CIRCUITPY_OS),1)
-SRC_PATTERNS += os/%
-endif
-ifeq ($(CIRCUITPY_PIXELBUF),1)
-SRC_PATTERNS += _pixelbuf/%
-endif
-ifeq ($(CIRCUITPY_PULSEIO),1)
-SRC_PATTERNS += pulseio/%
-endif
-ifeq ($(CIRCUITPY_RANDOM),1)
-SRC_PATTERNS += random/%
-endif
-ifeq ($(CIRCUITPY_ROTARYIO),1)
-SRC_PATTERNS += rotaryio/%
-endif
-ifeq ($(CIRCUITPY_RTC),1)
-SRC_PATTERNS += rtc/%
-endif
-ifeq ($(CIRCUITPY_SAMD),1)
-SRC_PATTERNS += samd/%
-endif
-ifeq ($(CIRCUITPY_STAGE),1)
-SRC_PATTERNS += _stage/%
-endif
-ifeq ($(CIRCUITPY_STORAGE),1)
-SRC_PATTERNS += storage/%
-endif
-ifeq ($(CIRCUITPY_STRUCT),1)
-SRC_PATTERNS += struct/%
-endif
-ifeq ($(CIRCUITPY_SUPERVISOR),1)
-SRC_PATTERNS += supervisor/%
-endif
-ifeq ($(CIRCUITPY_TIME),1)
-SRC_PATTERNS += time/%
-endif
-ifeq ($(CIRCUITPY_TOUCHIO),1)
-SRC_PATTERNS += touchio/%
-endif
-ifeq ($(CIRCUITPY_UHEAP),1)
-SRC_PATTERNS += uheap/%
-endif
-ifeq ($(CIRCUITPY_USB_HID),1)
-SRC_PATTERNS += usb_hid/%
-endif
-ifeq ($(CIRCUITPY_USB_MIDI),1)
-SRC_PATTERNS += usb_midi/%
-endif
-ifeq ($(CIRCUITPY_USTACK),1)
-SRC_PATTERNS += ustack/%
-endif
-
-# All possible sources are listed here, and are filtered by SRC_PATTERNS.
-SRC_COMMON_HAL = \
-$(filter $(SRC_PATTERNS), \
- analogio/AnalogIn.c \
- analogio/AnalogOut.c \
- analogio/__init__.c \
- audiobusio/__init__.c \
- audiobusio/I2SOut.c \
- audiobusio/PDMIn.c \
- audioio/__init__.c \
- audioio/AudioOut.c \
- board/__init__.c \
- busio/I2C.c \
- busio/SPI.c \
- busio/UART.c \
- busio/__init__.c \
- digitalio/DigitalInOut.c \
- digitalio/__init__.c \
- displayio/ParallelBus.c \
- i2cslave/I2CSlave.c \
- i2cslave/__init__.c \
- microcontroller/Pin.c \
- microcontroller/Processor.c \
- microcontroller/__init__.c \
- neopixel_write/__init__.c \
- nvm/ByteArray.c \
- nvm/__init__.c \
- os/__init__.c \
- pulseio/PWMOut.c \
- pulseio/PulseIn.c \
- pulseio/PulseOut.c \
- pulseio/__init__.c \
- rotaryio/IncrementalEncoder.c \
- rotaryio/__init__.c \
- rtc/RTC.c \
- rtc/__init__.c \
- supervisor/Runtime.c \
- supervisor/__init__.c \
- time/__init__.c \
- touchio/TouchIn.c \
- touchio/__init__.c \
-)
-
-# These don't have corresponding files in each port but are still located in
-# shared-bindings to make it clear what the contents of the modules are.
-# All possible sources are listed here, and are filtered by SRC_PATTERNS.
-SRC_BINDINGS_ENUMS = \
-$(filter $(SRC_PATTERNS), \
- digitalio/Direction.c \
- digitalio/DriveMode.c \
- digitalio/Pull.c \
- displayio/Glyph.c \
- microcontroller/RunMode.c \
- math/__init__.c \
- supervisor/__init__.c \
-)
-
-SRC_BINDINGS_ENUMS += \
- help.c \
- util.c
-
-# All possible sources are listed here, and are filtered by SRC_PATTERNS.
-SRC_SHARED_MODULE = \
-$(filter $(SRC_PATTERNS), \
- _pixelbuf/PixelBuf.c \
- _pixelbuf/__init__.c \
- _stage/Layer.c \
- _stage/Text.c \
- _stage/__init__.c \
- audioio/__init__.c \
- audioio/Mixer.c \
- audioio/RawSample.c \
- audioio/WaveFile.c \
- bitbangio/I2C.c \
- bitbangio/OneWire.c \
- bitbangio/SPI.c \
- bitbangio/__init__.c \
- busio/OneWire.c \
- displayio/Bitmap.c \
- displayio/BuiltinFont.c \
- displayio/ColorConverter.c \
- displayio/Display.c \
- displayio/FourWire.c \
- displayio/Group.c \
- displayio/OnDiskBitmap.c \
- displayio/Palette.c \
- displayio/Shape.c \
- displayio/TileGrid.c \
- displayio/__init__.c \
- gamepad/GamePad.c \
- gamepad/__init__.c \
- os/__init__.c \
- random/__init__.c \
- socket/__init__.c \
- network/__init__.c \
- storage/__init__.c \
- struct/__init__.c \
- terminalio/Terminal.c \
- terminalio/__init__.c \
- uheap/__init__.c \
- ustack/__init__.c \
-)
-
-ifeq ($(INTERNAL_LIBM),1)
-SRC_LIBM = \
-$(addprefix lib/,\
- libm/math.c \
- libm/roundf.c \
- libm/fmodf.c \
- libm/nearbyintf.c \
- libm/ef_sqrt.c \
- libm/kf_rem_pio2.c \
- libm/kf_sin.c \
- libm/kf_cos.c \
- libm/kf_tan.c \
- libm/ef_rem_pio2.c \
- libm/sf_sin.c \
- libm/sf_cos.c \
- libm/sf_tan.c \
- libm/sf_frexp.c \
- libm/sf_modf.c \
- libm/sf_ldexp.c \
- libm/asinfacosf.c \
- libm/atanf.c \
- libm/atan2f.c \
- )
-endif
-
ifeq ($(CIRCUITPY_NETWORK),1)
ifneq ($(MICROPY_PY_WIZNET5K),0)
SRC_SHARED_MODULE += wiznet/__init__.c wiznet/wiznet5k.c
@@ -577,7 +297,7 @@ endif
OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o))
-SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(STM_SRC_C)
+SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED)
# Sources that only hold QSTRs after pre-processing.
SRC_QSTR_PREPROCESSOR += peripherals/samd/$(CHIP_FAMILY)/clocks.c
diff --git a/ports/atmel-samd/mpconfigport.h b/ports/atmel-samd/mpconfigport.h
index f0f6a9d55..8a308cd03 100644
--- a/ports/atmel-samd/mpconfigport.h
+++ b/ports/atmel-samd/mpconfigport.h
@@ -64,9 +64,10 @@
#ifdef SAMD51
#define CIRCUITPY_MCU_FAMILY samd51
#define MICROPY_PY_SYS_PLATFORM "MicroChip SAMD51"
-// 128KiB
+// 128KiB heap
#define PORT_HEAP_SIZE (0x20000)
#define SPI_FLASH_MAX_BAUDRATE 24000000
+// 24kiB stack
#define CIRCUITPY_DEFAULT_STACK_SIZE 0x6000
#define MICROPY_CPYTHON_COMPAT (1)
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1)
@@ -85,7 +86,8 @@
#define MICROPY_PORT_ROOT_POINTERS \
CIRCUITPY_COMMON_ROOT_POINTERS \
- mp_obj_t playing_audio[AUDIO_DMA_CHANNEL_COUNT]; \
+ mp_obj_t playing_audio[AUDIO_DMA_CHANNEL_COUNT] \
+ ;
#include "ports/circuitpy-common/mpconfig_circuitpy.h"
diff --git a/ports/circuitpy-common/circuitpy_defns.mk b/ports/circuitpy-common/circuitpy_defns.mk
new file mode 100644
index 000000000..2fa2e78e2
--- /dev/null
+++ b/ports/circuitpy-common/circuitpy_defns.mk
@@ -0,0 +1,346 @@
+# This file is part of the MicroPython project, http://micropython.org/
+#
+# The MIT License (MIT)
+#
+# Copyright (c) 2019 Dan Halbert for Adafruit Industries
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# Common Makefile definitions that can be shared across CircuitPython ports.
+
+###
+# Common compile warnings.
+
+BASE_CFLAGS = \
+ -fsingle-precision-constant \
+ -fno-strict-aliasing \
+ -Wdouble-promotion \
+ -Wno-endif-labels \
+ -Wstrict-prototypes \
+ -Werror-implicit-function-declaration \
+ -Wfloat-equal \
+ -Wundef \
+ -Wshadow \
+ -Wwrite-strings \
+ -Wsign-compare \
+ -Wmissing-format-attribute \
+ -Wno-deprecated-declarations \
+ -Wnested-externs \
+ -Wunreachable-code \
+ -Wcast-align \
+ -Wno-error=lto-type-mismatch \
+ -D__$(CHIP_VARIANT)__ \
+ -ffunction-sections \
+ -fdata-sections \
+ -fshort-enums \
+ -DCIRCUITPY_SOFTWARE_SAFE_MODE=0x0ADABEEF \
+ -DCIRCUITPY_CANARY_WORD=0xADAF00 \
+ -DCIRCUITPY_SAFE_RESTART_WORD=0xDEADBEEF \
+ --param max-inline-insns-single=500
+
+# Use these flags to debug build times and header includes.
+# -ftime-report
+# -H
+
+
+###
+# Handle frozen modules.
+
+ifneq ($(FROZEN_DIR),)
+# To use frozen source modules, put your .py files in a subdirectory (eg scripts/)
+# and then invoke make with FROZEN_DIR=scripts (be sure to build from scratch).
+CFLAGS += -DMICROPY_MODULE_FROZEN_STR
+CFLAGS += -Wno-error=lto-type-mismatch
+endif
+
+# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
+# then invoke make with FROZEN_MPY_DIR=frozen or FROZEN_MPY_DIRS="dir1 dir2"
+# (be sure to build from scratch).
+
+ifneq ($(FROZEN_MPY_DIRS),)
+CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
+CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
+CFLAGS += -Wno-error=lto-type-mismatch
+endif
+
+
+###
+# Propagate longint choice from .mk to C. There's no easy string comparison
+# in cpp conditionals, so we #define separate names for each.
+ifeq ($(LONGINT_IMPL),NONE)
+CFLAGS += -DLONGINT_IMPL_NONE
+endif
+
+ifeq ($(LONGINT_IMPL),MPZ)
+CFLAGS += -DLONGINT_IMPL_MPZ
+endif
+
+ifeq ($(LONGINT_IMPL),LONGLONG)
+CFLAGS += -DLONGINT_IMPL_LONGLONG
+endif
+
+
+###
+# Select which builtin modules to compile and include.
+
+ifeq ($(CIRCUITPY_ANALOGIO),1)
+SRC_PATTERNS += analogio/%
+endif
+ifeq ($(CIRCUITPY_AUDIOBUSIO),1)
+SRC_PATTERNS += audiobusio/%
+endif
+ifeq ($(CIRCUITPY_AUDIOIO),1)
+SRC_PATTERNS += audioio/%
+endif
+ifeq ($(CIRCUITPY_BITBANGIO),1)
+SRC_PATTERNS += bitbangio/%
+endif
+ifeq ($(CIRCUITPY_BLEIO),1)
+SRC_PATTERNS += bleio/%
+endif
+ifeq ($(CIRCUITPY_BOARD),1)
+SRC_PATTERNS += board/%
+endif
+ifeq ($(CIRCUITPY_BUSIO),1)
+SRC_PATTERNS += busio/% bitbangio/OneWire.%
+endif
+ifeq ($(CIRCUITPY_DIGITALIO),1)
+SRC_PATTERNS += digitalio/%
+endif
+ifeq ($(CIRCUITPY_DISPLAYIO),1)
+SRC_PATTERNS += displayio/% terminalio/%
+endif
+ifeq ($(CIRCUITPY_GAMEPAD),1)
+SRC_PATTERNS += gamepad/%
+endif
+ifeq ($(CIRCUITPY_I2CSLAVE),1)
+SRC_PATTERNS += i2cslave/%
+endif
+ifeq ($(CIRCUITPY_MATH),1)
+SRC_PATTERNS += math/%
+endif
+ifeq ($(CIRCUITPY_MICROCONTROLLER),1)
+SRC_PATTERNS += microcontroller/%
+endif
+ifeq ($(CIRCUITPY_NEOPIXEL_WRITE),1)
+SRC_PATTERNS += neopixel_write/%
+endif
+ifeq ($(CIRCUITPY_NETWORK),1)
+SRC_PATTERNS += network/% socket/%
+endif
+ifeq ($(CIRCUITPY_NVM),1)
+SRC_PATTERNS += nvm/%
+endif
+ifeq ($(CIRCUITPY_OS),1)
+SRC_PATTERNS += os/%
+endif
+ifeq ($(CIRCUITPY_PIXELBUF),1)
+SRC_PATTERNS += _pixelbuf/%
+endif
+ifeq ($(CIRCUITPY_PULSEIO),1)
+SRC_PATTERNS += pulseio/%
+endif
+ifeq ($(CIRCUITPY_RANDOM),1)
+SRC_PATTERNS += random/%
+endif
+ifeq ($(CIRCUITPY_ROTARYIO),1)
+SRC_PATTERNS += rotaryio/%
+endif
+ifeq ($(CIRCUITPY_RTC),1)
+SRC_PATTERNS += rtc/%
+endif
+ifeq ($(CIRCUITPY_SAMD),1)
+SRC_PATTERNS += samd/%
+endif
+ifeq ($(CIRCUITPY_STAGE),1)
+SRC_PATTERNS += _stage/%
+endif
+ifeq ($(CIRCUITPY_STORAGE),1)
+SRC_PATTERNS += storage/%
+endif
+ifeq ($(CIRCUITPY_STRUCT),1)
+SRC_PATTERNS += struct/%
+endif
+ifeq ($(CIRCUITPY_SUPERVISOR),1)
+SRC_PATTERNS += supervisor/%
+endif
+ifeq ($(CIRCUITPY_TIME),1)
+SRC_PATTERNS += time/%
+endif
+ifeq ($(CIRCUITPY_TOUCHIO),1)
+SRC_PATTERNS += touchio/%
+endif
+ifeq ($(CIRCUITPY_UHEAP),1)
+SRC_PATTERNS += uheap/%
+endif
+ifeq ($(CIRCUITPY_USB_HID),1)
+SRC_PATTERNS += usb_hid/%
+endif
+ifeq ($(CIRCUITPY_USB_MIDI),1)
+SRC_PATTERNS += usb_midi/%
+endif
+ifeq ($(CIRCUITPY_USTACK),1)
+SRC_PATTERNS += ustack/%
+endif
+
+# All possible sources are listed here, and are filtered by SRC_PATTERNS.
+SRC_COMMON_HAL = \
+$(filter $(SRC_PATTERNS), \
+ analogio/AnalogIn.c \
+ analogio/AnalogOut.c \
+ analogio/__init__.c \
+ audiobusio/__init__.c \
+ audiobusio/I2SOut.c \
+ audiobusio/PDMIn.c \
+ audioio/__init__.c \
+ audioio/AudioOut.c \
+ bleio/__init__.c \
+ bleio/Adapter.c \
+ bleio/Broadcaster.c \
+ bleio/Characteristic.c \
+ bleio/CharacteristicBuffer.c \
+ bleio/Descriptor.c \
+ bleio/Peripheral.c \
+ bleio/Scanner.c \
+ bleio/Service.c \
+ bleio/UUID.c \
+ board/__init__.c \
+ busio/I2C.c \
+ busio/SPI.c \
+ busio/UART.c \
+ busio/__init__.c \
+ digitalio/DigitalInOut.c \
+ digitalio/__init__.c \
+ displayio/ParallelBus.c \
+ i2cslave/I2CSlave.c \
+ i2cslave/__init__.c \
+ microcontroller/Pin.c \
+ microcontroller/Processor.c \
+ microcontroller/__init__.c \
+ neopixel_write/__init__.c \
+ nvm/ByteArray.c \
+ nvm/__init__.c \
+ os/__init__.c \
+ pulseio/PWMOut.c \
+ pulseio/PulseIn.c \
+ pulseio/PulseOut.c \
+ pulseio/__init__.c \
+ rotaryio/IncrementalEncoder.c \
+ rotaryio/__init__.c \
+ rtc/RTC.c \
+ rtc/__init__.c \
+ supervisor/Runtime.c \
+ supervisor/__init__.c \
+ time/__init__.c \
+ touchio/TouchIn.c \
+ touchio/__init__.c \
+)
+
+# These don't have corresponding files in each port but are still located in
+# shared-bindings to make it clear what the contents of the modules are.
+# All possible sources are listed here, and are filtered by SRC_PATTERNS.
+SRC_BINDINGS_ENUMS = \
+$(filter $(SRC_PATTERNS), \
+ digitalio/Direction.c \
+ digitalio/DriveMode.c \
+ digitalio/Pull.c \
+ displayio/Glyph.c \
+ microcontroller/RunMode.c \
+ math/__init__.c \
+ supervisor/__init__.c \
+)
+
+SRC_BINDINGS_ENUMS += \
+ help.c \
+ util.c
+
+SRC_BINDINGS_ENUMS += \
+$(filter $(SRC_PATTERNS), \
+ bleio/Address.c \
+ bleio/AddressType.c \
+ bleio/AdvertisementData.c \
+ bleio/ScanEntry.c \
+)
+
+# All possible sources are listed here, and are filtered by SRC_PATTERNS.
+SRC_SHARED_MODULE = \
+$(filter $(SRC_PATTERNS), \
+ _pixelbuf/PixelBuf.c \
+ _pixelbuf/__init__.c \
+ _stage/Layer.c \
+ _stage/Text.c \
+ _stage/__init__.c \
+ audioio/__init__.c \
+ audioio/Mixer.c \
+ audioio/RawSample.c \
+ audioio/WaveFile.c \
+ bitbangio/I2C.c \
+ bitbangio/OneWire.c \
+ bitbangio/SPI.c \
+ bitbangio/__init__.c \
+ busio/OneWire.c \
+ displayio/Bitmap.c \
+ displayio/BuiltinFont.c \
+ displayio/ColorConverter.c \
+ displayio/Display.c \
+ displayio/FourWire.c \
+ displayio/Group.c \
+ displayio/OnDiskBitmap.c \
+ displayio/Palette.c \
+ displayio/Shape.c \
+ displayio/TileGrid.c \
+ displayio/__init__.c \
+ gamepad/GamePad.c \
+ gamepad/__init__.c \
+ os/__init__.c \
+ random/__init__.c \
+ socket/__init__.c \
+ network/__init__.c \
+ storage/__init__.c \
+ struct/__init__.c \
+ terminalio/Terminal.c \
+ terminalio/__init__.c \
+ uheap/__init__.c \
+ ustack/__init__.c \
+)
+
+ifeq ($(INTERNAL_LIBM),1)
+SRC_LIBM = \
+$(addprefix lib/,\
+ libm/math.c \
+ libm/roundf.c \
+ libm/fmodf.c \
+ libm/nearbyintf.c \
+ libm/ef_sqrt.c \
+ libm/kf_rem_pio2.c \
+ libm/kf_sin.c \
+ libm/kf_cos.c \
+ libm/kf_tan.c \
+ libm/ef_rem_pio2.c \
+ libm/sf_sin.c \
+ libm/sf_cos.c \
+ libm/sf_tan.c \
+ libm/sf_frexp.c \
+ libm/sf_modf.c \
+ libm/sf_ldexp.c \
+ libm/asinfacosf.c \
+ libm/atanf.c \
+ libm/atan2f.c \
+ )
+endif
diff --git a/ports/circuitpy-common/circuitpy_rules.mk b/ports/circuitpy-common/circuitpy_rules.mk
new file mode 100644
index 000000000..ff8c95561
--- /dev/null
+++ b/ports/circuitpy-common/circuitpy_rules.mk
@@ -0,0 +1,48 @@
+# This file is part of the MicroPython project, http://micropython.org/
+#
+# The MIT License (MIT)
+#
+# Copyright (c) 2019 Dan Halbert for Adafruit Industries
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+###
+# Common make rules. These are split from the common variable defintions due to ordering issues.
+
+all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2
+
+$(BUILD)/firmware.elf: $(OBJ)
+ $(STEPECHO) "LINK $@"
+ $(Q)$(CC) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(LIBS) -Wl,--end-group
+ $(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py $(LD_FILE)
+
+$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
+ $(STEPECHO) "Create $@"
+ $(Q)$(OBJCOPY) -O binary -j .vectors -j .text -j .data $^ $@
+
+$(BUILD)/firmware.uf2: $(BUILD)/firmware.bin
+ $(STEPECHO) "Create $@"
+ $(Q)$(PYTHON3) $(TOP)/tools/uf2/utils/uf2conv.py -b $(BOOTLOADER_SIZE) -c -o $@ $^
+
+include $(TOP)/py/mkrules.mk
+
+# Print out the value of a make variable.
+# https://stackoverflow.com/questions/16467718/how-to-print-out-a-variable-in-makefile
+print-%:
+ @echo $* = $($*)
diff --git a/ports/circuitpy-common/mpconfig_circuitpy.h b/ports/circuitpy-common/mpconfig_circuitpy.h
index 69055f4b1..86ed3da8d 100644
--- a/ports/circuitpy-common/mpconfig_circuitpy.h
+++ b/ports/circuitpy-common/mpconfig_circuitpy.h
@@ -235,6 +235,13 @@ extern const struct _mp_obj_module_t bitbangio_module;
#define BITBANGIO_MODULE
#endif
+#if CIRCUITPY_BLEIO
+#define BLEIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_bleio), (mp_obj_t)&bleio_module },
+extern const struct _mp_obj_module_t bleio_module;
+#else
+#define BLEIO_MODULE
+#endif
+
#if CIRCUITPY_BOARD
#define BOARD_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module },
extern const struct _mp_obj_module_t board_module;
@@ -461,6 +468,7 @@ extern const struct _mp_obj_module_t ustack_module;
AUDIOBUSIO_MODULE \
AUDIOIO_MODULE \
BITBANGIO_MODULE \
+ BLEIO_MODULE \
BOARD_MODULE \
BUSIO_MODULE \
DIGITALIO_MODULE \
diff --git a/ports/circuitpy-common/mpconfig_circuitpy.mk b/ports/circuitpy-common/mpconfig_circuitpy.mk
index f9be045a6..0294d3905 100644
--- a/ports/circuitpy-common/mpconfig_circuitpy.mk
+++ b/ports/circuitpy-common/mpconfig_circuitpy.mk
@@ -13,6 +13,7 @@ else
CIRCUITPY_FULL_BUILD = 1
CFLAGS += -DCIRCUITPY_FULL_BUILD=1
endif
+endif
# All builtin modules are listed below, with default values (0 for off, 1 for on)
# Some are always on, some are always off, and some depend on CIRCUITPY_FULL_BUILD.
@@ -34,11 +35,17 @@ CIRCUITPY_AUDIOIO = $(CIRCUITPY_FULL_BUILD)
endif
CFLAGS += -DCIRCUITPY_AUDIOIO=$(CIRCUITPY_AUDIOIO)
-#ifndef CIRCUITPY_BITBANGIO
+ifndef CIRCUITPY_BITBANGIO
CIRCUITPY_BITBANGIO = $(CIRCUITPY_FULL_BUILD)
endif
CFLAGS += -DCIRCUITPY_BITBANGIO=$(CIRCUITPY_BITBANGIO)
+# Explicitly enabled for boards that support bleio.
+ifndef CIRCUITPY_BLEIO
+CIRCUITPY_BLEIO = 0
+endif
+CFLAGS += -DCIRCUITPY_BLEIO=$(CIRCUITPY_BLEIO)
+
ifndef CIRCUITPY_BOARD
CIRCUITPY_BOARD = 1
endif
@@ -127,7 +134,7 @@ CFLAGS += -DCIRCUITPY_RTC=$(CIRCUITPY_RTC)
# Only for SAMD chips.
ifndef CIRCUITPY_SAMD
-ifneq ($findstring sam,$(CHIP_FAMILY),)
+ifneq ($(findstring sam,$(CHIP_FAMILY)),)
CIRCUITPY_SAMD = $(CIRCUITPY_FULL_BUILD)
else
# Not a SAMD build.
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 13c7edb80..a408b8ca9 100755
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -1,3 +1,27 @@
+# This file is part of the MicroPython project, http://micropython.org/
+#
+# The MIT License (MIT)
+#
+# Copyright (c) 2019 Dan Halbert for Adafruit Industries
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
# Select the board to build for.
ifeq ($(BOARD),)
$(info You must provide a BOARD parameter with 'BOARD=')
@@ -11,16 +35,29 @@ else
endif
CLI_SD := $(SD)
-
-include boards/$(BOARD)/mpconfigboard.mk
-
SD_LOWER = $(shell echo $(SD) | tr '[:upper:]' '[:lower:]')
# Build directory with SD if it's different from the default.
BUILD ?= $(if $(CLI_SD),build-$(BOARD)-$(SD_LOWER),build-$(BOARD))
include ../../py/mkenv.mk
--include mpconfigport.mk
+# Board-specific
+include boards/$(BOARD)/mpconfigboard.mk
+# Port-specific
+include mpconfigport.mk
+# CircuitPython-specific
+include $(TOP)/ports/circuitpy-common/mpconfig_circuitpy.mk
+
+# qstr definitions (must come before including py.mk)
+QSTR_DEFS = qstrdefsport.h
+
+# include py core make definitions
+include $(TOP)/py/py.mk
+
+include $(TOP)/supervisor/supervisor.mk
+
+# Include make rules and variables common across CircuitPython builds.
+include $(TOP)/ports/circuitpy-common/circuitpy_defns.mk
ifneq ($(SD), )
include bluetooth/bluetooth_common.mk
@@ -28,19 +65,10 @@ endif
FROZEN_MPY_DIR = freeze
-# include py core make definitions
-include ../../py/py.mk
-
-ifneq ($(MCU_SUB_VARIANT),nrf52840)
-USB = FALSE
-endif
-
-include $(TOP)/supervisor/supervisor.mk
+CROSS_COMPILE = arm-none-eabi-
FATFS_DIR = lib/oofatfs
-CROSS_COMPILE = arm-none-eabi-
-
INC += -I.
INC += -I../..
INC += -I$(BUILD)
@@ -59,43 +87,51 @@ INC += -I../../lib/mp-readline
INC += -I../../lib/tinyusb/src
INC += -I../../supervisor/shared/usb
-NRF_DEFINES += -DCONFIG_GPIO_AS_PINRESET
-
-CFLAGS += -mthumb -mabi=aapcs -fsingle-precision-constant -Wdouble-promotion
-CFLAGS += -mtune=cortex-m4 -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
-CFLAGS += $(INC) -Wall -Werror -ansi -std=gnu99 -nostdlib $(COPT) $(NRF_DEFINES) $(CFLAGS_MOD)
-CFLAGS += -fno-strict-aliasing
-CFLAGS += -fstack-usage -fno-builtin -fshort-enums
-CFLAGS += -fdata-sections -ffunction-sections
-CFLAGS += -D__START=main
-
-LDFLAGS = $(CFLAGS)
-LDFLAGS += -Xlinker -Map=$(@:.elf=.map)
-LDFLAGS += -mthumb -mabi=aapcs -T $(LD_FILE) -L boards/
-LDFLAGS += -Wl,--gc-sections
-
-# TinyUSB defines
-CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_NRF5X -DCFG_TUD_CDC_RX_BUFSIZE=1024 -DCFG_TUD_CDC_TX_BUFSIZE=1024 -DCFG_TUD_MSC_BUFSIZE=4096 -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_MIDI_TX_BUFSIZE=128
-
#Debugging/Optimization
ifeq ($(DEBUG), 1)
- #ASMFLAGS += -g -gtabs+
- CFLAGS += -O1 -ggdb
- LDFLAGS += -O1
+ CFLAGS += -ggdb
# You may want to enable these flags to make setting breakpoints easier.
CFLAGS += -fno-inline -fno-ipa-sra
else
CFLAGS += -Os -DNDEBUG
- LDFLAGS += -Os
+ # TODO: Test with -flto
+ ### CFLAGS += -flto
endif
-LIBM_FILE_NAME = $(shell $(CC) $(CFLAGS) -print-file-name=libm.a)
-LIBC_FILE_NAME = $(shell $(CC) $(CFLAGS) -print-file-name=libc.a)
-LIBGCC_FILE_NAME = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
-LIBS := -L $(dir $(LIBM_FILE_NAME)) -lm
-LIBS += -L $(dir $(LIBC_FILE_NAME)) -lc
-LIBS += -L $(dir $(LIBGCC_FILE_NAME)) -lgcc
+CFLAGS += $(INC) -Wall -Werror -std=gnu11 -nostdlib $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT)
+
+# Undo some warnings.
+# nrfx uses undefined preprocessor variables quite casually, so we can't do warning checks for these.
+CFLAGS += -Wno-undef
+# nrfx does casts that increase alignment requirements.
+CFLAGS += -Wno-cast-align
+
+NRF_DEFINES += -DCONFIG_GPIO_AS_PINRESET
+CFLAGS += $(NRF_DEFINES)
+
+CFLAGS += \
+ -mthumb \
+ -mabi=aapcs-linux \
+ -mfloat-abi=hard \
+ -mcpu=cortex-m4 \
+ -mfpu=fpv4-sp-d16
+
+# TODO: check this
+CFLAGS += -D__START=main
+
+LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
+LIBS := -lgcc -lc
+
+LDFLAGS += -mthumb -mcpu=cortex-m4
+
+# Use toolchain libm if we're not using our own.
+ifndef INTERNAL_LIBM
+LIBS += -lm
+endif
+
+# TinyUSB defines
+CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_NRF5X -DCFG_TUD_CDC_RX_BUFSIZE=1024 -DCFG_TUD_CDC_TX_BUFSIZE=1024 -DCFG_TUD_MSC_BUFSIZE=4096 -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_MIDI_TX_BUFSIZE=128
SRC_NRFX = $(addprefix nrfx/,\
drivers/src/nrfx_power.c \
@@ -144,117 +180,11 @@ SRC_C += \
sd_mutex.c \
supervisor/shared/memory.c
-
-SRC_COMMON_HAL += \
- analogio/AnalogIn.c \
- analogio/AnalogOut.c \
- analogio/__init__.c \
- board/__init__.c \
- busio/I2C.c \
- busio/SPI.c \
- busio/UART.c \
- busio/__init__.c\
- digitalio/DigitalInOut.c \
- digitalio/__init__.c \
- displayio/ParallelBus.c \
- microcontroller/Pin.c \
- microcontroller/Processor.c \
- microcontroller/__init__.c \
- neopixel_write/__init__.c \
- os/__init__.c \
- pulseio/PWMOut.c \
- pulseio/PulseIn.c \
- pulseio/PulseOut.c \
- pulseio/__init__.c \
- rotaryio/__init__.c \
- rotaryio/IncrementalEncoder.c \
- supervisor/Runtime.c \
- supervisor/__init__.c \
- time/__init__.c \
- touchio/__init__.c \
- touchio/TouchIn.c \
-
-ifneq ($(SD), )
-SRC_COMMON_HAL += \
- bleio/__init__.c \
- bleio/Adapter.c \
- bleio/Broadcaster.c \
- bleio/Characteristic.c \
- bleio/CharacteristicBuffer.c \
- bleio/Descriptor.c \
- bleio/Peripheral.c \
- bleio/Scanner.c \
- bleio/Service.c \
- bleio/UUID.c
-endif
-
-# These don't have corresponding files in each port but are still located in
-# shared-bindings to make it clear what the contents of the modules are.
-SRC_BINDINGS_ENUMS = \
- busio/OneWire.c \
- digitalio/Direction.c \
- digitalio/DriveMode.c \
- digitalio/Pull.c \
- displayio/Glyph.c \
- microcontroller/RunMode.c \
- help.c \
- math/__init__.c \
- util.c
-
-ifneq ($(SD), )
-SRC_BINDINGS_ENUMS += \
- bleio/Address.c \
- bleio/AddressType.c \
- bleio/AdvertisementData.c \
- bleio/ScanEntry.c
-endif
-
-SRC_SHARED_MODULE = \
- _pixelbuf/__init__.c \
- _pixelbuf/PixelBuf.c
- os/__init__.c \
- random/__init__.c \
- struct/__init__.c \
- gamepad/__init__.c \
- gamepad/GamePad.c \
- bitbangio/__init__.c \
- bitbangio/I2C.c \
- bitbangio/OneWire.c \
- bitbangio/SPI.c \
- busio/OneWire.c \
- displayio/__init__.c \
- displayio/Bitmap.c \
- displayio/BuiltinFont.c \
- displayio/ColorConverter.c \
- displayio/Display.c \
- displayio/FourWire.c \
- displayio/Group.c \
- displayio/OnDiskBitmap.c \
- displayio/Palette.c \
- displayio/Shape.c \
- displayio/TileGrid.c \
- storage/__init__.c \
- terminalio/__init__.c \
- terminalio/Terminal.c
-
-
-ifndef EXCLUDE_PIXELBUF
-endif
-
-# uheap/__init__.c \
- ustack/__init__.c
-
# USB source files for nrf52840
ifeq ($(MCU_SUB_VARIANT),nrf52840)
-
SRC_C += \
lib/tinyusb/src/portable/nordic/nrf5x/dcd_nrf5x.c \
lib/tinyusb/src/portable/nordic/nrf5x/hal_nrf5x.c
-
-SRC_SHARED_MODULE += \
- usb_hid/__init__.c \
- usb_hid/Device.c \
-
endif
SRC_COMMON_HAL_EXPANDED = $(addprefix shared-bindings/, $(SRC_COMMON_HAL)) \
@@ -271,36 +201,44 @@ FROZEN_MPY_MPY_FILES := $(addprefix $(BUILD)/,$(FROZEN_MPY_PY_FILES:.py=.mpy))
OBJ += $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_NRFX:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_EXPANDED:.c=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_SHARED_MODULE_EXPANDED:.c=.o))
+ifeq ($(INTERNAL_LIBM),1)
+OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
+endif
OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
$(BUILD)/$(FATFS_DIR)/ff.o: COPT += -Os
$(filter $(PY_BUILD)/../extmod/vfs_fat_%.o, $(PY_O)): COPT += -Os
-.phony: all flash sd binary hex
+# List of sources for qstr extraction
+SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_MOD) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED)
+# Sources that only hold QSTRs after pre-processing.
+SRC_QSTR_PREPROCESSOR +=
+
-all: binary hex uf2
+all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2
-OUTPUT_FILENAME = firmware
+$(BUILD)/firmware.elf: $(OBJ)
+ $(STEPECHO) "LINK $@"
+ $(Q)$(CC) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(LIBS) -Wl,--end-group
+ $(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py $(LD_FILE)
-## Create binary .bin file from the .out file
-binary: $(BUILD)/$(OUTPUT_FILENAME).bin
+$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
+ $(STEPECHO) "Create $@"
+ $(Q)$(OBJCOPY) -O binary $^ $@
+# $(Q)$(OBJCOPY) -O binary -j .vectors -j .text -j .data $^ $@
-$(BUILD)/$(OUTPUT_FILENAME).bin: $(BUILD)/$(OUTPUT_FILENAME).elf
- $(OBJCOPY) -O binary $< $@
+$(BUILD)/firmware.hex: $(BUILD)/firmware.elf
+ $(STEPECHO) "Create $@"
+ $(Q)$(OBJCOPY) -O ihex $^ $@
+# $(Q)$(OBJCOPY) -O ihex -j .vectors -j .text -j .data $^ $@
-## Create binary .hex file from the .out file
-hex: $(BUILD)/$(OUTPUT_FILENAME).hex
+$(BUILD)/firmware.uf2: $(BUILD)/firmware.hex
+ $(ECHO) "Create $@"
+ $(PYTHON3) $(TOP)/tools/uf2/utils/uf2conv.py -f 0xADA52840 -c -o "$(BUILD)/firmware.uf2" $^
-$(BUILD)/$(OUTPUT_FILENAME).hex: $(BUILD)/$(OUTPUT_FILENAME).elf
- $(OBJCOPY) -O ihex $< $@
-## Create uf2 file
-uf2: $(BUILD)/$(OUTPUT_FILENAME).hex
- $(ECHO) "Create $(OUTPUT_FILENAME).uf2"
- $(PYTHON2) $(TOP)/tools/uf2/utils/uf2conv.py -f 0xADA52840 -c -o "$(BUILD)/$(OUTPUT_FILENAME).uf2" $^
#####################
# Flash with debugger
@@ -310,13 +248,13 @@ FLASHER ?=
ifeq ($(FLASHER),)
# Also update to bootloader settting to validate application and skip checksum ( app valid = 0x0001, crc = 0x0000 )
-flash: $(BUILD)/$(OUTPUT_FILENAME).hex
+flash: $(BUILD)/firmware.hex
nrfjprog --program $< --sectorerase -f $(MCU_VARIANT)
nrfjprog --erasepage $(BOOT_SETTING_ADDR) -f $(MCU_VARIANT)
nrfjprog --memwr $(BOOT_SETTING_ADDR) --val 0x00000001 -f $(MCU_VARIANT)
nrfjprog --reset -f $(MCU_VARIANT)
-sd: $(BUILD)/$(OUTPUT_FILENAME).hex
+sd: $(BUILD)/firmware.hex
nrfjprog --eraseall -f $(MCU_VARIANT)
nrfjprog --program $(SOFTDEV_HEX) -f $(MCU_VARIANT)
nrfjprog --program $< --sectorerase -f $(MCU_VARIANT)
@@ -324,13 +262,13 @@ sd: $(BUILD)/$(OUTPUT_FILENAME).hex
else ifeq ($(FLASHER), pyocd)
-flash: $(BUILD)/$(OUTPUT_FILENAME).hex
+flash: $(BUILD)/firmware.hex
pyocd-flashtool -t $(MCU_VARIANT) $< --sector_erase
#pyocd-tool -t $(MCU_VARIANT) erase $(BOOT_SETTING_ADDR)
pyocd-tool -t $(MCU_VARIANT) write32 $(BOOT_SETTING_ADDR) 0x00000001
pyocd-tool -t $(MCU_VARIANT) reset
-sd: $(BUILD)/$(OUTPUT_FILENAME).hex
+sd: $(BUILD)/firmware.hex
pyocd-flashtool -t $(MCU_VARIANT) --chip_erase
pyocd-flashtool -t $(MCU_VARIANT) $(SOFTDEV_HEX)
pyocd-flashtool -t $(MCU_VARIANT) $< --sector_erase
@@ -366,36 +304,13 @@ dfu-flash: $(BUILD)/dfu-package.zip
## Create DFU package file
dfu-gen: $(BUILD)/dfu-package.zip
-$(BUILD)/dfu-package.zip: $(BUILD)/$(OUTPUT_FILENAME).hex
+$(BUILD)/dfu-package.zip: $(BUILD)/firmware.hex
$(NRFUTIL) dfu genpkg --sd-req 0xFFFE --dev-type 0x0052 --application $^ $(BUILD)/dfu-package.zip
-# You must have $^ here because it deduplicates entries in $(OBJ)
-$(BUILD)/$(OUTPUT_FILENAME).elf: $(OBJ)
- $(ECHO) "LINK $@"
- $(Q)$(CC) $(LDFLAGS) -o $@ $^ -Wl,--start-group $(LIBS) -Wl,--end-group
- $(Q)$(SIZE) $@
-
-# List of sources for qstr extraction
-SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_MOD) $(DRIVERS_SRC_C) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED)
-
-# Append any auto-generated sources that are needed by sources listed in
-# SRC_QSTR
-SRC_QSTR_AUTO_DEPS +=
-
-AF_FILE = $(MCU_VARIANT)_af.csv
-PREFIX_FILE = boards/$(MCU_VARIANT)_prefix.c
-
-ifneq ($(FROZEN_DIR),)
-# To use frozen source modules, put your .py files in a subdirectory (eg scripts/)
-# and then invoke make with FROZEN_DIR=scripts (be sure to build from scratch).
-CFLAGS += -DMICROPY_MODULE_FROZEN_STR
-endif
-
-ifneq ($(FROZEN_MPY_DIR),)
-# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
-# then invoke make with FROZEN_MPY_DIR=frozen (be sure to build from scratch).
-CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
-CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
-endif
include $(TOP)/py/mkrules.mk
+
+# Print out the value of a make variable.
+# https://stackoverflow.com/questions/16467718/how-to-print-out-a-variable-in-makefile
+print-%:
+ @echo $* = $($*)
diff --git a/ports/nrf/bluetooth/ble_drv.c b/ports/nrf/bluetooth/ble_drv.c
index f80c7b1f0..4e7523691 100644
--- a/ports/nrf/bluetooth/ble_drv.c
+++ b/ports/nrf/bluetooth/ble_drv.c
@@ -87,6 +87,8 @@ void ble_drv_remove_event_handler(ble_drv_evt_handler_t func, void *param) {
}
}
+extern void tusb_hal_nrf_power_event (uint32_t event);
+
void SD_EVT_IRQHandler(void) {
uint32_t evt_id;
while (sd_evt_get(&evt_id) != NRF_ERROR_NOT_FOUND) {
@@ -101,7 +103,6 @@ void SD_EVT_IRQHandler(void) {
(evt_id == NRF_EVT_POWER_USB_POWER_READY) ? NRFX_POWER_USB_EVT_READY :
(evt_id == NRF_EVT_POWER_USB_REMOVED ) ? NRFX_POWER_USB_EVT_REMOVED : -1;
- extern void tusb_hal_nrf_power_event (uint32_t event);
tusb_hal_nrf_power_event(usbevt);
}
break;
diff --git a/ports/nrf/bluetooth/ble_drv.h b/ports/nrf/bluetooth/ble_drv.h
index 3d1f551c5..a6f7b9033 100644
--- a/ports/nrf/bluetooth/ble_drv.h
+++ b/ports/nrf/bluetooth/ble_drv.h
@@ -50,7 +50,7 @@
typedef void (*ble_drv_evt_handler_t)(ble_evt_t*, void*);
-void ble_drv_reset();
+void ble_drv_reset(void);
void ble_drv_add_event_handler(ble_drv_evt_handler_t func, void *param);
void ble_drv_remove_event_handler(ble_drv_evt_handler_t func, void *param);
diff --git a/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk b/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk
index 905921a5d..0fef54ef7 100644
--- a/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk
+++ b/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk
@@ -16,6 +16,7 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk
index 84dff0bc4..abb0f4946 100644
--- a/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk
+++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk
@@ -16,6 +16,7 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk b/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk
index 54fa0617b..82bbc3bd8 100644
--- a/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk
+++ b/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk
@@ -17,6 +17,7 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
diff --git a/ports/nrf/boards/particle_argon/mpconfigboard.mk b/ports/nrf/boards/particle_argon/mpconfigboard.mk
index ee30c2be9..8d3bb2a28 100644
--- a/ports/nrf/boards/particle_argon/mpconfigboard.mk
+++ b/ports/nrf/boards/particle_argon/mpconfigboard.mk
@@ -16,6 +16,7 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
diff --git a/ports/nrf/boards/particle_boron/mpconfigboard.mk b/ports/nrf/boards/particle_boron/mpconfigboard.mk
index ba6c57b85..801b9613f 100644
--- a/ports/nrf/boards/particle_boron/mpconfigboard.mk
+++ b/ports/nrf/boards/particle_boron/mpconfigboard.mk
@@ -16,6 +16,7 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
diff --git a/ports/nrf/boards/particle_xenon/mpconfigboard.mk b/ports/nrf/boards/particle_xenon/mpconfigboard.mk
index 5ed0677c7..5cebc423a 100644
--- a/ports/nrf/boards/particle_xenon/mpconfigboard.mk
+++ b/ports/nrf/boards/particle_xenon/mpconfigboard.mk
@@ -16,6 +16,7 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
diff --git a/ports/nrf/boards/pca10056/mpconfigboard.mk b/ports/nrf/boards/pca10056/mpconfigboard.mk
index 49c708cff..723e7976e 100644
--- a/ports/nrf/boards/pca10056/mpconfigboard.mk
+++ b/ports/nrf/boards/pca10056/mpconfigboard.mk
@@ -16,6 +16,7 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
diff --git a/ports/nrf/boards/pca10059/mpconfigboard.mk b/ports/nrf/boards/pca10059/mpconfigboard.mk
index 030c9a823..db9d80668 100644
--- a/ports/nrf/boards/pca10059/mpconfigboard.mk
+++ b/ports/nrf/boards/pca10059/mpconfigboard.mk
@@ -17,6 +17,7 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
diff --git a/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk b/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk
index d4819c855..73b9ad767 100644
--- a/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk
+++ b/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk
@@ -16,10 +16,11 @@ ifeq ($(SD),)
LD_FILE = boards/nrf52840_1M_256k.ld
else
LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
+ CIRCUITPY_BLEIO = 1
endif
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
-QSPI_FLASH_FILESYSTEM = 0
-EXTERNAL_FLASH_DEVICE_COUNT = 0
-EXTERNAL_FLASH_DEVICES =
+QSPI_FLASH_FILESYSTEM = 0
+EXTERNAL_FLASH_DEVICE_COUNT = 0
+EXTERNAL_FLASH_DEVICES =
diff --git a/ports/nrf/common-hal/neopixel_write/__init__.c b/ports/nrf/common-hal/neopixel_write/__init__.c
index f47188ea2..fe2bab999 100644
--- a/ports/nrf/common-hal/neopixel_write/__init__.c
+++ b/ports/nrf/common-hal/neopixel_write/__init__.c
@@ -86,7 +86,7 @@ static NRF_PWM_Type* find_free_pwm (void) {
#endif
};
- for ( int device = 0; device < ARRAY_SIZE(PWM); device++ ) {
+ for ( size_t device = 0; device < ARRAY_SIZE(PWM); device++ ) {
if ( (PWM[device]->ENABLE == 0) &&
(PWM[device]->PSEL.OUT[0] & PWM_PSEL_OUT_CONNECT_Msk) && (PWM[device]->PSEL.OUT[1] & PWM_PSEL_OUT_CONNECT_Msk) &&
(PWM[device]->PSEL.OUT[2] & PWM_PSEL_OUT_CONNECT_Msk) && (PWM[device]->PSEL.OUT[3] & PWM_PSEL_OUT_CONNECT_Msk) ) {
diff --git a/ports/nrf/common-hal/pulseio/PWMOut.c b/ports/nrf/common-hal/pulseio/PWMOut.c
index cf2330934..5485a75d0 100644
--- a/ports/nrf/common-hal/pulseio/PWMOut.c
+++ b/ports/nrf/common-hal/pulseio/PWMOut.c
@@ -58,7 +58,7 @@ STATIC uint16_t pwm_seq[MP_ARRAY_SIZE(pwms)][CHANNELS_PER_PWM];
static uint8_t never_reset_pwm[MP_ARRAY_SIZE(pwms)];
void common_hal_pulseio_pwmout_never_reset(pulseio_pwmout_obj_t *self) {
- for(int i=0; i < MP_ARRAY_SIZE(pwms); i++) {
+ for(size_t i=0; i < MP_ARRAY_SIZE(pwms); i++) {
NRF_PWM_Type* pwm = pwms[i];
if (pwm == self->pwm) {
never_reset_pwm[i] += 1;
@@ -69,7 +69,7 @@ void common_hal_pulseio_pwmout_never_reset(pulseio_pwmout_obj_t *self) {
}
void common_hal_pulseio_pwmout_reset_ok(pulseio_pwmout_obj_t *self) {
- for(int i=0; i < MP_ARRAY_SIZE(pwms); i++) {
+ for(size_t i=0; i < MP_ARRAY_SIZE(pwms); i++) {
NRF_PWM_Type* pwm = pwms[i];
if (pwm == self->pwm) {
never_reset_pwm[i] -= 1;
@@ -78,7 +78,7 @@ void common_hal_pulseio_pwmout_reset_ok(pulseio_pwmout_obj_t *self) {
}
void pwmout_reset(void) {
- for(int i=0; i < MP_ARRAY_SIZE(pwms); i++) {
+ for(size_t i=0; i < MP_ARRAY_SIZE(pwms); i++) {
if (never_reset_pwm[i] > 0) {
continue;
}
diff --git a/ports/nrf/common-hal/pulseio/PulseIn.c b/ports/nrf/common-hal/pulseio/PulseIn.c
index 6e5825af6..383966831 100644
--- a/ports/nrf/common-hal/pulseio/PulseIn.c
+++ b/ports/nrf/common-hal/pulseio/PulseIn.c
@@ -44,7 +44,7 @@ static pulseio_pulsein_obj_t* _objs[GPIOTE_CH_NUM];
// return index of the object in array
static int _find_pulsein_obj(pulseio_pulsein_obj_t* obj) {
- for(int i = 0; i < NRFX_ARRAY_SIZE(_objs); i++ ) {
+ for(size_t i = 0; i < NRFX_ARRAY_SIZE(_objs); i++ ) {
if ( _objs[i] == obj) {
return i;
}
@@ -63,7 +63,7 @@ static void _pulsein_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action
current_us = 1000 - current_us;
pulseio_pulsein_obj_t* self = NULL;
- for(int i = 0; i < NRFX_ARRAY_SIZE(_objs); i++ ) {
+ for(size_t i = 0; i < NRFX_ARRAY_SIZE(_objs); i++ ) {
if ( _objs[i] && _objs[i]->pin == pin ) {
self = _objs[i];
break;
diff --git a/ports/nrf/mpconfigport.h b/ports/nrf/mpconfigport.h
index ed2f74c57..bec4cf7f7 100644
--- a/ports/nrf/mpconfigport.h
+++ b/ports/nrf/mpconfigport.h
@@ -4,6 +4,7 @@
* The MIT License (MIT)
*
* Copyright (c) 2015 Glenn Ruben Bakke
+ * Copyright (c) 2019 Dan Halbert for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,105 +28,18 @@
#ifndef NRF5_MPCONFIGPORT_H__
#define NRF5_MPCONFIGPORT_H__
-#include <mpconfigboard.h>
-
-// options to control how MicroPython is built
-#define MICROPY_ALLOC_PATH_MAX (512)
-#define MICROPY_PERSISTENT_CODE_LOAD (1)
-#define MICROPY_EMIT_THUMB (0)
-#define MICROPY_EMIT_INLINE_THUMB (0)
-#define MICROPY_COMP_MODULE_CONST (0)
-#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (0)
-#define MICROPY_READER_VFS (MICROPY_VFS)
-#define MICROPY_ENABLE_GC (1)
-#define MICROPY_ENABLE_FINALISER (1)
-#define MICROPY_STACK_CHECK (0)
-#define MICROPY_HELPER_REPL (1)
-#define MICROPY_REPL_EMACS_KEYS (0)
-#define MICROPY_REPL_AUTO_INDENT (1)
-#define MICROPY_ENABLE_SOURCE_LINE (1)
-//CP UPDATE: See mpconfigport.h for LONGINT implementation
-#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_MPZ)
-#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_FLOAT)
-#define MICROPY_FLOAT_HIGH_QUALITY_HASH (1)
-
-#define MICROPY_OPT_COMPUTED_GOTO (0)
-#define MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE (0)
-#define MICROPY_OPT_MPZ_BITWISE (0)
-
-// fatfs configuration used in ffconf.h
-#define MICROPY_FATFS_ENABLE_LFN (1)
-#define MICROPY_FATFS_LFN_CODE_PAGE (437) /* 1=SFN/ANSI 437=LFN/U.S.(OEM) */
-#define MICROPY_FATFS_USE_LABEL (1)
-#define MICROPY_FATFS_RPATH (2)
-#define MICROPY_FATFS_MULTI_PARTITION (1)
-#define MICROPY_FATFS_NUM_PERSISTENT (1)
-
-//#define MICROPY_FATFS_MAX_SS (4096)
-#define FILESYSTEM_BLOCK_SIZE (512)
-
-#define MICROPY_VFS (1)
-#define MICROPY_VFS_FAT (MICROPY_VFS)
-
-// use vfs's functions for import stat and builtin open
-#if MICROPY_VFS
-#define mp_import_stat mp_vfs_import_stat
-#define mp_builtin_open mp_vfs_open
-#define mp_builtin_open_obj mp_vfs_open_obj
-#endif
-
#define MICROPY_CPYTHON_COMPAT (1)
-#define MICROPY_STREAMS_NON_BLOCK (1)
-#define MICROPY_MODULE_WEAK_LINKS (1)
-#define MICROPY_CAN_OVERRIDE_BUILTINS (1)
-#define MICROPY_USE_INTERNAL_ERRNO (0)
+//#define MICROPY_MODULE_BUILTIN_INIT (1) // TODO check this
+//#define MICROPY_MODULE_WEAK_LINKS (1) // TODO check this
+#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1)
#define MICROPY_PY_FUNCTION_ATTRS (1)
-#define MICROPY_PY_BUILTINS_STR_UNICODE (1)
-#define MICROPY_PY_BUILTINS_STR_CENTER (1)
-#define MICROPY_PY_BUILTINS_STR_PARTITION (1)
-#define MICROPY_PY_BUILTINS_STR_SPLITLINES (1)
-#define MICROPY_PY_BUILTINS_MEMORYVIEW (1)
-#define MICROPY_PY_BUILTINS_FROZENSET (1)
-#define MICROPY_PY_BUILTINS_EXECFILE (0)
-#define MICROPY_PY_BUILTINS_COMPILE (1)
-#define MICROPY_PY_BUILTINS_HELP (1)
-#define MICROPY_PY_BUILTINS_HELP_MODULES (1)
-#define MICROPY_PY_BUILTINS_INPUT (1)
-#define MICROPY_MODULE_BUILTIN_INIT (1)
+#define MICROPY_PY_IO (1)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
-#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
-#define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
-#define MICROPY_PY_ARRAY_SLICE_ASSIGN (1)
-#define MICROPY_NONSTANDARD_TYPECODES (0)
-#define MICROPY_PY_BUILTINS_SLICE_ATTRS (1)
-#define MICROPY_PY_SYS_EXIT (1)
-#define MICROPY_PY_SYS_MAXSIZE (1)
-#define MICROPY_PY_SYS_STDFILES (1)
#define MICROPY_PY_SYS_STDIO_BUFFER (1)
-#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1)
-#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (0)
-#define MICROPY_PY_CMATH (0)
-#define MICROPY_PY_IO (1)
-#define MICROPY_PY_IO_FILEIO (1)
-#define MICROPY_PY_UERRNO (0)
#define MICROPY_PY_UBINASCII (1)
-#define MICROPY_PY_URANDOM (0)
-#define MICROPY_PY_URANDOM_EXTRA_FUNCS (0)
-#define MICROPY_PY_UCTYPES (0)
-#define MICROPY_PY_UZLIB (0)
#define MICROPY_PY_UJSON (1)
-#define MICROPY_PY_URE (1)
-#define MICROPY_PY_UHEAPQ (0)
-#define MICROPY_PY_UHASHLIB (0)
-// This is py/modstruct.c, not shared-bindings/struct/
-#define MICROPY_PY_STRUCT (0)
-#define MICROPY_PY_FRAMEBUF (0)
-
-#define MICROPY_KBD_EXCEPTION (1)
-
-// Scan gamepad every 32ms
-#define CIRCUITPY_GAMEPAD_TICKS 0x1f
+// TODO this is old BLE stuff
#if BLUETOOTH_SD
#define MICROPY_PY_BLEIO (1)
#define MICROPY_PY_BLE_NUS (0)
@@ -135,114 +49,13 @@
#endif
#endif
-
-// type definitions for the specific machine
-
-#define BYTES_PER_WORD (4)
-
-#define MICROPY_MAKE_POINTER_CALLABLE(p) ((void*)((mp_uint_t)(p) | 1))
-
-#define MP_SSIZE_MAX (0x7fffffff)
-
-#define UINT_FMT "%u"
-#define INT_FMT "%d"
-#define HEX2_FMT "%02x"
-
-typedef int mp_int_t; // must be pointer size
-typedef unsigned int mp_uint_t; // must be pointer size
-typedef long mp_off_t;
-
-#define MP_PLAT_PRINT_STRN(str, len) mp_hal_stdout_tx_strn_cooked(str, len)
-#define mp_type_fileio mp_type_vfs_fat_fileio
-#define mp_type_textio mp_type_vfs_fat_textio
-
-// extra built in modules to add to the list of known ones
-
-extern const struct _mp_obj_module_t microcontroller_module;
-extern const struct _mp_obj_module_t bitbangio_module;
-extern const struct _mp_obj_module_t analogio_module;
-extern const struct _mp_obj_module_t digitalio_module;
-extern const struct _mp_obj_module_t displayio_module;
-extern const struct _mp_obj_module_t pulseio_module;
-extern const struct _mp_obj_module_t busio_module;
-extern const struct _mp_obj_module_t board_module;
-extern const struct _mp_obj_module_t os_module;
-extern const struct _mp_obj_module_t random_module;
-extern const struct _mp_obj_module_t rotaryio_module;
-extern const struct _mp_obj_module_t storage_module;
-extern const struct _mp_obj_module_t struct_module;
-extern const struct _mp_obj_module_t time_module;
-extern const struct _mp_obj_module_t supervisor_module;
-extern const struct _mp_obj_module_t gamepad_module;
-extern const struct _mp_obj_module_t neopixel_write_module;
-extern const struct _mp_obj_module_t usb_hid_module;
-extern const struct _mp_obj_module_t usb_midi_module;
-extern const struct _mp_obj_module_t bleio_module;
-extern const struct _mp_obj_module_t touchio_module;
-
-
-#if MICROPY_PY_BLEIO
-#define BLEIO_MODULE { MP_ROM_QSTR(MP_QSTR_bleio), MP_ROM_PTR(&bleio_module) },
-#else
-#define BLEIO_MODULE
-#endif
-
-#ifdef NRF52840_XXAA
-#define USBHID_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_usb_hid), (mp_obj_t)&usb_hid_module },
-#else
-#define USBHID_MODULE
-#endif
-
-#define MICROPY_PORT_BUILTIN_MODULES \
- { MP_OBJ_NEW_QSTR (MP_QSTR_board ), (mp_obj_t)&board_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_busio ), (mp_obj_t)&busio_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_analogio ), (mp_obj_t)&analogio_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_digitalio ), (mp_obj_t)&digitalio_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_displayio ), (mp_obj_t)&displayio_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_pulseio ), (mp_obj_t)&pulseio_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_microcontroller ), (mp_obj_t)&microcontroller_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_neopixel_write ), (mp_obj_t)&neopixel_write_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_bitbangio ), (mp_obj_t)&bitbangio_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_os ), (mp_obj_t)&os_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_random ), (mp_obj_t)&random_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_rotaryio ), (mp_obj_t)&rotaryio_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_storage ), (mp_obj_t)&storage_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_struct ), (mp_obj_t)&struct_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_supervisor ), (mp_obj_t)&supervisor_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_gamepad ), (mp_obj_t)&gamepad_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_time ), (mp_obj_t)&time_module }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_json ), (mp_obj_t)&mp_module_ujson }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_touchio ), (mp_obj_t)&touchio_module }, \
- USBHID_MODULE \
- { MP_OBJ_NEW_QSTR(MP_QSTR_usb_midi),(mp_obj_t)&usb_midi_module }, \
- BLEIO_MODULE
-
-// extra built in names to add to the global namespace
-#define MICROPY_PORT_BUILTINS \
- { MP_ROM_QSTR (MP_QSTR_help ), MP_ROM_PTR(&mp_builtin_help_obj) }, \
- { MP_OBJ_NEW_QSTR (MP_QSTR_input ), (mp_obj_t)&mp_builtin_input_obj }, \
- { MP_ROM_QSTR (MP_QSTR_open ), MP_ROM_PTR(&mp_builtin_open_obj) }, \
-
-#define MP_STATE_PORT MP_STATE_VM
-
-#include "supervisor/flash_root_pointers.h"
+// 24kiB stack
+#define CIRCUITPY_DEFAULT_STACK_SIZE 0x6000
#define MICROPY_PORT_ROOT_POINTERS \
- const char *readline_hist[8]; \
- mp_obj_t gamepad_singleton; \
- mp_obj_t terminal_tilegrid_tiles; \
- FLASH_ROOT_POINTERS \
-
-// We need to provide a declaration/definition of alloca()
-#include <alloca.h>
+ CIRCUITPY_COMMON_ROOT_POINTERS \
+ ;
-void run_background_tasks(void);
-#define MICROPY_VM_HOOK_LOOP run_background_tasks();
-#define MICROPY_VM_HOOK_RETURN run_background_tasks();
+#include "ports/circuitpy-common/mpconfig_circuitpy.h"
-//#define CIRCUITPY_BOOT_OUTPUT_FILE "/boot_out.txt"
-#define CIRCUITPY_DEFAULT_STACK_SIZE 4096
-#define CIRCUITPY_DISPLAYIO (1)
-#define CIRCUITPY_DISPLAY_LIMIT (3)
-
-#endif
+#endif // NRF5_MPCONFIGPORT_H__
diff --git a/ports/nrf/mpconfigport.mk b/ports/nrf/mpconfigport.mk
index f43e29fce..29b36ada8 100644
--- a/ports/nrf/mpconfigport.mk
+++ b/ports/nrf/mpconfigport.mk
@@ -3,6 +3,21 @@
# This should correspond to the MICROPY_LONGINT_IMPL definition in mpconfigport.h.
MPY_TOOL_LONGINT_IMPL = -mlongint-impl=mpz
-INTERNAL_LIBM = (1)
+INTERNAL_LIBM = 1
USB_SERIAL_NUMBER_LENGTH = 16
+
+# No DAC, so no regular audio.
+CIRCUITPY_AUDIOIO = 0
+
+# No I2S yet.
+CIRCUITPY_AUDIOBUSIO = 0
+
+# No I2CSlave implementation
+CIRCUITPY_I2CSLAVE = 0
+
+# nvm not yet implemented
+CIRCUITPY_NVM = 0
+
+# rtc not yet implemented
+CIRCUITPY_RTC = 0
diff --git a/ports/nrf/supervisor/internal_flash.c b/ports/nrf/supervisor/internal_flash.c
index 5faae8a4e..4351f3da6 100644
--- a/ports/nrf/supervisor/internal_flash.c
+++ b/ports/nrf/supervisor/internal_flash.c
@@ -71,7 +71,7 @@ uint32_t supervisor_flash_get_block_count(void) {
}
#ifdef BLUETOOTH_SD
-STATIC bool wait_for_flash_operation() {
+STATIC bool wait_for_flash_operation(void) {
do {
sd_app_evt_wait();
uint32_t evt_id;
diff --git a/shared-bindings/bleio/Address.c b/shared-bindings/bleio/Address.c
index 6cf495d83..b7c76b7b2 100644
--- a/shared-bindings/bleio/Address.c
+++ b/shared-bindings/bleio/Address.c
@@ -88,7 +88,7 @@ STATIC mp_obj_t bleio_address_make_new(const mp_obj_type_t *type, size_t n_args,
GET_STR_DATA_LEN(address, str, str_len);
size_t value_index = 0;
- size_t str_index = str_len;
+ int str_index = str_len;
bool error = false;
// Loop until fewer than two characters left.
@@ -138,7 +138,7 @@ STATIC mp_obj_t bleio_address_make_new(const mp_obj_type_t *type, size_t n_args,
STATIC void bleio_address_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
bleio_address_obj_t *self = MP_OBJ_TO_PTR(self_in);
- mp_printf(print, "Address('"HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT"')",
+ mp_printf(print, "Address('%02x:%02x:%02x:%02x:%02x:%02x')",
self->value[5], self->value[4], self->value[3],
self->value[2], self->value[1], self->value[0]);
}
diff --git a/shared-bindings/bleio/ScanEntry.c b/shared-bindings/bleio/ScanEntry.c
index b4a3c5504..3a57711ae 100644
--- a/shared-bindings/bleio/ScanEntry.c
+++ b/shared-bindings/bleio/ScanEntry.c
@@ -108,7 +108,7 @@ STATIC mp_obj_t scanentry_get_name(mp_obj_t self_in);
STATIC void bleio_scanentry_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
bleio_scanentry_obj_t *self = (bleio_scanentry_obj_t *)self_in;
- mp_printf(print, "ScanEntry(address: "HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT"",
+ mp_printf(print, "ScanEntry(address: %02x:%02x:%02x:%02x:%02x:%02x",
self->address.value[5], self->address.value[4], self->address.value[3],
self->address.value[1], self->address.value[1], self->address.value[0]);
diff --git a/shared-bindings/bleio/UUID.c b/shared-bindings/bleio/UUID.c
index 8b868a1ae..c6ad9e626 100644
--- a/shared-bindings/bleio/UUID.c
+++ b/shared-bindings/bleio/UUID.c
@@ -79,7 +79,7 @@ STATIC mp_obj_t bleio_uuid_make_new(const mp_obj_type_t *type, size_t n_args, co
len == 36 && chars[8] == '-' && chars[13] == '-' && chars[18] == '-' && chars[23] == '-';
if (good_uuid) {
size_t hex_idx = 0;
- for (int i = 0; i < len; i++) {
+ for (size_t i = 0; i < len; i++) {
if (unichar_isxdigit(chars[i])) {
hex[hex_idx] = chars[i];
hex_idx++;