Rename myself
[bertos.git] / bertos / rules.mk
index 121bffc368932cf195121684d3278d1245cede05..23d988f78585cf4ffecaec4bbde0f1315da3dab8 100644 (file)
@@ -7,7 +7,7 @@
 #   GCC-AVR standard Makefile part 2
 #   Volker Oth 1/2000
 #
-# Author: Bernardo Innocenti <bernie@develer.com>
+# Author: Bernie Innocenti <bernie@codewiz.org>
 #
 
 # Remove all default pattern rules
@@ -36,25 +36,16 @@ endif
 # 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
@@ -76,6 +67,26 @@ check:
 
 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)
@@ -151,7 +162,7 @@ $$($(1)_CPPAOBJ): $$(OBJDIR)/$(1)/%.o : %.S
        $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)
@@ -163,7 +174,7 @@ $$(OUTDIR)/$(1).elf $$(OUTDIR)/$(1)_nostrip: bumprev $$($(1)_OBJ) $$($(1)_LDSCRI
 $$(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 $$@"
@@ -242,6 +253,7 @@ $(foreach t,$(TRG),$(eval $(call build_target,$(t))))
 #      $(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)
@@ -275,7 +287,7 @@ bumprev:
                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 -e '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"