diff --git a/extmod/extmod.cmake b/extmod/extmod.cmake index b9a1d6703..ac10faa86 100644 --- a/extmod/extmod.cmake +++ b/extmod/extmod.cmake @@ -62,6 +62,41 @@ set(MICROPY_SOURCE_EXTMOD ${MICROPY_EXTMOD_DIR}/nimble/modbluetooth_nimble.c ) +# Single-precision libm math library. + +set(MICROPY_SOURCE_LIB_LIBM + ${MICROPY_DIR}/lib/libm/acoshf.c + ${MICROPY_DIR}/lib/libm/asinfacosf.c + ${MICROPY_DIR}/lib/libm/asinhf.c + ${MICROPY_DIR}/lib/libm/atan2f.c + ${MICROPY_DIR}/lib/libm/atanf.c + ${MICROPY_DIR}/lib/libm/atanhf.c + ${MICROPY_DIR}/lib/libm/ef_rem_pio2.c + ${MICROPY_DIR}/lib/libm/erf_lgamma.c + ${MICROPY_DIR}/lib/libm/fmodf.c + ${MICROPY_DIR}/lib/libm/kf_cos.c + ${MICROPY_DIR}/lib/libm/kf_rem_pio2.c + ${MICROPY_DIR}/lib/libm/kf_sin.c + ${MICROPY_DIR}/lib/libm/kf_tan.c + ${MICROPY_DIR}/lib/libm/log1pf.c + ${MICROPY_DIR}/lib/libm/math.c + ${MICROPY_DIR}/lib/libm/nearbyintf.c + ${MICROPY_DIR}/lib/libm/roundf.c + ${MICROPY_DIR}/lib/libm/sf_cos.c + ${MICROPY_DIR}/lib/libm/sf_erf.c + ${MICROPY_DIR}/lib/libm/sf_frexp.c + ${MICROPY_DIR}/lib/libm/sf_ldexp.c + ${MICROPY_DIR}/lib/libm/sf_modf.c + ${MICROPY_DIR}/lib/libm/sf_sin.c + ${MICROPY_DIR}/lib/libm/sf_tan.c + ${MICROPY_DIR}/lib/libm/wf_lgamma.c + ${MICROPY_DIR}/lib/libm/wf_tgamma.c +) + +# Choose only one of these sqrt implementations, software or hardware. +set(MICROPY_SOURCE_LIB_LIBM_SQRT_SW ${MICROPY_DIR}/lib/libm/ef_sqrt.c) +set(MICROPY_SOURCE_LIB_LIBM_SQRT_HW ${MICROPY_DIR}/lib/libm/thumb_vfp_sqrtf.c) + # Library for btree module and associated code if(MICROPY_PY_BTREE) diff --git a/extmod/extmod.mk b/extmod/extmod.mk index 7aba7d93e..9b1e51718 100644 --- a/extmod/extmod.mk +++ b/extmod/extmod.mk @@ -70,6 +70,96 @@ SRC_QSTR += $(SRC_EXTMOD_C) CFLAGS += $(CFLAGS_EXTMOD) $(CFLAGS_THIRDPARTY) LDFLAGS += $(LDFLAGS_EXTMOD) $(LDFLAGS_THIRDPARTY) +################################################################################ +# libm/libm_dbl math library + +# Single-precision math library. +SRC_LIB_LIBM_C += $(addprefix lib/libm/,\ + acoshf.c \ + asinfacosf.c \ + asinhf.c \ + atan2f.c \ + atanf.c \ + atanhf.c \ + ef_rem_pio2.c \ + erf_lgamma.c \ + fmodf.c \ + kf_cos.c \ + kf_rem_pio2.c \ + kf_sin.c \ + kf_tan.c \ + log1pf.c \ + math.c \ + nearbyintf.c \ + roundf.c \ + sf_cos.c \ + sf_erf.c \ + sf_frexp.c \ + sf_ldexp.c \ + sf_modf.c \ + sf_sin.c \ + sf_tan.c \ + wf_lgamma.c \ + wf_tgamma.c \ + ) + +# Choose only one of these sqrt implementations, software or hardware. +SRC_LIB_LIBM_SQRT_SW_C += lib/libm/ef_sqrt.c +SRC_LIB_LIBM_SQRT_HW_C += lib/libm/thumb_vfp_sqrtf.c + +# Double-precision math library. +SRC_LIB_LIBM_DBL_C += $(addprefix lib/libm_dbl/,\ + __cos.c \ + __expo2.c \ + __fpclassify.c \ + __rem_pio2.c \ + __rem_pio2_large.c \ + __signbit.c \ + __sin.c \ + __tan.c \ + acos.c \ + acosh.c \ + asin.c \ + asinh.c \ + atan.c \ + atan2.c \ + atanh.c \ + ceil.c \ + cos.c \ + cosh.c \ + copysign.c \ + erf.c \ + exp.c \ + expm1.c \ + floor.c \ + fmod.c \ + frexp.c \ + ldexp.c \ + lgamma.c \ + log.c \ + log10.c \ + log1p.c \ + modf.c \ + nearbyint.c \ + pow.c \ + rint.c \ + round.c \ + scalbn.c \ + sin.c \ + sinh.c \ + tan.c \ + tanh.c \ + tgamma.c \ + trunc.c \ + ) + +# Choose only one of these sqrt implementations, software or hardware. +SRC_LIB_LIBM_DBL_SQRT_SW_C += lib/libm_dbl/sqrt.c +SRC_LIB_LIBM_DBL_SQRT_HW_C += lib/libm_dbl/thumb_vfp_sqrt.c + +# Too many warnings in libm_dbl, disable for now. +$(BUILD)/lib/libm_dbl/%.o: CFLAGS += -Wno-double-promotion -Wno-float-conversion + ################################################################################ # VFS FAT FS