| # Used except --with-libf7=no |
| |
| avrsrc := $(srcdir)/config/avr |
| |
| libf7 := $(avrsrc)/libf7 |
| |
| F7_PREFIX = __f7_ |
| |
| include $(libf7)/libf7-common.mk |
| |
| LIBF7_DF_CONV += floatundidf floatdidf # floatunsidf floatsidf |
| |
| # Wrappers like f7_lt_impl for f7_lt etc. because the latter is inline. |
| LIBF7_DF_CMP += lt le gt ge ne eq unord |
| |
| F7_C_PARTS += $(LIBF7_DF_CONV) $(LIBF7_DF_CMP) |
| |
| # -mcall-prologues |
| CALL_PROLOGUES += $(LIBF7_DF_CONV) |
| |
| # -Wno-missing-prototypes |
| NO_PROTO += $(LIBF7_DF_CONV) |
| |
| F7F += le_impl lt_impl gt_impl ge_impl ne_impl eq_impl unord_impl |
| |
| |
| $(libf7)/f7-renames.h: $(libf7)/f7renames.sh $(libf7)/libf7-common.mk |
| $< head $(F7_PREFIX) t-libf7 > $@ |
| $< c $(F7_PREFIX) $(F7F) >> $@ |
| $< cst $(F7_PREFIX) $(F7F_cst) >> $@ |
| $< asm $(F7_PREFIX) $(F7F_asm) >> $@ |
| $< tail $(F7_PREFIX) >> $@ |
| |
| # The right-hand sides like g_ddd come from libf7-common.mk. |
| # The _m_ wraps are added by t-libf7-math |
| |
| # __adddf3, ... |
| F7_ASM_WRAPS_g_ddd += $(g_ddd) |
| |
| # __ltdf2, ... |
| F7_ASM_WRAPS_g_xdd_cmp += $(g_xdd_cmp) |
| |
| # __floatsidf, ... |
| F7_ASM_WRAPS_g_dx += $(g_dx) |
| |
| # __fixdfsi, ... |
| F7_ASM_WRAPS_g_xd += $(g_xd) |
| |
| $(libf7)/f7-wraps.h: $(libf7)/f7wraps.sh \ |
| $(libf7)/libf7-common.mk $(libf7)/t-libf7-math |
| $< header "WITH_LIBF7_MATH_FUNCTIONS=$(WITH_LIBF7_MATH_FUNCTIONS)" "WITH_LIBF7_MATH_SYMBOLS=$(WITH_LIBF7_MATH_SYMBOLS)" > $@ |
| $< ddd_libgcc $(F7_ASM_WRAPS_g_ddd) >> $@ |
| $< xdd_libgcc_cmp $(F7_ASM_WRAPS_g_xdd_cmp) >> $@ |
| $< xd_libgcc $(F7_ASM_WRAPS_g_xd) >> $@ |
| $< dx_libgcc $(F7_ASM_WRAPS_g_dx) >> $@ |
| $< ddd_math $(F7_ASM_WRAPS_m_ddd) >> $@ |
| $< ddx_math $(F7_ASM_WRAPS_m_ddx) >> $@ |
| $< dd_math $(F7_ASM_WRAPS_m_dd) >> $@ |
| $< xd_math $(F7_ASM_WRAPS_m_xd) >> $@ |
| |
| F7_ASM_WRAPS += $(F7_ASM_WRAPS_g_xd) |
| F7_ASM_WRAPS += $(F7_ASM_WRAPS_g_dx) |
| F7_ASM_WRAPS += $(F7_ASM_WRAPS_g_ddd) |
| F7_ASM_WRAPS += $(F7_ASM_WRAPS_g_xdd_cmp) |
| F7_ASM_WRAPS += $(F7_ASM_WRAPS_m_ddd) |
| F7_ASM_WRAPS += $(F7_ASM_WRAPS_m_ddx) |
| F7_ASM_WRAPS += $(F7_ASM_WRAPS_m_dd) |
| F7_ASM_WRAPS += $(F7_ASM_WRAPS_m_xd) |
| |
| F7_ASM_PARTS += $(patsubst %, D_%, $(F7_ASM_WRAPS)) |
| |
| # Options |
| F7_FLAGS += -I $(libf7) -save-temps=obj |
| |
| # t-avr::HOST_LIBGCC2_CFLAGS sets -mcall-prologues which will inhibits |
| # tail-call optimizations. The user could get it with -mrelax, but we |
| # just switch it off here and then explicitly on again for the |
| # CALL_PROLOGUES modules. |
| |
| F7_C_FLAGS += $(F7_FLAGS) \ |
| -dp -g0 \ |
| -mno-call-prologues \ |
| -fno-lto -Os \ |
| -fdata-sections -ffunction-sections \ |
| -fno-reorder-blocks \ |
| -fno-tree-loop-optimize \ |
| -fno-tree-loop-im -fno-move-loop-invariants |
| |
| F7_ASM_FLAGS += $(F7_FLAGS) |
| |
| $(patsubst %, f7_c_%.o, $(CALL_PROLOGUES)) \ |
| : F7_C_FLAGS += -mcall-prologues |
| |
| $(patsubst %, f7_c_%.o, $(STRICT_X)) \ |
| : F7_C_FLAGS += -mstrict-X |
| |
| $(patsubst %, f7_c_%.o, $(NO_PROTO)) \ |
| : F7_C_FLAGS += -Wno-missing-prototypes |
| |
| # Depends will be worked out by the libgcc build system. |
| |
| F7_C_OBJECTS = $(patsubst %, f7_c_%$(objext), $(F7_C_PARTS)) |
| F7_ASM_OBJECTS = $(patsubst %, f7_asm_%$(objext), $(F7_ASM_PARTS)) |
| |
| $(F7_ASM_OBJECTS) $(F7_C_OBJECTS) : $(libf7)/t-libf7 |
| $(F7_ASM_OBJECTS) $(F7_C_OBJECTS) : $(libf7)/t-libf7-math |
| $(F7_ASM_OBJECTS) $(F7_C_OBJECTS) : $(libf7)/t-libf7-math-symbols |
| |
| .PHONY: log_vars |
| |
| all: log_vars |
| |
| log_vars: |
| $(info # libf7: WITH_LIBF7_MATH_FUNCTIONS = $(WITH_LIBF7_MATH_FUNCTIONS)) |
| $(info # libf7: WITH_LIBF7_MATH_SYMBOLS = $(WITH_LIBF7_MATH_SYMBOLS)) |
| $(info # libf7: F7_C_PARTS = $(F7_C_PARTS)) |
| $(info # libf7: F7_C_OBJECTS = $(F7_C_OBJECTS)) |
| $(info # libf7: F7_ASM_PARTS = $(F7_ASM_PARTS)) |
| $(info # libf7: F7_ASM_OBJECTS = $(F7_ASM_OBJECTS)) |
| |
| # Build the libf7 C objects and add them to libgcc.a. |
| |
| f7_parts := $(F7_C_PARTS) |
| |
| iter-items := $(f7_parts) |
| iter-labels := $(f7_parts) |
| |
| -include $(patsubst %,$(libf7)/libf7-c-object.mk,$(iter-items)) |
| |
| libgcc-objects += $(patsubst %,f7_c_%$(objext),$(F7_C_PARTS)) |
| |
| # Build the libf7 ASM objects and add them to libgcc.a. |
| |
| f7_parts := $(F7_ASM_PARTS) |
| |
| iter-items := $(f7_parts) |
| iter-labels := $(f7_parts) |
| |
| -include $(patsubst %,$(libf7)/libf7-asm-object.mk,$(iter-items)) |
| |
| libgcc-objects += $(patsubst %,f7_asm_%$(objext),$(F7_ASM_PARTS)) |
| |
| .PHONY: clean-f7 |
| |
| clean: clean-f7 |
| |
| clean-f7: |
| rm -f $(wildcard f7_*.i f7_*.s f7_*.o) |
| |
| # Get rid if any DFmode remains. |
| |
| LIB2FUNCS_EXCLUDE += \ |
| _sf_to_df \ |
| _fixdfdi \ |
| _fixunsdfsi \ |
| _floatundidf \ |
| _fixunsdfdi \ |
| _floatdidf \ |
| _powidf2 |