# Virtual Product: based on target products may be different.
# e.g. Embedded target = hex, s19, bin
# Hosted = exe
+# Library = lib.a
TRG_TGT = $(TRG:%=$(OUTDIR)/%.tgt)
RECURSIVE_TARGETS = all-recursive install-recursive clean-recursive
# Run testsuite
.PHONY: check
-check:
+check:
$L "Running testsuite"
- $Q bertos/run_tests.sh
+ $Q test/run_tests.sh
define build_target
#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 set.
+ #On Darwin architecture the assembly doesn't link correctly if these flags are set.
ifeq ($(shell uname | grep -c "Darwin"),1)
LIST_FLAGS := ""
MAP_FLAGS := ""
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)
+
+ #Handle library creation
+ ifeq ($$($(1)_MAKELIB),1)
+ $$(OUTDIR)/$(1).tgt : $$(OUTDIR)/$(1).a
+ else
+ #Otherwise in hosted application we need only executable file.
+ $$(OUTDIR)/$(1).tgt : $$(OUTDIR)/$(1)
+ endif
endif
$(1)_LDFLAGS += $$($(1)_MAP_FLAGS)
$(1)_CXXFLAGS += -D_DEBUG
endif
-$(1)_CC = $$($(1)_CROSS)$$(CC)
-$(1)_CXX = $$($(1)_CROSS)$$(CXX)
-$(1)_AS = $$($(1)_CROSS)$$(AS)
-$(1)_OBJCOPY = $$($(1)_CROSS)$$(OBJCOPY)
-$(1)_STRIP = $$($(1)_CROSS)$$(STRIP)
+$(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))
# 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
@$$(MKDIR_P) $$(dir $$@)
$Q $$($(1)_LD) $$($(1)_OBJ) $$(LIB) $$(LDFLAGS) $$($(1)_LDFLAGS) -o $$@
+
+# Instructions to create a static library from object files
+$$(OUTDIR)/$(1).a: bumprev $$($(1)_OBJ)
+ $L "$(1): Creating static library $$@"
+ @$$(MKDIR_P) $$(dir $$@)
+ $Q $$($(1)_AR) $$(ARFLAGS) $$($(1)_ARFLAGS) $$@ $$($(1)_OBJ)
+
# Strip debug info
$$(OUTDIR)/$(1): $$(OUTDIR)/$(1)_nostrip
$L "$(1): Generating stripped executable $$@"