# Initialize $(top_srcdir) with current directory, unless it was already initialized
top_srcdir ?= $(shell pwd)
-# Products
-TRG_ELF = $(TRG:%=$(OUTDIR)/%.elf)
-TRG_S19 = $(TRG:%=$(OUTDIR)/%.s19)
-TRG_HEX = $(TRG:%=$(OUTDIR)/%.hex)
-TRG_BIN = $(TRG:%=$(OUTDIR)/%.bin)
-TRG_ROM = $(TRG:%=$(OUTDIR)/%.rom)
-TRG_COF = $(TRG:%=$(OUTDIR)/%.cof)
-TRG_EXE = $(TRG:%=$(OUTDIR)/%)
-
+# Virtual Product: based on target products may be different.
+# e.g. Embedded target = hex, s19, bin
+# Hosted = exe
+TRG_TGT = $(TRG:%=$(OUTDIR)/%.tgt)
RECURSIVE_TARGETS = all-recursive install-recursive clean-recursive
# The default target
.PHONY: all
-ifeq ($(EMBEDDED_TARGET),1)
-all:: all-recursive $(TRG_S19) $(TRG_HEX) $(TRG_BIN)
-else
-all:: all-recursive $(TRG_EXE)
-endif
+all:: all-recursive $(TRG_TGT)
# Generate project documentation
.PHONY: docs
define build_target
+ifeq ($$($(1)_EMBEDDED_TGT),1)
+#use embedded specific map flags
+$(1)_MAP_FLAGS = $$(MAP_FLAGS_EMB)
+#In embedded we need s19, hex and bin
+$$(OUTDIR)/$(1).tgt : $$(OUTDIR)/$(1).s19 $$(OUTDIR)/$(1).hex $$(OUTDIR)/$(1).bin
+else
+#On Darwin architecture the assembly doesn't link correctly if this flag is setted.
+ifeq ($(shell uname | grep -c "Darwin"),1)
+LIST_FLAGS = ""
+MAP_FLAGS = ""
+LDFLAGS = ""
+endif
+#use hosted specific map flags
+$(1)_MAP_FLAGS = $$(MAP_FLAGS_HOST)
+#in hosted application we need only executable file.
+$$(OUTDIR)/$(1).tgt : $$(OUTDIR)/$(1)
+endif
+
+$(1)_LDFLAGS += $$($(1)_MAP_FLAGS)
+
ifneq ($$(strip $$($(1)_MCU)),)
# Define all project specific object files
$(1)_CFLAGS += -mmcu=$$($(1)_MCU)
$(1)_CXX = $$($(1)_CROSS)$$(CXX)
$(1)_AS = $$($(1)_CROSS)$$(AS)
$(1)_OBJCOPY = $$($(1)_CROSS)$$(OBJCOPY)
+$(1)_STRIP = $$($(1)_CROSS)$$(STRIP)
$(1)_COBJ = $$(foreach file,$$($(1)_CSRC:%.c=%.o),$$(OBJDIR)/$(1)/$$(file))
$(1)_CXXOBJ = $$(foreach file,$$($(1)_CXXSRC:%.cpp=%.o),$$(OBJDIR)/$(1)/$$(file))
$L "$(1): Assembling with CPP $$<"
@$$(MKDIR_P) $$(dir $$@)
$Q $$($(1)_CC) -c $$(CPPAFLAGS) $$($(1)_CPPAFLAGS) $$($(1)_CPPFLAGS) $$(CPPFLAGS) $$< -o $$@
-
+
# Link: instructions to create elf output file from object files
$$(OUTDIR)/$(1).elf $$(OUTDIR)/$(1)_nostrip: bumprev $$($(1)_OBJ) $$($(1)_LDSCRIPT)
$$(OUTDIR)/$(1): $$(OUTDIR)/$(1)_nostrip
$L "$(1): Generating stripped executable $$@"
$Q $$($(1)_STRIP) -o $$@ $$^
-
+
# Compile and link (program-at-a-time)
$$(OUTDIR)/$(1)_whole.elf: bumprev $$($(1)_SRC) $$($(1)_LDSCRIPT)
$L "$(1): Compiling and Linking whole program $$@"
# $(COFFCONVERT) -O coff-avr $< $@ # For use with AVRstudio 3
#make instruction to delete created files
+cleanall: clean
clean: clean-recursive
-$(RM_R) $(OBJDIR)
-$(RM_R) $(OUTDIR)
buildnr=`sed <"$(BUILDREV_H)" -n -e 's/#define VERS_BUILD \([0-9][0-9]*\)/\1/p'`; \
fi; \
buildnr=`expr $$buildnr + 1`; \
- buildhost=`hostname` | sed -n '1h;2,$H;${g;s/\n//g;p}'; \
+ buildhost=`hostname | sed -n -e '1h;2,$$H;$${g;s/\n//g;p;}'`; \
echo "#define VERS_BUILD $$buildnr" >"$(BUILDREV_H)"; \
echo "#define VERS_HOST \"$$buildhost\"" >>"$(BUILDREV_H)"; \
echo "Building revision $$buildnr"