blob: aa5031f816895adaf43b86f5dba2caa45595ff57 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# This duplicates more of sw/thirdparty/libtfm/Makefile than I
# would like, but it does the job. Prettier makefiles can wait for another day.
# vpath %.c ${LIBTFM_SRC}
# vpath %.h ${LIBTFM_SRC}
BITS := 4096
HDR := ${LIBTFM_SRC}/tomsfastmath/src/headers/tfm.h
LIB := tomsfastmath/libtfm.a
# See sw/thirdparty/libtfm/Makefile for compilation options. Note
# that libtfm platform-specific assembly code has opinions on the
# optimization level (and appears to be best tested with -O3).
# Using $(subst...) here is a kludge. A cleaner approach might be for
# sw/stm32/Makefile to build up the non-variant parts of CFLAGS in a
# different variable before merging the variant and non-variant parts
# into CFLAGS, which would give us a clean copy of the non-variant
# parts to use when constructing our own CFLAGS. Later.
# The ARM assembly code in libtfm still generates a lot of warnings of the form:
#
# warning: matching constraint does not allow a register [enabled by default]
#
# This is just a warning, the resulting library appears to work
# correctly, and the fix appears to require a nasty intervention in
# the guts of the libtfm assembly code, so we live with the warning
# for now, at least until we confirm that it hasn't already been fixed
# in a newer version of libtfm.
ifdef DO_PROFILING
# arm-none-eabi-gcc: error: -pg and -fomit-frame-pointer are incompatible
STM32_LIBTFM_CFLAGS_OPTIMIZATION := -O3 -funroll-loops
else
STM32_LIBTFM_CFLAGS_OPTIMIZATION := -O3 -funroll-loops -fomit-frame-pointer
endif
CFLAGS := $(subst ${STM32_CFLAGS_OPTIMIZATION},${STM32_LIBTFM_CFLAGS_OPTIMIZATION},${CFLAGS})
CFLAGS += -DTFM_ARM -DENDIAN_LITTLE -Dasm=__asm__ -Wa,-mimplicit-it=thumb
CFLAGS += -I${LIBTFM_SRC}/tomsfastmath/src/headers
CFLAGS += -DFP_MAX_SIZE="(${BITS}*2+(8*DIGIT_BIT))"
CFLAGS += -Wall -W -Wshadow -Wno-uninitialized
TARGETS := $(notdir ${HDR} ${LIB})
REPLACE = fp_to_unsigned_bin.o
all: ${TARGETS}
clean:
rm -rf ${TARGETS} $(notdir ${HDR}.tmp) ${LIB} tomsfastmath/src ${REPLACE}
distclean: clean
rm -f TAGS
$(notdir ${HDR}): ${HDR}
echo >$@.tmp '/* Configure size of largest bignum we want to handle -- see notes in tfm.pdf */'
echo >>$@.tmp '#define FP_MAX_SIZE (${BITS}*2+(8*DIGIT_BIT))'
echo >>$@.tmp ''
cat >>$@.tmp $^
mv -f $@.tmp $@
$(notdir ${LIB}): ${LIB}
ln -f $^ $@
${LIB}: ${HDR} ${REPLACE}
(cd ${LIBTFM_SRC} && find tomsfastmath/src -type d) | xargs mkdir -p
cd tomsfastmath; ${MAKE} CFLAGS='${CFLAGS}'
ar r ${LIB} ${REPLACE}
|