summaryrefslogtreecommitdiff
path: root/cesar/common/make/ecos.mk
diff options
context:
space:
mode:
authorsave2008-04-07 14:17:42 +0000
committersave2008-04-07 14:17:42 +0000
commit3d58a62727346b7ac1a6cb36fed1a06ed72228dd (patch)
treed7788c3cf9f76426aef0286d0202e2097f0fa0eb /cesar/common/make/ecos.mk
parent095dca4b0a8d4924093bab424f71f588fdd84613 (diff)
Moved the complete svn base into the cesar directory.
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@1769 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/common/make/ecos.mk')
-rw-r--r--cesar/common/make/ecos.mk149
1 files changed, 149 insertions, 0 deletions
diff --git a/cesar/common/make/ecos.mk b/cesar/common/make/ecos.mk
new file mode 100644
index 0000000000..5c9d70735c
--- /dev/null
+++ b/cesar/common/make/ecos.mk
@@ -0,0 +1,149 @@
+ifneq ($(ECOS),)
+
+# Ecos files and directories.
+ECOS_DIR := $(OBJ_DIR)/ecos
+ECOS_INSTALL_DIR := $(ECOS_DIR)/install
+ECOS_BUILD_DIR := $(ECOS_DIR)/build
+ECOS_TREE_STAMP := $(ECOS_DIR)/tree.stamp
+ECOS_HEADERS_STAMP := $(ECOS_DIR)/headers.stamp
+ECOS_DEFS := $(ECOS_INSTALL_DIR)/include/pkgconf/ecos.mak
+ECOS_CONFIG_COMPACT ?= $(if $(VARIANT),$(VARIANT)-)ecos.ecc.sh
+ECOS_CONFIG := $(ECOS_DIR)/ecos.ecc
+ECOS_CONFIG_COV := $(ECOS_CONFIG:%.ecc=%-cov.ecc)
+ECOS_CONFIG_FOR_TREE := $(ECOS_CONFIG)
+ifneq ($(TARGET_COV)$(COV),)
+ ECOS_CONFIG_FOR_TREE := $(ECOS_CONFIG_COV)
+endif
+ECOS_NEW_CONFIG_COMPACT := new-ecos.ecc.sh
+ECOS_NEW_CONFIG := new-ecos.ecc
+ECOS_INCLUDE_DIR := $(ECOS_INSTALL_DIR)/include
+ECOS_LIB_DIR := $(ECOS_INSTALL_DIR)/lib
+ECOS_LIB_FILES := vectors.o extras.o libtarget.a
+ECOS_LIBS := $(ECOS_LIB_FILES:%=$(ECOS_LIB_DIR)/%)
+ECOS_LD_SCRIPT := $(ECOS_LIB_DIR)/target.ld
+ECOS_SILENT := -s
+
+# Ecos packages repository.
+ifdef ECOS_REPOSITORY
+ $(warning overiding ECOS_REPOSITORY)
+endif
+override ECOS_REPOSITORY := $(CURDIR)/$(BASE)/ecos/packages
+export ECOS_REPOSITORY
+
+# Only include ecos definitions if needed (do not include it if clean or
+# *.clean).
+ifneq ($(if $(MAKECMDGOALS),$(filter-out \
+ %.clean clean,$(MAKECMDGOALS)),default),)
+ # Include and filter ecos defined flags.
+ -include $(ECOS_DEFS)
+endif
+
+ifdef ECOS_GLOBAL_CFLAGS
+ # GCC since 2.95 does -finit-priority by default so remove it from old HALs.
+ ECOS_GLOBAL_CFLAGS := $(subst -finit-priority,,$(ECOS_GLOBAL_CFLAGS))
+ # -fvtable-gc is known to be broken in all recent GCC.
+ ECOS_GLOBAL_CFLAGS := $(subst -fvtable-gc,,$(ECOS_GLOBAL_CFLAGS))
+
+ # To support more recent GCC whilst preserving existing behaviour, we need
+ # to increase the inlining limit globally from the default 600. Note this
+ # will break GCC 2.95 based tools and earlier. You must use "make OLDGCC=1"
+ # to avoid this.
+ ifneq ($(OLDGCC),1)
+ ECOS_GLOBAL_CFLAGS := -finline-limit=7000 $(ECOS_GLOBAL_CFLAGS)
+ endif
+
+ # Filter out unwanted options.
+ ECOS_GLOBAL_CFLAGS := $(subst -O2,,$(ECOS_GLOBAL_CFLAGS))
+ ECOS_GLOBAL_CFLAGS := $(subst -fdata-sections,,$(ECOS_GLOBAL_CFLAGS))
+ ECOS_GLOBAL_CFLAGS := $(subst -ffunction-sections,,$(ECOS_GLOBAL_CFLAGS))
+
+ # Separate C++ flags out from C flags.
+ ECOS_CFLAGS := $(ECOS_GLOBAL_CFLAGS)
+ ECOS_CFLAGS := $(subst -fno-rtti,,$(ECOS_CFLAGS))
+ ECOS_CFLAGS := $(subst -frtti,,$(ECOS_CFLAGS))
+ ECOS_CFLAGS := $(subst -Woverloaded-virtual,,$(ECOS_CFLAGS))
+ ECOS_CFLAGS := $(subst -fvtable-gc,,$(ECOS_CFLAGS))
+
+ ECOS_CXXFLAGS := $(ECOS_GLOBAL_CFLAGS)
+ ECOS_CXXFLAGS := $(subst -Wstrict-prototypes,,$(ECOS_CXXFLAGS))
+
+ ECOS_LDFLAGS := $(ECOS_GLOBAL_LDFLAGS)
+
+ # Use ecos defined flags.
+ TARGET_DEFS += -DECOS=1
+ TARGET_CFLAGS := $(sort $(TARGET_CFLAGS) $(ECOS_CFLAGS))
+ TARGET_CXXFLAGS := $(sort $(TARGET_CXXFLAGS) $(ECOS_CXXFLAGS))
+ TARGET_INCLUDES += -I$(ECOS_INCLUDE_DIR)
+ TARGET_LDFLAGS := $(sort $(TARGET_LDFLAGS) $(ECOS_LDFLAGS))
+ TARGET_LDFLAGS += -L$(ECOS_LIB_DIR) -T$(ECOS_LD_SCRIPT)
+ TARGET_COMPILE_DEPS += $(ECOS_HEADERS_STAMP)
+ TARGET_LINK_DEPS += $(ECOS_LIBS) $(ECOS_LD_SCRIPT)
+ ifneq ($(CROSS_COMPILE),$(ECOS_COMMAND_PREFIX))
+ ECOS_MAKEFLAGS := COMMAND_PREFIX=$(CROSS_COMPILE)
+ endif
+ ECOS_MAKEFLAGS += BASE=$(CURDIR)/$(BASE) OBJ_DIR=$(CURDIR)/$(OBJ_DIR)
+else
+ # Catch errors.
+ TARGET_CC = $(error no ecos definitions included)
+ TARGET_CXX = $(error no ecos definitions included)
+endif
+
+EXTRA_CLEAN += ecos.clean
+
+.PHONY: ecos.all ecos.headers ecos.tree ecos.config ecos.compact-config ecos.clean
+
+$(ECOS_LIBS) $(ECOS_LD_SCRIPT): ecos.all
+ecos.all: $(ECOS_TREE_STAMP)
+ @echo MAKE ecos.all
+ $Q$(MAKE) $(ECOS_MAKEFLAGS) $(ECOS_SILENT) -C $(ECOS_BUILD_DIR)
+
+ecos.headers: $(ECOS_HEADERS_STAMP)
+$(ECOS_HEADERS_STAMP): $(ECOS_TREE_STAMP)
+ @echo MAKE ecos.headers
+ $Q$(MAKE) $(ECOS_MAKEFLAGS) $(ECOS_SILENT) -C $(ECOS_BUILD_DIR) headers
+ touch $@
+
+ecos.tree: $(ECOS_TREE_STAMP) ; @:
+$(ECOS_TREE_STAMP): $(ECOS_CONFIG_FOR_TREE)
+ @echo ECOS tree
+ mkdir -p $(ECOS_BUILD_DIR)
+ cd $(ECOS_BUILD_DIR) && \
+ ecosconfig --config=$(CURDIR)/$(ECOS_CONFIG_FOR_TREE) \
+ --prefix=$(CURDIR)/$(ECOS_INSTALL_DIR) tree
+ touch $@
+
+$(ECOS_DEFS): $(ECOS_TREE_STAMP)
+ @echo MAKE ecos.defs
+ $Q$(MAKE) $(ECOS_MAKEFLAGS) $(ECOS_SILENT) -C $(ECOS_BUILD_DIR) $(CURDIR)/$@
+
+ecos.config: $(ECOS_CONFIG)
+$(ECOS_CONFIG): $(ECOS_CONFIG_COMPACT)
+ @echo ECOS conf
+ mkdir -p $(ECOS_DIR)
+ sh -e $< $@
+
+$(ECOS_CONFIG_COV): $(ECOS_CONFIG)
+ @echo ECOS conf cov
+ cp $< $@
+ ecosconfig --config=$(CURDIR)/$@ add CYGPKG_GCOV
+
+# Generate the compacted ecos configuration.
+$(ECOS_NEW_CONFIG_COMPACT): $(ECOS_CONFIG)
+ $(TOOLS_DIR)/compact-ecos-config $< > $@
+
+$(ECOS_NEW_CONFIG): $(ECOS_NEW_CONFIG_COMPACT)
+ @echo ECOS new-conf
+ sh -e $< $@
+
+ecos.compact-config: $(ECOS_NEW_CONFIG)
+ -diff $(ECOS_NEW_CONFIG) $(ECOS_CONFIG)
+ @echo copy $(ECOS_NEW_CONFIG_COMPACT) to $(ECOS_CONFIG_COMPACT) if satisfied.
+ false # Stop make
+
+ecos.clean:
+ rm -rf $(ECOS_TREE_STAMP) $(ECOS_BUILD_DIR)
+ rm -rf $(ECOS_HEADERS_STAMP) $(ECOS_INSTALL_DIR)
+ rm -f $(ECOS_CONFIG) $(ECOS_CONFIG_COV) $(ECOS_NEW_CONFIG)
+ -if [ -d $(ECOS_DIR) ]; then rmdir $(ECOS_DIR); fi
+
+endif # ifneq ($(ECOS),)