Skip to content

Commit dbd3f15

Browse files
dhalberttannewt
authored andcommitted
1. Use lib/libm for small (non-Express builds) to gain back a lot of flash space.
2. Add flag INTERNAL_LIBM to mpconfigboard.mk files to signal using lib/libm. 3. Fix floating-point warnings in lib/libm 4. Turn off -finline-limit, no longer needed due to 1. 5. Add explicit flags for SPI_FLASH_FILESYSTEM and INTERNAL_FLASH_FILESYSTEM to mpconfigboard.mk files, so they don't need to know the name of the .c file that implements those. Makefile takes care of checking the flags and including the right files.
1 parent 8f3be0a commit dbd3f15

File tree

16 files changed

+82
-18
lines changed

16 files changed

+82
-18
lines changed

atmel-samd/Makefile

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,12 @@ ifeq ($(DEBUG), 1)
135135
# -DMICROPY_DEBUG_MODULES may also be added to an -flto build, if you wish.
136136
CFLAGS += -Os -ggdb -DNDEBUG -DENABLE_MICRO_TRACE_BUFFER -DMICROPY_DEBUG_MODULES
137137
else
138-
# GCC_INLINE_LIMIT specifies -finline-limit, which can shrink the image size.
138+
# -finline-limit can shrink the image size.
139139
# -finline-limit=80 or so is similar to not having it on.
140140
# There is no simple default value, though.
141-
ifeq ($(FLASH_IMPL),internal_flash.c)
142-
GCC_INLINE_LIMIT = -finline-limit=19
141+
ifdef INTERNAL_FLASH_FILESYSTEM
142+
## Not currently needed
143+
## CFLAGS += -finline-limit=50
143144
endif
144145
CFLAGS += -Os -DNDEBUG -flto $(GCC_INLINE_LIMIT)
145146
endif
@@ -161,10 +162,14 @@ CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
161162
CFLAGS += -Wno-error=lto-type-mismatch
162163
endif
163164

164-
#LIBM_FILE_NAME = $(shell $(CC) $(CFLAGS) -print-file-name=libm.a)
165165
LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -mthumb -mcpu=cortex-m0plus -Lasf/thirdparty/CMSIS/Lib/GCC/ -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
166166
LIBS = -larm_cortexM0l_math -lm -lgcc -lc
167167

168+
# Use toolchain libm if we're not using our own.
169+
ifndef INTERNAL_LIBM
170+
LIBS += -lm
171+
endif
172+
168173
SRC_ASF = $(addprefix asf/sam0/,\
169174
drivers/adc/adc_sam_d_r/adc.c \
170175
drivers/dac/dac_sam_d_c/dac.c \
@@ -237,6 +242,16 @@ SRC_C = \
237242
lib/libc/string0.c \
238243
lib/mp-readline/readline.c
239244

245+
# Choose which flash filesystem impl to use.
246+
# (Right now INTERNAL_FLASH_FILESYSTEM and SPI_FLASH_FILESYSTEM are mutually exclusive.
247+
# But that might not be true in the future.)
248+
ifdef INTERNAL_FLASH_FILESYSTEM
249+
SRC_C += internal_flash.c
250+
endif
251+
ifdef SPI_FLASH_FILESYSTEM
252+
SRC_C += spi_flash.c
253+
endif
254+
240255
SRC_COMMON_HAL = \
241256
analogio/__init__.c \
242257
analogio/AnalogIn.c \
@@ -270,6 +285,30 @@ SRC_COMMON_HAL = \
270285
usb_hid/__init__.c \
271286
usb_hid/Device.c
272287

288+
ifdef INTERNAL_LIBM
289+
SRC_LIBM = $(addprefix lib/,\
290+
libm/math.c \
291+
libm/fmodf.c \
292+
libm/nearbyintf.c \
293+
libm/ef_sqrt.c \
294+
libm/kf_rem_pio2.c \
295+
libm/kf_sin.c \
296+
libm/kf_cos.c \
297+
libm/kf_tan.c \
298+
libm/ef_rem_pio2.c \
299+
libm/sf_sin.c \
300+
libm/sf_cos.c \
301+
libm/sf_tan.c \
302+
libm/sf_frexp.c \
303+
libm/sf_modf.c \
304+
libm/sf_ldexp.c \
305+
libm/asinfacosf.c \
306+
libm/atanf.c \
307+
libm/atan2f.c \
308+
)
309+
endif
310+
311+
273312
# These don't have corresponding files in each port but are still located in
274313
# shared-bindings to make it clear what the contents of the modules are.
275314
SRC_BINDINGS_ENUMS = \
@@ -304,6 +343,9 @@ OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
304343
OBJ += $(addprefix $(BUILD)/, $(SRC_ASF:.c=.o))
305344
OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_EXPANDED:.c=.o))
306345
OBJ += $(addprefix $(BUILD)/, $(SRC_SHARED_MODULE_EXPANDED:.c=.o))
346+
ifdef INTERNAL_LIBM
347+
OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
348+
endif
307349

