aboutsummaryrefslogtreecommitdiff
path: root/libraries/libtfm/Makefile
blob: 34b9314962def2468c26dce23578dae79a03ee3a (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
# 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})

all: ${TARGETS}

clean:
	rm -rf ${TARGETS} $(notdir ${HDR}.tmp) ${LIB} tomsfastmath/src

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}
	(cd ${LIBTFM_SRC} && find tomsfastmath/src -type d) | xargs mkdir -p
	cd tomsfastmath; ${MAKE} CFLAGS='${CFLAGS}'