Clone of official tools

Revision:
13:ab47a20b66f0
Parent:
0:66f3b5499f7f
Child:
29:1210849dba19
--- a/export/gcc_arm_common.tmpl	Tue Jun 14 11:33:06 2016 +0100
+++ b/export/gcc_arm_common.tmpl	Thu Jul 14 20:21:19 2016 +0100
@@ -1,6 +1,36 @@
 # This file was automagically generated by mbed.org. For more information, 
 # see http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded
 
+# cross-platform directory manipulation
+ifeq ($(shell echo $$OS),$$OS)
+    MAKEDIR = if not exist "$(1)" mkdir "$(1)"
+    RM = rmdir /S /Q "$(1)"
+else
+    MAKEDIR = $(SHELL) -c "mkdir -p \"$(1)\""
+    RM = $(SHELL) -c "rm -rf \"$(1)\""
+endif
+
+ifeq (,$(filter .build,$(notdir $(CURDIR))))
+.SUFFIXES:
+OBJDIR := .build
+mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
+MAKETARGET = $(MAKE) --no-print-directory -C $(OBJDIR) -f $(mkfile_path) \
+		SRCDIR=$(CURDIR) $(MAKECMDGOALS)
+.PHONY: $(OBJDIR) clean
+all:
+	+@$(call MAKEDIR,$(OBJDIR))
+	+@$(MAKETARGET)
+$(OBJDIR): all
+Makefile : ;
+% :: $(OBJDIR) ; :
+clean :
+	$(call RM,$(OBJDIR))
+{% block target_clean -%}
+{% endblock %}
+else
+
+VPATH = {% for path in vpath %}{{path}} {% endfor %}
+
 GCC_BIN = 
 PROJECT = {{name}}
 OBJECTS = {% for f in to_be_compiled %}{{f}} {% endfor %}
@@ -34,17 +64,12 @@
 {%- endblock %}
 
 CPU = {% block cpu %}{% for cf in cpu_flags %}{{cf|replace("-mfloat-abi=softfp","-mfloat-abi=$(FLOAT_ABI)")}} {% endfor %}{% endblock %}
-CC_FLAGS = {% block cc_flags %}$(CPU) -c -g -fno-common -fmessage-length=0 -Wall -Wextra -fno-exceptions -ffunction-sections -fdata-sections -fomit-frame-pointer -MMD -MP{% endblock %}
+CC_FLAGS = {% block cc_flags %}{{common_flags|join(" ")}} {{c_flags|join(" ")}} -MMD -MP{% endblock %}
+CPPC_FLAGS = {% block cppc_flags %}{{common_flags|join(" ")}} {{cxx_flags|join(" ")}} -MMD -MP{% endblock %}
+ASM_FLAGS = {% block asm_flags %}{{asm_flags|join(" ")}} {{common_flags|join(" ")}}{% endblock %}
 CC_SYMBOLS = {% block cc_symbols %}{% for s in symbols %}-D{{s}} {% endfor %}{% endblock %}
 
-LD_FLAGS = {%- block ld_flags -%}
-{%- if "-mcpu=cortex-m0" in cpu_flags or "-mcpu=cortex-m0plus" in cpu_flags -%}
-{{ ' ' }}$(CPU) -Wl,--gc-sections --specs=nano.specs -Wl,--wrap,main -Wl,-Map=$(PROJECT).map,--cref
-#LD_FLAGS += -u _printf_float -u _scanf_float
-{%- else -%}
-{{ ' ' }}$(CPU) -Wl,--gc-sections --specs=nano.specs -u _printf_float -u _scanf_float -Wl,--wrap,main -Wl,-Map=$(PROJECT).map,--cref
-{%- endif -%}
-{% endblock %}
+LD_FLAGS = {%- block ld_flags -%} {{ld_flags|join(" ")}} {% endblock %}
 LD_SYS_LIBS = {% block ld_sys_libs %}-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys{% endblock %}
 {% endblock %}
 
@@ -54,34 +79,36 @@
   CC_FLAGS += -DNDEBUG -Os
 endif
 
-.PHONY: all clean lst size
+
+.PHONY: all lst size
 
 {% block target_all -%}
 all: $(PROJECT).bin $(PROJECT).hex size
 {% endblock %}
 
-{% block target_clean -%}
-clean:
-	rm -f $(PROJECT).bin $(PROJECT).elf $(PROJECT).hex $(PROJECT).map $(PROJECT).lst $(OBJECTS) $(DEPS)
-{% endblock %}
 
 .asm.o:
-	$(CC) $(CPU) -c -x assembler-with-cpp -o $@ $<
+	+@$(call MAKEDIR,$(dir $@))
+	$(CC) $(CPU) -c $(ASM_FLAGS) -o $@ $<
 .s.o:
-	$(CC) $(CPU) -c -x assembler-with-cpp -o $@ $<
+	+@$(call MAKEDIR,$(dir $@))
+	$(CC) $(CPU) -c $(ASM_FLAGS) -o $@ $<
 .S.o:
-	$(CC) $(CPU) -c -x assembler-with-cpp -o $@ $<
+	+@$(call MAKEDIR,$(dir $@))
+	$(CC) $(CPU) -c $(ASM_FLAGS) -o $@ $<
 
 .c.o:
-	$(CC)  $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu99   $(INCLUDE_PATHS) -o $@ $<
+	+@$(call MAKEDIR,$(dir $@))
+	$(CC)  $(CC_FLAGS) $(CC_SYMBOLS) $(INCLUDE_PATHS) -o $@ $<
 
 .cpp.o:
-	$(CPP) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu++98 -fno-rtti $(INCLUDE_PATHS) -o $@ $<
+	+@$(call MAKEDIR,$(dir $@))
+	$(CPP) $(CPPC_FLAGS) $(CC_SYMBOLS) $(INCLUDE_PATHS) -o $@ $<
 
 
 {% block target_project_elf %}
-$(PROJECT).elf: $(OBJECTS) $(SYS_OBJECTS)
-	$(LD) $(LD_FLAGS) -T$(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ $^ $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) $(LD_SYS_LIBS)
+$(PROJECT).elf: $(OBJECTS) $(SYS_OBJECTS) $(LINKER_SCRIPT)
+	$(LD) $(LD_FLAGS) -T$(filter %.ld, $^) $(LIBRARY_PATHS) -o $@ $(filter %.o, $^) -Wl,--start-group $(LIBRARIES) $(LD_SYS_LIBS) -Wl,--end-group
 {% endblock %}
 
 $(PROJECT).bin: $(PROJECT).elf
@@ -102,4 +129,5 @@
 -include $(DEPS)
 
 {% block additional_targets %}{% endblock %}
+endif