summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaulo Borges <paulo.borges@openbossa.org>2013-11-29 20:40:28 -0300
committerPaulo Borges <paulo.borges@openbossa.org>2013-12-20 13:23:46 -0300
commit2ad20b68c33114055cfd33895b17b9d1f62b3387 (patch)
tree37c0ca1a98dc70a48986c60b08da9bef80905a48
parentb0dd5928024ae616d2da8304303f2aac6d2460a0 (diff)
build: Add Makefile.common
-rw-r--r--.gitignore1
-rw-r--r--Makefile.common110
2 files changed, 111 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 8b9afac..609d5ce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+Makefile.config
build
*.log
*.pyc
diff --git a/Makefile.common b/Makefile.common
new file mode 100644
index 0000000..eaf491e
--- /dev/null
+++ b/Makefile.common
@@ -0,0 +1,110 @@
+# Common Makefile
+
+# If BLESTACK_PATH isn't defined, assume Makefile.common was the last inclusion
+ifeq ($(BLESTACK_PATH),)
+ BLESTACK_PATH = $(patsubst %\,%,$(dir $(lastword $(MAKEFILE_LIST))))
+endif
+
+ifeq ($(BUILD_PATH),)
+ BUILD_PATH = build
+endif
+
+-include Makefile.config
+
+ifeq ($(PLATFORM),)
+ $(error PLATFORM is not defined)
+endif
+
+PLATFORM_PATH = $(BLESTACK_PATH)/platform/$(PLATFORM)
+-include $(PLATFORM_PATH)/Makefile.platform
+
+ifeq ($(PROJECT_TARGET),)
+ $(error PROJECT_TARGET is not defined)
+endif
+
+INCLUDE_PATHS = $(PLATFORM_INCLUDE_PATHS) \
+ $(PROJECT_INCLUDE_PATHS) \
+ $(BLESTACK_PATH)/stack
+
+INCLUDES = $(addprefix -I, $(INCLUDE_PATHS))
+
+CFLAGS = $(PLATFORM_CFLAGS) \
+ $(PROJECT_CFLAGS) \
+ $(INCLUDES)
+
+ASMFLAGS = $(PLATFORM_ASMFLAGS) \
+ $(PROJECT_ASMFLAGS)
+
+LDFLAGS = $(PLATFORM_LDFLAGS) \
+ $(PROJECT_LDFLAGS)
+
+SOURCE_PATHS = $(PLATFORM_SOURCE_PATHS) \
+ $(PROJECT_SOURCE_PATHS)
+
+SOURCE_FILES = $(PLATFORM_SOURCE_FILES) \
+ $(PROJECT_SOURCE_FILES)
+
+ASM_PATHS = $(PLATFORM_ASM_PATHS) \
+ $(PROJECT_ASM_PATHS)
+
+ASM_FILES = $(PLATFORM_ASM_FILES) \
+ $(PROJECT_ASM_FILES)
+
+C_OBJECT_FILES = $(addprefix $(BUILD_PATH)/, $(SOURCE_FILES:.c=.o))
+ASM_OBJECT_FILES = $(addprefix $(BUILD_PATH)/, $(ASM_FILES:.s=.o))
+
+vpath %.c $(SOURCE_PATHS)
+vpath %.s $(ASM_PATHS)
+
+all: $(BUILD_PATH) $(BUILD_PATH)/$(PROJECT_TARGET).bin
+
+$(BUILD_PATH)/$(PROJECT_TARGET).bin: $(BUILD_PATH)/$(PROJECT_TARGET).out
+ @echo "OBJCOPY\t$@"
+ @$(OBJCOPY) -Obinary $(BUILD_PATH)/$(PROJECT_TARGET).out \
+ $(BUILD_PATH)/$(PROJECT_TARGET).bin
+
+# Link object files
+$(BUILD_PATH)/$(PROJECT_TARGET).out: $(C_OBJECT_FILES) $(ASM_OBJECT_FILES)
+ @echo " LD\t$@"
+ @$(LD) $(LDFLAGS) $(C_OBJECT_FILES) $(ASM_OBJECT_FILES) -o $@
+ @echo "OBJDUMP\t$@"
+ @$(OBJDUMP) -h $@
+
+# Build source files
+$(BUILD_PATH)/%.o: %.c
+ @echo " CC\t$<"
+ @$(CC) $(CFLAGS) -o $@ $<
+
+# Build ASM files
+$(BUILD_PATH)/%.o: %.s
+ @echo " CC\t$<"
+ @$(CC) $(ASMFLAGS) -o $@ $<
+
+$(BUILD_PATH):
+ @echo " MKDIR\t$@"
+ @-mkdir $@
+
+install: all
+ $(FLASHER) flash `pwd`/$(BUILD_PATH)/$(PROJECT_TARGET).bin
+
+erase:
+ $(FLASHER) erase
+
+clean:
+ @echo " CLEAN"
+ @rm -rf $(BUILD_PATH) *.log
+
+dump:
+ @echo ""
+ @echo "INCLUDE_PATHS: $(INCLUDE_PATHS)"
+ @echo ""
+ @echo "SOURCE_PATHS: $(SOURCE_PATHS)"
+ @echo ""
+ @echo "ASM_PATHS: $(ASM_PATHS)"
+ @echo ""
+ @echo "SOURCE_FILES: $(SOURCE_FILES)"
+ @echo ""
+ @echo "ASM_FILES: $(ASM_FILES)"
+ @echo ""
+
+.PHONY: all install erase clean dump