X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Frules.mk;h=eed0fe5093ea0aa32cb95186c281c6ab27562a8f;hb=7a6e7a6b51151ca0c221e004871fc1e4c5748124;hp=b152f566b70d0775b3b29b4a12c16f700291bb48;hpb=4294d908f73ad0e847a2132899832c9031ad0b60;p=bertos.git diff --git a/bertos/rules.mk b/bertos/rules.mk index b152f566..eed0fe50 100644 --- a/bertos/rules.mk +++ b/bertos/rules.mk @@ -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: $(OUTDIR)/libunittest.a $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 $$@" @@ -269,8 +284,8 @@ $$(OUTDIR)/$(1).rom: $$(OUTDIR)/$(1).elf endef -# Generate build rules for all targets -$(foreach t,$(TRG),$(eval $(call build_target,$(t)))) +# Generate build rules for all targets and libunittest +$(foreach t,$(TRG) libunittest,$(eval $(call build_target,$(t)))) # Generate Qt's moc files from headers # NOTE: moc totally sucks and can generate empty files for some error conditions,