From a4abd5e34c4161ee5e64dde1722060471647f89f Mon Sep 17 00:00:00 2001 From: Damien Nicolet Date: Fri, 22 Dec 2017 22:19:55 +0100 Subject: [PATCH] Add option USE_LIBGCC to link agains libgcc instead of liba softfloat implementation. --- Makefile | 4 ++ build/targets.device.mak | 2 +- build/toolchain.arm-gcc.mak | 4 +- liba/Makefile.libgcc | 139 ++++++++++++++++++++++++++++++++++++ 4 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 liba/Makefile.libgcc diff --git a/Makefile b/Makefile index a55c41842..0fa75ba67 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,11 @@ ifeq ($(USE_LIBA),0) include liba/Makefile.bridge else SFLAGS += -ffreestanding -nostdinc -nostdlib +ifneq ($(USE_LIBGCC),0) +include liba/Makefile.libgcc +else include liba/Makefile +endif include libaxx/Makefile endif include ion/Makefile diff --git a/build/targets.device.mak b/build/targets.device.mak index 7e610b06d..5a277dd20 100644 --- a/build/targets.device.mak +++ b/build/targets.device.mak @@ -23,7 +23,7 @@ products += $(patsubst %.$(EXE),%.map,$(filter %.$(EXE),$(products))) %.map: %.elf @echo "LDMAP $@" - $(Q) $(LD) $^ $(LDFLAGS) -M -Map $@ -o /dev/null + $(Q) $(LD) $^ $(LDFLAGS) -Wl,-M -Wl,-Map=$@ -o /dev/null .PHONY: %_memory_map %_memory_map: %.map diff --git a/build/toolchain.arm-gcc.mak b/build/toolchain.arm-gcc.mak index 845994b2d..b01b6d00b 100644 --- a/build/toolchain.arm-gcc.mak +++ b/build/toolchain.arm-gcc.mak @@ -1,6 +1,6 @@ CC = arm-none-eabi-gcc CXX = arm-none-eabi-g++ -LD = arm-none-eabi-ld.bfd +LD = arm-none-eabi-gcc GDB = arm-none-eabi-gdb OBJCOPY = arm-none-eabi-objcopy SIZE = arm-none-eabi-size @@ -9,6 +9,6 @@ ifeq ($(DEBUG),1) SFLAGS += -ggdb3 else SFLAGS += -fdata-sections -ffunction-sections -LDFLAGS += --gc-sections +LDFLAGS += -Wl,--gc-sections endif SFLAGS += -mthumb -march=armv7e-m -mfloat-abi=hard -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 diff --git a/liba/Makefile.libgcc b/liba/Makefile.libgcc new file mode 100644 index 000000000..0dd83e824 --- /dev/null +++ b/liba/Makefile.libgcc @@ -0,0 +1,139 @@ +SFLAGS += -Iliba/include + +liba/src/external/sqlite/mem5.o: CFLAGS += -w + +objs += $(addprefix liba/src/, \ + armv7m/setjmp.o \ + armv7m/longjmp.o \ + assert.o \ + bzero.o \ + ctype.o \ + errno.o \ + fpclassify.o \ + fpclassifyf.o \ + ieee754.o \ + malloc.o \ + memcmp.o \ + memcpy.o \ + memmove.o \ + memset.o \ + nearbyint.o \ + nearbyintf.o \ + strcmp.o \ + strchr.o \ + strlcpy.o \ + strlen.o \ + external/sqlite/mem5.o \ +) + +objs += $(addprefix liba/src/external/openbsd/, \ + b_exp__D.o \ + b_log__D.o \ + b_tgamma.o \ + e_acosf.o \ + e_acoshf.o \ + e_asinf.o \ + e_atanhf.o \ + e_atan2.o \ + e_atan2f.o \ + e_coshf.o \ + e_expf.o \ + e_fmod.o \ + e_fmodf.o \ + e_lgammaf_r.o \ + e_log10f.o \ + e_log2.o \ + e_logf.o \ + e_powf.o \ + e_rem_pio2f.o \ + e_scalb.o \ + e_sinhf.o \ + e_sqrtf.o \ + k_cosf.o \ + k_rem_pio2f.o \ + k_sinf.o \ + k_tanf.o \ + s_asinhf.o\ + s_atanf.o \ + s_ceilf.o \ + s_copysignf.o \ + s_cosf.o \ + s_erf.o \ + s_expm1f.o\ + s_fabsf.o \ + s_floorf.o \ + s_frexpf.o \ + s_frexp.o \ + s_log1pf.o \ + s_logb.o \ + s_modf.o \ + s_modff.o \ + s_rint.o \ + s_roundf.o \ + s_scalbnf.o \ + s_signgam.o \ + s_sinf.o \ + s_tanf.o \ + s_tanhf.o \ + s_trunc.o \ + s_truncf.o \ + w_lgammaf.o \ +) + +objs += $(addprefix liba/src/external/openbsd/, \ + e_acos.o \ + e_acosh.o \ + e_asin.o \ + e_atanh.o \ + e_cosh.o \ + e_exp.o \ + e_lgamma_r.o \ + e_log.o \ + e_log10.o \ + e_pow.o \ + e_rem_pio2.o \ + e_sinh.o \ + e_sqrt.o \ + k_cos.o \ + k_rem_pio2.o \ + k_sin.o \ + k_tan.o \ + s_asinh.o \ + s_atan.o \ + s_ceil.o \ + s_copysign.o \ + s_cos.o \ + s_expm1.o \ + s_fabs.o \ + s_floor.o \ + s_log1p.o \ + s_round.o \ + s_scalbn.o \ + s_sin.o \ + s_tan.o \ + s_tanh.o \ + w_lgamma.o \ +) + +liba/src/external/openbsd/%.o: SFLAGS := -Iliba/src/external/openbsd/include $(SFLAGS) +liba/src/external/openbsd/%.o: CFLAGS += -w + +tests += $(addprefix liba/test/, \ + aeabi.c \ + double.c \ + ieee754.c \ + long.c \ + math.c \ + setjmp.c \ + stddef.c \ + stdint.c \ + strlcpy.c \ +) + +# The use of aeabi-rt could be made conditional to an AEABI target. +# In practice we're always using liba on such a target. +objs += $(addprefix liba/src/aeabi-rt/, \ + atexit.o \ +) + +LDFLAGS+=-lgcc