indentation fix
[lpc1224] / Makefile
1 # Makefile for LPC122x micro-controller based boards
3 TARGET_DIR = apps/$(MODULE)/$(NAME)
5 # If you use another of the LPC122x micro-controllers, copy the lpc_link_lpc1224.ld file
6 # to match you LPC micro-controller model and modify the memory sizes definitions at the
7 # beginning of your new file.
8 # Note that the LPC1224 has the smallest memory of the LPC122x branch, and thus using the
9 # lpc1224 linker script will work for all LPC122x, but not all memory will be available.
10 LPC = lpc1224
11 CPU = cortex-m0
12 ARCH = armv6-m
14 CROSS_COMPILE ?= arm-none-eabi-
15 CC = $(CROSS_COMPILE)gcc
16 # DEBUG = -ggdb3
17 LD_DEBUG = $(DEBUG)
18 #LD_DEBUG = $(DEBUG) -Wl,--print-memory-usage
19 #LD_DEBUG = $(DEBUG) -Wl,--print-gc-sections -Wl,--print-output-format \
20                    -Wl,--print-memory-usage
21 FOPTS = -fno-builtin -ffunction-sections -fdata-sections -ffreestanding
22 CFLAGS = -Wall -O2 $(DEBUG) -mthumb -mcpu=$(CPU) $(FOPTS)
23 LDFLAGS = -static $(LD_DEBUG) -nostartfiles -nostdlib -Tlpc_link_$(LPC).ld \
24                   -Wl,--gc-sections -Wl,--sort-section=alignment -Wl,--build-id=none \
25                   -Wl,-Map=$(TARGET_DIR)/lpc_map_$(LPC).map
28 APPS = $(subst apps/,,$(wildcard apps/*/*))
30 .PHONY: all $(APPS)
31 all: $(APPS)
33 INCLUDES = include/
34 TARGET_INCLUDES = $(TARGET_DIR)/
35 OBJDIR = objs
37 C_SRC = $(wildcard */*.c)
38 C_SRC += $(wildcard lib/*/*.c)
39 C_SRC += $(wildcard lib/protocols/*/*.c)
41 A_SRC = $(wildcard */*.s)
42 A_SRC += $(wildcard lib/*/*.s)
43 A_SRC += $(wildcard lib/protocols/*/*.s)
46 OBJS = ${C_SRC:%.c=${OBJDIR}/%.o} ${A_SRC:%.s=${OBJDIR}/%.o}
47 DEPS = ${OBJS:%.o=$(OBJDIR)/%.d}
49 NAME_SRC = $(wildcard $(TARGET_DIR)/*.c)
50 NAME_A_SRC = $(wildcard $(TARGET_DIR)/*.s)
51 NAME_OBJS = ${NAME_SRC:%.c=${OBJDIR}/%.o} ${NAME_A_SRC:%.s=${OBJDIR}/%.o}
52 NAME_DEPS = ${NAME_OBJS:%.o=$(OBJDIR)/%.d}
54 -include $(DEPS) $(NAME_DEPS)
56 .SECONDARY: $(OBJS) $(NAME_OBJS)
57 .PRECIOUS: %.elf
58 %.elf: $(OBJS) $(NAME_OBJS)
59         @echo "Linking $(MODULE)/$(NAME) ..."
60         @$(CC) $(LDFLAGS) $(OBJS) $(NAME_OBJS) -o $@
62 %.bin: %.elf
63         @echo "Creating image : \e[32m$@\e[39m"
64         @$(CROSS_COMPILE)objcopy -R .stack -R .bss -O binary $^ $@
65         @ls -l $@
66         @$(CROSS_COMPILE)size $^
67         @echo Done.
69 ${OBJDIR}/%.o: %.c
70         @mkdir -p $(dir $@)
71         @echo "-- compiling" $<
72         @$(CC) -MMD -MP -MF ${OBJDIR}/$*.d $(CFLAGS) $< -c -o $@ -I$(INCLUDES) -I$(TARGET_INCLUDES)
74 ${OBJDIR}/%.o: %.s
75         @mkdir -p $(dir $@)
76         @echo "-- assembing" $<
77         @$(CC) -MMD -MP -MF ${OBJDIR}/$*.d $(CFLAGS) $< -c -o $@ -I$(INCLUDES) -I$(TARGET_INCLUDES)
80 $(APPS):
81         @make --no-print-directory MODULE=$(shell dirname $@) NAME=$(shell basename $@) apps/$(shell dirname $@)/$(shell basename $@)/$(shell basename $@).bin
83 all_apps: $(APPS)
85 clean:
86         rm -rf $(OBJDIR)
88 mrproper: clean
89         rm -f apps/*/*/*.bin apps/*/*/*.elf apps/*/*/*.map
92 # Some notes :
93 # The command "make -f /path/to/here/Makefile module/app_name" does not work, as well
94 # as the command "make -f /path/to/here/apps/module/app_name/Makefile".
95 # This could be solved in the app Makefiles by replacing
96 #   "NAME = $(shell basename $(CURDIR))"
97 # with
98 #   "NAME = $(shell basename $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))))"
99 # and possibly some similar trick for the base Makefile but this is just
100 # unreadable and moslty unusefull, so it won't be supported.
101 # Use "make -C /path/to/here/ module/app_name" or "make -C /path/to/here/apps/module/app_name"
102 # instead.