308350
SRC_QSTR += $(SRC_C) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(STM_SRC_C)
309351

atmel-samd/boards/arduino_zero/mpconfigboard.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ LD_FILE = boards/samd21x18-bootloader.ld
22
USB_VID = 0x2341
33
USB_PID = 0x824D
44

5-
FLASH_IMPL = internal_flash.c
5+
INTERNAL_FLASH_FILESYSTEM = 1
6+
INTERNAL_LIBM = 1
67

78
CHIP_VARIANT = SAMD21G18A

atmel-samd/boards/circuitplayground_express/mpconfigboard.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
22
USB_VID = 0x239A
33
USB_PID = 0x8019
44

5-
FLASH_IMPL = spi_flash.c
5+
SPI_FLASH_FILESYSTEM = 1
66

77
CHIP_VARIANT = SAMD21G18A
88

atmel-samd/boards/feather_m0_adalogger/mpconfigboard.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ LD_FILE = boards/samd21x18-bootloader.ld
22
USB_VID = 0x239A
33
USB_PID = 0x8015
44

5-
FLASH_IMPL = internal_flash.c
5+
INTERNAL_FLASH_FILESYSTEM = 1
6+
INTERNAL_LIBM = 1
67

78
CHIP_VARIANT = SAMD21G18A

atmel-samd/boards/feather_m0_basic/mpconfigboard.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ LD_FILE = boards/samd21x18-bootloader.ld
22
USB_VID = 0x239A
33
USB_PID = 0x8015
44

5-
FLASH_IMPL = internal_flash.c
5+
INTERNAL_FLASH_FILESYSTEM = 1
6+
INTERNAL_LIBM = 1
67

78
CHIP_VARIANT = SAMD21G18A
89

atmel-samd/boards/feather_m0_express/mpconfigboard.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ LD_FILE = boards/samd21x18-bootloader-external-flash.ld
22
USB_VID = 0x239A
33
USB_PID = 0x801b
44

5-
FLASH_IMPL = spi_flash.c
5+
SPI_FLASH_FILESYTEM = 1
66

77
CHIP_VARIANT = SAMD21G18A

atmel-samd/boards/gemma_m0/mpconfigboard.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ LD_FILE = boards/samd21x18-bootloader.ld
22
USB_VID = 0x239A
33
USB_PID = 0x801D
44

5-
FLASH_IMPL = internal_flash.c
5+
INTERNAL_FLASH_FILESYSTEM = 1
6+
INTERNAL_LIBM = 1
67

78
CHIP_VARIANT = SAMD21E18A

atmel-samd/boards/metro_m0_express/mpconfigboard.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ LD_FILE = boards/samd21x18-bootloader-external-flash.ld
22
USB_VID = 0x239A
33
USB_PID = 0x8014
44

5-
FLASH_IMPL = spi_flash.c
5+
SPI_FLASH_FILESYSTEM = 1
66

77
CHIP_VARIANT = SAMD21G18A

atmel-samd/boards/trinket_m0/mpconfigboard.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ LD_FILE = boards/samd21x18-bootloader.ld
22
USB_VID = 0x239A
33
USB_PID = 0x801F
44

5-
FLASH_IMPL = internal_flash.c
5+
INTERNAL_FLASH_FILESYSTEM = 1
6+
INTERNAL_LIBM = 1
67

78
CHIP_VARIANT = SAMD21E18A

atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
22
USB_VID = 0x239A
33
USB_PID = 0x801F
44

5-
FLASH_IMPL = spi_flash.c
5+
SPI_FLASH_FILESYSTEM = 1
66

77
CHIP_VARIANT = SAMD21E18A
88
CHIP_FAMILY = samd21

0 commit comments

Comments
 (0)