X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Frules.mk;h=6096accf67c2ad26f4506dd1673527166a1c5e13;hb=038e7e854053a17ee36f9c0cf309861f820a8d2a;hp=6f001f70d8f4286788bd8a13023c49cd0c122a04;hpb=87b2bd90d22f8b05ffecbdda4ffdd0958069653d;p=bertos.git diff --git a/bertos/rules.mk b/bertos/rules.mk index 6f001f70..6096accf 100644 --- a/bertos/rules.mk +++ b/bertos/rules.mk @@ -68,12 +68,7 @@ check: define build_target -ifneq ($$($(1)_CROSS),) - #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 +ifeq ($$($(1)_HOSTED),1) #On Darwin architecture the assembly doesn't link correctly if these flags are set. ifeq ($(shell uname | grep -c "Darwin"),1) LIST_FLAGS := "" @@ -90,12 +85,17 @@ else #Otherwise in hosted application we need only executable file. $$(OUTDIR)/$(1).tgt : $$(OUTDIR)/$(1) endif +else + #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 endif $(1)_LDFLAGS += $$($(1)_MAP_FLAGS) # In embedded systems the target CPU is needed, -# but there are different options on how pass +# but there are different options on how to pass # it to the compiler. ifneq ($$(strip $$($(1)_MCU)),) $(1)_MCPU = -mmcu=$$($(1)_MCU) @@ -104,7 +104,7 @@ ifneq ($$(strip $$($(1)_CPU)),) $(1)_MCPU = -mcpu=$$($(1)_CPU) endif -# If a CPU is specified add to +# If a CPU is specified add to # project specific flags. ifneq ($$($(1)_MCPU),) $(1)_CFLAGS += $$($(1)_MCPU) @@ -118,12 +118,30 @@ ifneq ($$(strip $$($(1)_LDSCRIPT)),) $(1)_LDFLAGS += -Wl,-T$$($(1)_LDSCRIPT) endif +ifneq ($$($(1)_CROSS),) + #deprecated: use PREFIX, SUFFIX and HOSTED mechanism instead + $(1)_PREFIX = $$($(1)_CROSS) + $(1)_SUFFIX = +endif + +$(1)_CC ?= $$($(1)_PREFIX)$$(CC)$$($(1)_SUFFIX) +$(1)_CXX ?= $$($(1)_PREFIX)$$(CXX)$$($(1)_SUFFIX) +$(1)_AS ?= $$($(1)_PREFIX)$$(AS)$$($(1)_SUFFIX) +$(1)_AR ?= $$($(1)_PREFIX)$$(AR)$$($(1)_SUFFIX) +$(1)_OBJCOPY ?= $$($(1)_PREFIX)$$(OBJCOPY)$$($(1)_SUFFIX) +$(1)_STRIP ?= $$($(1)_PREFIX)$$(STRIP)$$($(1)_SUFFIX) +ifneq ($$(strip $$($(1)_CXXSRC)),) + $(1)_LD = $$($(1)_PREFIX)$$(LDXX)$$($(1)_SUFFIX) +else + $(1)_LD = $$($(1)_PREFIX)$$(LD)$$($(1)_SUFFIX) +endif + # Debug stuff ifeq ($$($(1)_DEBUG),1) # AVR is an harvard processor # and needs debug module # to be compiled in program memory - ifeq ($$(findstring avr, $$($(1)_CROSS)),avr) + ifeq ($$(findstring avr, $$($(1)_PREFIX)),avr) $(1)_DEBUGSRC = $(1)_PCSRC else $(1)_DEBUGSRC = $(1)_CSRC @@ -136,17 +154,15 @@ ifeq ($$($(1)_DEBUG),1) $$($(1)_DEBUGSRC) += bertos/mware/formatwr.c endif - $(1)_CFLAGS += -D_DEBUG + # Also add hex.c (for printf) if not already present + ifneq ($$(findstring hex.c, $$($$($(1)_CSRC))),hex.c) + $$($(1)_CSRC) += bertos/mware/hex.c + endif + + $(1)_CFLAGS += -D_DEBUG $(1)_CXXFLAGS += -D_DEBUG endif -$(1)_CC = $$($(1)_CROSS)$$(CC) -$(1)_CXX = $$($(1)_CROSS)$$(CXX) -$(1)_AS = $$($(1)_CROSS)$$(AS) -$(1)_AR = $$($(1)_CROSS)$$(AR) -$(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)) $(1)_PCOBJ = $$(foreach file,$$($(1)_PCSRC:%.c=%_P.o),$$(OBJDIR)/$(1)/$$(file)) @@ -156,26 +172,20 @@ $(1)_OBJ := $$($(1)_COBJ) $$($(1)_CXXOBJ) $$($(1)_PCOBJ) $$($(1)_AOBJ) $$($(1 $(1)_SRC := $$($(1)_CSRC) $$($(1)_CXXSRC) $$($(1)_PCSRC) $$($(1)_ASRC) $$($(1)_CPPASRC) OBJ += $$($(1)_OBJ) -ifneq ($$(strip $$($(1)_CXXSRC)),) -$(1)_LD = $$($(1)_CROSS)$$(LDXX) -else -$(1)_LD = $$($(1)_CROSS)$$(LD) -endif - # Sometimes $(CC) is actually set to a C++ compiler in disguise, and it # would whine if we passed it C-only flags. Checking for the presence of # "++" in the name is a kludge that seems to work mostly. ifeq (++,$$(findstring ++,$$($(1)_CC))) - REAL_CFLAGS = $$(CXXFLAGS) + $(1)_REAL_CFLAGS = $$(CXXFLAGS) else - REAL_CFLAGS = $$(CFLAGS) + $(1)_REAL_CFLAGS = $$(CFLAGS) endif # Compile: instructions to create assembler and/or object files from C source $$($(1)_COBJ) : $$(OBJDIR)/$(1)/%.o : %.c $L "$(1): Compiling $$< (C)" @$$(MKDIR_P) $$(dir $$@) - $Q $$($(1)_CC) -c $$(REAL_CFLAGS) $$($(1)_CFLAGS) $$($(1)_CPPFLAGS) $$(CPPFLAGS) $$< -o $$@ + $Q $$($(1)_CC) -c $$($(1)_REAL_CFLAGS) $$($(1)_CFLAGS) $$($(1)_CPPFLAGS) $$(CPPFLAGS) $$< -o $$@ # Compile: instructions to create assembler and/or object files from C++ source $$($(1)_CXXOBJ) : $$(OBJDIR)/$(1)/%.o : %.cpp