osd-contiki/Makefile.include
Jim Paris 0c163122da Pretty-print the output by default.
This makes it a lot easier to see what's going on, and let me find
some problems.  Use "make Q=" or set Q= blank in your user Makefile
to see the full commands.
2010-09-24 18:22:11 -04:00

141 lines
3.9 KiB
Makefile

# Hey Emacs, this is a -*- makefile -*-
# Set up a default target in case the user didn't already have one.
# "all" means to build .bin for all defined targets for the currently-defined board
all: $(addsuffix _$(BOARD).bin, $(TARGETS) $(TARGETS_ROMVARS))
.PHONY: all
# Pretty print output. Use "make Q=" to see full commands
Q ?= @
define pretty
@printf "%8s %s\n" "$1" "$2"
endef
# Don't delete intermediate targets
.SECONDARY:
#####
# Tools and flags
# Set up cross compiler and toolchain definitions.
CROSS_COMPILE ?= arm-linux-
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
RANLIB = $(CROSS_COMPILE)ranlib
# Build CFLAGS and prepend it to user-supplied CFLAGS
CFLAGS_PLAT ?= -march=armv4t -mtune=arm7tdmi-s -mlong-calls -msoft-float \
-mthumb-interwork -fno-strict-aliasing -fno-common -ffixed-r8 \
-ffunction-sections -ffreestanding -fno-builtin
CFLAGS_WARN ?= -Wcast-align -Wall -Wstrict-prototypes -Wextra
CFLAGS_OPT ?= -Os
CFLAGS_DEBUG ?= -g -DDEBUG -Werror
CFLAGS_MISC ?= -pipe
CFLAGS := $(CFLAGS_PLAT) $(CFLAGS_WARN) $(CFLAGS_OPT) $(CFLAGS_DEBUG) $(CFLAGS_MISC) $(CFLAGS)
# Thumb flags, used for building most objects
CFLAGS_THUMB ?= -mthumb -mcallee-super-interworking
# Linker flags
LINKERSCRIPT ?= $(MC1322X)/mc1322x.lds
LDFLAGS ?= -T $(LINKERSCRIPT) -nostartfiles -static -export-dynamic -Wl,-Map=$(@:.elf=.map)
# Assembler flags
AFLAGS ?= -Wa,-gstabs $(CFLAGS)
# Misc tool options
OBJCOPYFLAGS ?= --gap-fill=0xff
ARFLAGS = cr
#####
include $(MC1322X)/board/Makefile.board
include $(MC1322X)/lib/Makefile.lib
include $(MC1322X)/src/Makefile.src
#####
# Rule for building ELF files. We generate both a wildcard rule
# that links $(SRCLIB) as well as target-specific rules that link $(SRCLIB_ROMVARS)
define build_elf_rule
$(1)_$$(BOARD).elf: $$(OBJDIR)/$(1).o $$(OBJDIR)/board.a $$(MC1322X)/lib/libmc1322x.a $(2)
$$(call pretty,LINK,$$@)
$$Q$$(CC) $$(LDFLAGS) -o $$@ -Wl,--start-group $$^ -lm -Wl,--end-group
endef
# Targets that need space for rom variables:
$(foreach t, $(TARGETS_ROMVARS), $(eval $(call build_elf_rule,$(t),$(SRCLIB_ROMVARS))))
# All other targets (wildcard rule):
$(eval $(call build_elf_rule,%,$(SRCLIB)))
# Generic rules
%.srec: %.elf
$(call pretty,OBJCOPY,$@)
$Q$(OBJCOPY) $(OBJCOPYFLAGS) -O srec $< $@
%.ihex: %.elf
$(call pretty,OBJCOPY,$@)
$Q$(OBJCOPY) $(OBJCOPYFLAGS) -O ihex $< $@
%.bin: %.elf
$(call pretty,OBJCOPY,$@)
$Q$(OBJCOPY) $(OBJCOPYFLAGS) -O binary $< $@
%.dis: %.elf
$(call pretty,OBJDUMP,$@)
$Q$(OBJDUMP) -Sd $< > $@ || rm -f $@
%.o: %.c
$(call pretty,CC,$@)
$Q$(CC) $(CFLAGS) $(CFLAGS_THUMB) -MMD -c -o $@ $<
@$(FINALIZE_DEPENDENCY)
%.o: %.S
$(call pretty,AS,$@)
$Q$(CC) $(AFLAGS) -MMD -c -o $@ $<
@$(FINALIZE_DEPENDENCY)
(%): %
$(call pretty,AR,$@($<))
@$(AR) $(ARFLAGS) $@ $<
# Fix the dependencies generated for a particular target .o
# See http://make.paulandlesley.org/autodep.html#advanced
define FINALIZE_DEPENDENCY
cp $(@:.o=.d) $(@:.o=.$$$$); \
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $(@:.o=.$$$$) >> $(@:.o=.d); \
rm -f $(@:.o=.$$$$)
endef
clean::
rm -f *.{o,d,a,bin,elf,ihex,srec,dis,map,bak} *~
rm -rf obj_*
.PHONY: clean
##############################
# If no single board was specified, invoke make recursively for each
# board in $(BOARDS), or $(ALL_BOARDS) if that wasn't specified either.
# This is at the end so that it can override all other targets.
ifndef BOARD
ifneq ($(MAKECMDGOALS),clean)
.DEFAULT_GOAL=mc1322x-default
BOARDS ?= $(ALL_BOARDS)
define build_board
@echo "Building for board: $(1)"
@$(MAKE) --no-print-directory BOARD=$(1) $(2)
endef
$(MAKECMDGOALS):
$(foreach b, $(BOARDS), $(call build_board,$(b),$@))
mc1322x-default:
$(foreach b, $(BOARDS), $(call build_board,$(b),))
endif
endif