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),)