Fix comments.
[bertos.git] / bertos / rules.mk
index b152f566b70d0775b3b29b4a12c16f700291bb48..e25d7359e2e7f44284a438b35a4b258670e05cb6 100644 (file)
@@ -39,6 +39,7 @@ top_srcdir ?= $(shell pwd)
 # 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
@@ -61,9 +62,9 @@ tags:
 
 # Run testsuite
 .PHONY: check
-check:
+check: 
        $L "Running testsuite"
-       $Q bertos/run_tests.sh
+       $Q test/run_tests.sh
 
 define build_target
 
@@ -73,7 +74,7 @@ ifneq ($$($(1)_CROSS),)
         #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 := ""
@@ -81,8 +82,14 @@ else
         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)
@@ -133,11 +140,12 @@ ifeq ($$($(1)_DEBUG),1)
         $(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))
@@ -158,16 +166,16 @@ endif
 # 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
@@ -205,6 +213,13 @@ $$(OUTDIR)/$(1).elf $$(OUTDIR)/$(1)_nostrip: bumprev $$($(1)_OBJ) $$($(1)_LDSCRI
        @$$(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 $$@"