Skip to content

Commit ebfdd96

Browse files
committed
stmhal: Add possibility to build with double-precision floating point.
By default the firmware is built with single-precision floating point. To build a particular board using double precision instead, put the following line in the mpconfigboard.mk file: FLOAT_IMPL = double
1 parent 0451165 commit ebfdd96

2 files changed

Lines changed: 86 additions & 27 deletions

File tree

stmhal/Makefile

Lines changed: 84 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ INC += -I$(HAL_DIR)/inc
4848
INC += -I$(USBDEV_DIR)/core/inc -I$(USBDEV_DIR)/class/inc
4949
#INC += -I$(USBHOST_DIR)
5050

51-
CFLAGS_CORTEX_M = -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion
51+
CFLAGS_CORTEX_M = -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard
5252
CFLAGS_MCU_f4 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4 -DMCU_SERIES_F4
5353
CFLAGS_MCU_f7 = $(CFLAGS_CORTEX_M) -mtune=cortex-m7 -mcpu=cortex-m7 -DMCU_SERIES_F7
5454
CFLAGS_MCU_l4 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4 -DMCU_SERIES_L4
@@ -60,6 +60,13 @@ CFLAGS += $(COPT)
6060
CFLAGS += -Iboards/$(BOARD)
6161
CFLAGS += -DSTM32_HAL_H='<stm32$(MCU_SERIES)xx_hal.h>'
6262

63+
ifeq ($(FLOAT_IMPL),double)
64+
CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE
65+
else
66+
CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT
67+
CFLAGS += -fsingle-precision-constant -Wdouble-promotion
68+
endif
69+
6370
LDFLAGS = -nostdlib -L $(LD_DIR) -T $(LD_FILE) -Map=$(@:.elf=.map) --cref
6471
LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
6572

@@ -77,32 +84,6 @@ endif
7784

7885
SRC_LIB = $(addprefix lib/,\
7986
libc/string0.c \
80-
libm/math.c \
81-
libm/thumb_vfp_sqrtf.c \
82-
libm/asinfacosf.c \
83-
libm/atanf.c \
84-
libm/atan2f.c \
85-
libm/fmodf.c \
86-
libm/nearbyintf.c \
87-
libm/log1pf.c \
88-
libm/acoshf.c \
89-
libm/asinhf.c \
90-
libm/atanhf.c \
91-
libm/kf_rem_pio2.c \
92-
libm/kf_sin.c \
93-
libm/kf_cos.c \
94-
libm/kf_tan.c \
95-
libm/ef_rem_pio2.c \
96-
libm/erf_lgamma.c \
97-
libm/sf_sin.c \
98-
libm/sf_cos.c \
99-
libm/sf_tan.c \
100-
libm/sf_frexp.c \
101-
libm/sf_modf.c \
102-
libm/sf_ldexp.c \
103-
libm/sf_erf.c \
104-
libm/wf_lgamma.c \
105-
libm/wf_tgamma.c \
10687
oofatfs/ff.c \
10788
oofatfs/option/unicode.c \
10889
mp-readline/readline.c \
@@ -113,6 +94,81 @@ SRC_LIB = $(addprefix lib/,\
11394
utils/sys_stdio_mphal.c \
11495
)
11596

97+
ifeq ($(FLOAT_IMPL),double)
98+
SRC_LIBM = $(addprefix lib/libm_dbl/,\
99+
__cos.c \
100+
__expo2.c \
101+
__fpclassify.c \
102+
__rem_pio2.c \
103+
__rem_pio2_large.c \
104+
__signbit.c \
105+
__sin.c \
106+
__tan.c \
107+
acos.c \
108+
acosh.c \
109+
asin.c \
110+
asinh.c \
111+
atan.c \
112+
atan2.c \
113+
atanh.c \
114+
ceil.c \
115+
cos.c \
116+
cosh.c \
117+
erf.c \
118+
exp.c \
119+
expm1.c \
120+
floor.c \
121+
fmod.c \
122+
frexp.c \
123+
ldexp.c \
124+
lgamma.c \
125+
log.c \
126+
log10.c \
127+
log1p.c \
128+
modf.c \
129+
nearbyint.c \
130+
pow.c \
131+
rint.c \
132+
scalbn.c \
133+
sin.c \
134+
sinh.c \
135+
sqrt.c \
136+
tan.c \
137+
tanh.c \
138+
tgamma.c \
139+
trunc.c \
140+
)
141+
else
142+
SRC_LIBM = $(addprefix lib/libm/,\
143+
math.c \
144+
thumb_vfp_sqrtf.c \
145+
acoshf.c \
146+
asinfacosf.c \
147+
asinhf.c \
148+
atan2f.c \
149+
atanf.c \
150+
atanhf.c \
151+
ef_rem_pio2.c \
152+
erf_lgamma.c \
153+
fmodf.c \
154+
kf_cos.c \
155+
kf_rem_pio2.c \
156+
kf_sin.c \
157+
kf_tan.c \
158+
log1pf.c \
159+
nearbyintf.c \
160+
sf_cos.c \
161+
sf_erf.c \
162+
sf_frexp.c \
163+
sf_ldexp.c \
164+
sf_modf.c \
165+
sf_sin.c \
166+
sf_tan.c \
167+
wf_lgamma.c \
168+
wf_tgamma.c \
169+
)
170+
endif
171+
116172
EXTMOD_SRC_C = $(addprefix extmod/,\
117173
modonewire.c \
118174
)
@@ -258,6 +314,7 @@ endif
258314
OBJ =
259315
OBJ += $(PY_O)
260316
OBJ += $(addprefix $(BUILD)/, $(SRC_LIB:.c=.o))
317+
OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
261318
OBJ += $(addprefix $(BUILD)/, $(EXTMOD_SRC_C:.c=.o))
262319
OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
263320
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))

stmhal/mpconfigport.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@
6565
#define MICROPY_REPL_AUTO_INDENT (1)
6666
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_MPZ)
6767
#define MICROPY_ENABLE_SOURCE_LINE (1)
68+
#ifndef MICROPY_FLOAT_IMPL // can be configured by each board via mpconfigboard.mk
6869
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_FLOAT)
70+
#endif
6971
#define MICROPY_STREAMS_NON_BLOCK (1)
7072
#define MICROPY_MODULE_WEAK_LINKS (1)
7173
#define MICROPY_CAN_OVERRIDE_BUILTINS (1)

0 commit comments

Comments
 (0)