aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2017-06-17 21:56:02 -0400
committerRob Austein <sra@hactrn.net>2017-06-17 21:56:02 -0400
commit0d33ff82c8b9436d83e6bf20a12de3d53c8ae591 (patch)
treec10cd89de68befe9c837b5e614126a4f89f0350c
parenta93c94f554667564393216fe984b46e686c825b3 (diff)
Fix optimization settings in HSM's build of libtfm.
-rw-r--r--Makefile11
-rw-r--r--libraries/libtfm/Makefile31
2 files changed, 33 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index d8c9593..e058edd 100644
--- a/Makefile
+++ b/Makefile
@@ -88,13 +88,14 @@ SIZE=$(PREFIX)size
# The Alpha is a development platform, so set GCC optimization to a
# level suitable for debugging. Recent versions of GCC have a special
-# optimization setting -Og for exactly this purpose, so we use it, along
-# with the flag to enable gdb symbols.
+# optimization setting -Og for exactly this purpose, so we use it,
+# along with the flag to enable gdb symbols. Note that some libraries
+# (in particular, libtfm) may need different optimization settings,
+# which is why this needs to remain a separate makefile variable.
#
-# If you really want optimization without debugging support, try -O2 or
-# (maybe) -O3.
+# If you really want optimization without debugging support, try -O2
+# or -O3.
-#STM32_CFLAGS_OPTIMIZATION ?= -O2
STM32_CFLAGS_OPTIMIZATION ?= -ggdb -Og
# whew, that's a lot of cflags
diff --git a/libraries/libtfm/Makefile b/libraries/libtfm/Makefile
index 6da552d..ceb8541 100644
--- a/libraries/libtfm/Makefile
+++ b/libraries/libtfm/Makefile
@@ -10,10 +10,33 @@ BITS := 8192
HDR := ${LIBTFM_SRC}/tomsfastmath/src/headers/tfm.h
LIB := tomsfastmath/libtfm.a
-#CFLAGS += -DTFM_X86
-#CFLAGS += -DTFM_NO_ASM
-
-CFLAGS += -fPIC -Wall -W -Wshadow -I${LIBTFM_SRC}/tomsfastmath/src/headers -g3 -DFP_MAX_SIZE="(${BITS}*2+(8*DIGIT_BIT))"
+# 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.
+
+STM32_LIBTFM_CFLAGS_OPTIMIZATION := -O3 -funroll-loops -fomit-frame-pointer
+
+CFLAGS := $(subst ${STM32_CFLAGS_OPTIMIZATION},${STM32_LIBTFM_CFLAGS_OPTIMIZATION},${CFLAGS})
+CFLAGS += -DTFM_ARM -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
TARGETS := $(notdir ${HDR} ${LIB})