1*4c3eb207Smrg# Used except --with-libf7=no 2*4c3eb207Smrg 3*4c3eb207Smrgavrsrc := $(srcdir)/config/avr 4*4c3eb207Smrg 5*4c3eb207Smrglibf7 := $(avrsrc)/libf7 6*4c3eb207Smrg 7*4c3eb207SmrgF7_PREFIX = __f7_ 8*4c3eb207Smrg 9*4c3eb207Smrginclude $(libf7)/libf7-common.mk 10*4c3eb207Smrg 11*4c3eb207SmrgLIBF7_DF_CONV += floatundidf floatdidf # floatunsidf floatsidf 12*4c3eb207Smrg 13*4c3eb207Smrg# Wrappers like f7_lt_impl for f7_lt etc. because the latter is inline. 14*4c3eb207SmrgLIBF7_DF_CMP += lt le gt ge ne eq unord 15*4c3eb207Smrg 16*4c3eb207SmrgF7_C_PARTS += $(LIBF7_DF_CONV) $(LIBF7_DF_CMP) 17*4c3eb207Smrg 18*4c3eb207Smrg# -mcall-prologues 19*4c3eb207SmrgCALL_PROLOGUES += $(LIBF7_DF_CONV) 20*4c3eb207Smrg 21*4c3eb207Smrg# -Wno-missing-prototypes 22*4c3eb207SmrgNO_PROTO += $(LIBF7_DF_CONV) 23*4c3eb207Smrg 24*4c3eb207SmrgF7F += le_impl lt_impl gt_impl ge_impl ne_impl eq_impl unord_impl 25*4c3eb207Smrg 26*4c3eb207Smrg 27*4c3eb207Smrg$(libf7)/f7-renames.h: $(libf7)/f7renames.sh $(libf7)/libf7-common.mk 28*4c3eb207Smrg $< head $(F7_PREFIX) t-libf7 > $@ 29*4c3eb207Smrg $< c $(F7_PREFIX) $(F7F) >> $@ 30*4c3eb207Smrg $< cst $(F7_PREFIX) $(F7F_cst) >> $@ 31*4c3eb207Smrg $< asm $(F7_PREFIX) $(F7F_asm) >> $@ 32*4c3eb207Smrg $< tail $(F7_PREFIX) >> $@ 33*4c3eb207Smrg 34*4c3eb207Smrg# The right-hand sides like g_ddd come from libf7-common.mk. 35*4c3eb207Smrg# The _m_ wraps are added by t-libf7-math 36*4c3eb207Smrg 37*4c3eb207Smrg# __adddf3, ... 38*4c3eb207SmrgF7_ASM_WRAPS_g_ddd += $(g_ddd) 39*4c3eb207Smrg 40*4c3eb207Smrg# __ltdf2, ... 41*4c3eb207SmrgF7_ASM_WRAPS_g_xdd_cmp += $(g_xdd_cmp) 42*4c3eb207Smrg 43*4c3eb207Smrg# __floatsidf, ... 44*4c3eb207SmrgF7_ASM_WRAPS_g_dx += $(g_dx) 45*4c3eb207Smrg 46*4c3eb207Smrg# __fixdfsi, ... 47*4c3eb207SmrgF7_ASM_WRAPS_g_xd += $(g_xd) 48*4c3eb207Smrg 49*4c3eb207Smrg$(libf7)/f7-wraps.h: $(libf7)/f7wraps.sh \ 50*4c3eb207Smrg $(libf7)/libf7-common.mk $(libf7)/t-libf7-math 51*4c3eb207Smrg $< header "WITH_LIBF7_MATH_FUNCTIONS=$(WITH_LIBF7_MATH_FUNCTIONS)" "WITH_LIBF7_MATH_SYMBOLS=$(WITH_LIBF7_MATH_SYMBOLS)" > $@ 52*4c3eb207Smrg $< ddd_libgcc $(F7_ASM_WRAPS_g_ddd) >> $@ 53*4c3eb207Smrg $< xdd_libgcc_cmp $(F7_ASM_WRAPS_g_xdd_cmp) >> $@ 54*4c3eb207Smrg $< xd_libgcc $(F7_ASM_WRAPS_g_xd) >> $@ 55*4c3eb207Smrg $< dx_libgcc $(F7_ASM_WRAPS_g_dx) >> $@ 56*4c3eb207Smrg $< ddd_math $(F7_ASM_WRAPS_m_ddd) >> $@ 57*4c3eb207Smrg $< ddx_math $(F7_ASM_WRAPS_m_ddx) >> $@ 58*4c3eb207Smrg $< dd_math $(F7_ASM_WRAPS_m_dd) >> $@ 59*4c3eb207Smrg $< xd_math $(F7_ASM_WRAPS_m_xd) >> $@ 60*4c3eb207Smrg 61*4c3eb207SmrgF7_ASM_WRAPS += $(F7_ASM_WRAPS_g_xd) 62*4c3eb207SmrgF7_ASM_WRAPS += $(F7_ASM_WRAPS_g_dx) 63*4c3eb207SmrgF7_ASM_WRAPS += $(F7_ASM_WRAPS_g_ddd) 64*4c3eb207SmrgF7_ASM_WRAPS += $(F7_ASM_WRAPS_g_xdd_cmp) 65*4c3eb207SmrgF7_ASM_WRAPS += $(F7_ASM_WRAPS_m_ddd) 66*4c3eb207SmrgF7_ASM_WRAPS += $(F7_ASM_WRAPS_m_ddx) 67*4c3eb207SmrgF7_ASM_WRAPS += $(F7_ASM_WRAPS_m_dd) 68*4c3eb207SmrgF7_ASM_WRAPS += $(F7_ASM_WRAPS_m_xd) 69*4c3eb207Smrg 70*4c3eb207SmrgF7_ASM_PARTS += $(patsubst %, D_%, $(F7_ASM_WRAPS)) 71*4c3eb207Smrg 72*4c3eb207Smrg# Options 73*4c3eb207SmrgF7_FLAGS += -I $(libf7) -save-temps=obj 74*4c3eb207Smrg 75*4c3eb207Smrg# t-avr::HOST_LIBGCC2_CFLAGS sets -mcall-prologues which will inhibits 76*4c3eb207Smrg# tail-call optimizations. The user could get it with -mrelax, but we 77*4c3eb207Smrg# just switch it off here and then explicitly on again for the 78*4c3eb207Smrg# CALL_PROLOGUES modules. 79*4c3eb207Smrg 80*4c3eb207SmrgF7_C_FLAGS += $(F7_FLAGS) \ 81*4c3eb207Smrg -dp -g0 \ 82*4c3eb207Smrg -mno-call-prologues \ 83*4c3eb207Smrg -fno-lto -Os \ 84*4c3eb207Smrg -fdata-sections -ffunction-sections \ 85*4c3eb207Smrg -fno-reorder-blocks \ 86*4c3eb207Smrg -fno-tree-loop-optimize \ 87*4c3eb207Smrg -fno-tree-loop-im -fno-move-loop-invariants 88*4c3eb207Smrg 89*4c3eb207SmrgF7_ASM_FLAGS += $(F7_FLAGS) 90*4c3eb207Smrg 91*4c3eb207Smrg$(patsubst %, f7_c_%.o, $(CALL_PROLOGUES)) \ 92*4c3eb207Smrg : F7_C_FLAGS += -mcall-prologues 93*4c3eb207Smrg 94*4c3eb207Smrg$(patsubst %, f7_c_%.o, $(STRICT_X)) \ 95*4c3eb207Smrg : F7_C_FLAGS += -mstrict-X 96*4c3eb207Smrg 97*4c3eb207Smrg$(patsubst %, f7_c_%.o, $(NO_PROTO)) \ 98*4c3eb207Smrg : F7_C_FLAGS += -Wno-missing-prototypes 99*4c3eb207Smrg 100*4c3eb207Smrg# Depends will be worked out by the libgcc build system. 101*4c3eb207Smrg 102*4c3eb207SmrgF7_C_OBJECTS = $(patsubst %, f7_c_%$(objext), $(F7_C_PARTS)) 103*4c3eb207SmrgF7_ASM_OBJECTS = $(patsubst %, f7_asm_%$(objext), $(F7_ASM_PARTS)) 104*4c3eb207Smrg 105*4c3eb207Smrg$(F7_ASM_OBJECTS) $(F7_C_OBJECTS) : $(libf7)/t-libf7 106*4c3eb207Smrg$(F7_ASM_OBJECTS) $(F7_C_OBJECTS) : $(libf7)/t-libf7-math 107*4c3eb207Smrg$(F7_ASM_OBJECTS) $(F7_C_OBJECTS) : $(libf7)/t-libf7-math-symbols 108*4c3eb207Smrg 109*4c3eb207Smrg.PHONY: log_vars 110*4c3eb207Smrg 111*4c3eb207Smrgall: log_vars 112*4c3eb207Smrg 113*4c3eb207Smrglog_vars: 114*4c3eb207Smrg $(info # libf7: WITH_LIBF7_MATH_FUNCTIONS = $(WITH_LIBF7_MATH_FUNCTIONS)) 115*4c3eb207Smrg $(info # libf7: WITH_LIBF7_MATH_SYMBOLS = $(WITH_LIBF7_MATH_SYMBOLS)) 116*4c3eb207Smrg $(info # libf7: F7_C_PARTS = $(F7_C_PARTS)) 117*4c3eb207Smrg $(info # libf7: F7_C_OBJECTS = $(F7_C_OBJECTS)) 118*4c3eb207Smrg $(info # libf7: F7_ASM_PARTS = $(F7_ASM_PARTS)) 119*4c3eb207Smrg $(info # libf7: F7_ASM_OBJECTS = $(F7_ASM_OBJECTS)) 120*4c3eb207Smrg 121*4c3eb207Smrg# Build the libf7 C objects and add them to libgcc.a. 122*4c3eb207Smrg 123*4c3eb207Smrgf7_parts := $(F7_C_PARTS) 124*4c3eb207Smrg 125*4c3eb207Smrgiter-items := $(f7_parts) 126*4c3eb207Smrgiter-labels := $(f7_parts) 127*4c3eb207Smrg 128*4c3eb207Smrginclude $(srcdir)/empty.mk $(patsubst %,$(libf7)/libf7-c-object.mk,$(iter-items)) 129*4c3eb207Smrg 130*4c3eb207Smrglibgcc-objects += $(patsubst %,f7_c_%$(objext),$(F7_C_PARTS)) 131*4c3eb207Smrg 132*4c3eb207Smrg# Build the libf7 ASM objects and add them to libgcc.a. 133*4c3eb207Smrg 134*4c3eb207Smrgf7_parts := $(F7_ASM_PARTS) 135*4c3eb207Smrg 136*4c3eb207Smrgiter-items := $(f7_parts) 137*4c3eb207Smrgiter-labels := $(f7_parts) 138*4c3eb207Smrg 139*4c3eb207Smrginclude $(srcdir)/empty.mk $(patsubst %,$(libf7)/libf7-asm-object.mk,$(iter-items)) 140*4c3eb207Smrg 141*4c3eb207Smrglibgcc-objects += $(patsubst %,f7_asm_%$(objext),$(F7_ASM_PARTS)) 142*4c3eb207Smrg 143*4c3eb207Smrg.PHONY: clean-f7 144*4c3eb207Smrg 145*4c3eb207Smrgclean: clean-f7 146*4c3eb207Smrg 147*4c3eb207Smrgclean-f7: 148*4c3eb207Smrg rm -f $(wildcard f7_*.i f7_*.s f7_*.o) 149*4c3eb207Smrg 150*4c3eb207Smrg# Get rid if any DFmode remains. 151*4c3eb207Smrg 152*4c3eb207SmrgLIB2FUNCS_EXCLUDE += \ 153*4c3eb207Smrg _sf_to_df \ 154*4c3eb207Smrg _fixdfdi \ 155*4c3eb207Smrg _fixunsdfsi \ 156*4c3eb207Smrg _floatundidf \ 157*4c3eb207Smrg _fixunsdfdi \ 158*4c3eb207Smrg _floatdidf \ 159*4c3eb207Smrg _powidf2 160