blob: da8567d29fc68a74a9b6134f507182513315e478 [file] [log] [blame]
Travis Geiselbrecht78d0e6c2009-11-27 13:37:03 -08001ifeq ($(MAKECMDGOALS),spotless)
2spotless:
3 rm -rf build-*
4else
5
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -07006-include local.mk
Travis Geiselbrecht5bcbd9d2009-01-24 20:15:32 -08007include make/macros.mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -07008
Brian Swetlandf1e5afd2009-01-24 22:09:30 -08009# If one of our goals (from the commandline) happens to have a
10# matching project/goal.mk, then we should re-invoke make with
11# that project name specified...
12
13project-name := $(firstword $(MAKECMDGOALS))
14
15ifneq ($(project-name),)
16ifneq ($(wildcard project/$(project-name).mk),)
17do-nothing := 1
18$(MAKECMDGOALS) _all: make-make
19make-make:
20 @PROJECT=$(project-name) $(MAKE) $(filter-out $(project-name), $(MAKECMDGOALS))
21endif
22endif
23
24ifeq ($(do-nothing),)
25
26ifeq ($(PROJECT),)
27$(error No project specified. Use "make projectname" or put "PROJECT := projectname" in local.mk)
28endif
29
Chandan Uddaraju40b227d2010-08-03 19:25:41 -070030DEBUG ?= 0
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070031
Chandan Uddarajua9b07bb2009-11-21 12:22:02 -080032ifndef $(BOOTLOADER_OUT)
33BOOTLOADER_OUT := .
34endif
35
Chandan Uddaraju885e4db2009-12-03 22:45:26 -080036LK_TOP_DIR:= .
Chandan Uddarajua9b07bb2009-11-21 12:22:02 -080037BUILDDIR := $(BOOTLOADER_OUT)/build-$(PROJECT)
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070038OUTBIN := $(BUILDDIR)/lk.bin
39OUTELF := $(BUILDDIR)/lk
40CONFIGHEADER := $(BUILDDIR)/config.h
41
Subbaraman Narayanamurthy8bcd5fd2011-01-17 17:18:44 -080042#Initialize the command-line flag ENABLE_TRUSTZONE. Value for flag passed in at command-line will take precedence
43ENABLE_TRUSTZONE := 0
44
45ifeq ($(ENABLE_TRUSTZONE),1)
46 INPUT_TZ_BIN := tzbsp/tzbsp.bin
47 OUTPUT_TZ_BIN := $(BUILDDIR)/tzbsp_bin.o
48endif
49
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -070050INCLUDES := -I$(BUILDDIR) -Iinclude
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070051CFLAGS := -O2 -g -fno-builtin -finline -W -Wall -Wno-multichar -Wno-unused-parameter -Wno-unused-function -include $(CONFIGHEADER)
52#CFLAGS += -Werror
David Ng025c1d92009-12-09 23:46:00 -080053ifeq ($(EMMC_BOOT),1)
54 CFLAGS += -D_EMMC_BOOT=1
55endif
Christopher Johnson36cd7032010-11-09 14:46:30 -070056# When the host arch is ARM, ensure stack protection code is not emitted since
57# it's not supported by the bootloader's libc
58ifneq ($(shell uname -m | grep "arm.*"),)
59 CFLAGS += -fno-stack-protector
60endif
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070061CPPFLAGS := -fno-exceptions -fno-rtti -fno-threadsafe-statics
62#CPPFLAGS += -Weffc++
63ASMFLAGS := -DASSEMBLY
64LDFLAGS :=
65
66CFLAGS += -ffunction-sections -fdata-sections
67LDFLAGS += -gc-sections
68
69# top level rule
Chandan Uddarajua9b07bb2009-11-21 12:22:02 -080070all:: $(OUTBIN) $(OUTELF).lst $(OUTELF).debug.lst $(OUTELF).sym $(OUTELF).size APPSBOOTHEADER
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070071
72# the following three object lists are identical except for the ordering
73# which is bootobjs, kobjs, objs
74BOOTOBJS :=
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070075OBJS :=
76
77# a linker script needs to be declared in one of the project/target/platform files
78LINKER_SCRIPT :=
79
80# anything you add here will be deleted in make clean
81GENERATED := $(CONFIGHEADER)
82
83# anything added to DEFINES will be put into $(BUILDDIR)/config.h
84DEFINES := LK=1
85
86# Anything added to SRCDEPS will become a dependency of every source file in the system.
87# Useful for header files that may be included by one or more source files.
88SRCDEPS := $(CONFIGHEADER)
89
90# these need to be filled out by the project/target/platform rules.mk files
91TARGET :=
92PLATFORM :=
93ARCH :=
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -070094ALLMODULES :=
95MODULES :=
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070096
97# any rules you put here will also be built by the system before considered being complete
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -070098EXTRA_BUILDDEPS :=
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070099
100# any rules you put here will be depended on in clean builds
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700101EXTRA_CLEANDEPS :=
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700102
Travis Geiselbrecht577036f2009-01-24 21:37:21 -0800103include project/$(PROJECT).mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700104include target/$(TARGET)/rules.mk
Chandan Uddarajua9b07bb2009-11-21 12:22:02 -0800105include target/$(TARGET)/tools/makefile
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700106include platform/$(PLATFORM)/rules.mk
107include arch/$(ARCH)/rules.mk
108include platform/rules.mk
109include target/rules.mk
110include kernel/rules.mk
111include dev/rules.mk
Travis Geiselbrecht68372232009-01-24 21:21:08 -0800112include app/rules.mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700113
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700114# recursively include any modules in the MODULE variable, leaving a trail of included
115# modules in the ALLMODULES list
Travis Geiselbrecht5bcbd9d2009-01-24 20:15:32 -0800116include make/module.mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700117
118# any extra top level build dependencies that someone declared
119all:: $(EXTRA_BUILDDEPS)
120
121ALLOBJS := \
122 $(BOOTOBJS) \
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700123 $(OBJS)
124
125# add some automatic configuration defines
126DEFINES += \
Subbaraman Narayanamurthyeb92bcc2010-07-20 14:32:46 -0700127 BOARD=$(PROJECT) \
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700128 PROJECT_$(PROJECT)=1 \
129 TARGET_$(TARGET)=1 \
130 PLATFORM_$(PLATFORM)=1 \
131 ARCH_$(ARCH)=1 \
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700132 $(addsuffix =1,$(addprefix WITH_,$(ALLMODULES)))
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700133
134# debug build?
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700135ifneq ($(DEBUG),)
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700136DEFINES += \
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700137 DEBUG=$(DEBUG)
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700138endif
139
140ALLOBJS := $(addprefix $(BUILDDIR)/,$(ALLOBJS))
141
142DEPS := $(ALLOBJS:%o=%d)
143
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700144# default to no ccache
145CCACHE ?=
146CC := $(CCACHE) $(TOOLCHAIN_PREFIX)gcc
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700147LD := $(TOOLCHAIN_PREFIX)ld
148OBJDUMP := $(TOOLCHAIN_PREFIX)objdump
149OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy
150CPPFILT := $(TOOLCHAIN_PREFIX)c++filt
151SIZE := $(TOOLCHAIN_PREFIX)size
152NM := $(TOOLCHAIN_PREFIX)nm
153
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700154# comment out or override if you want to see the full output of each command
155NOECHO ?= @
156
157# the logic to compile and link stuff is in here
Travis Geiselbrecht5bcbd9d2009-01-24 20:15:32 -0800158include make/build.mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700159
160clean: $(EXTRA_CLEANDEPS)
161 rm -f $(ALLOBJS) $(DEPS) $(GENERATED) $(OUTBIN) $(OUTELF) $(OUTELF).lst
162
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700163install: all
164 scp $(OUTBIN) 192.168.0.4:/tftproot
165
166# generate a config.h file with all of the DEFINES laid out in #define format
167configheader:
168
169$(CONFIGHEADER): configheader
170 @$(MKDIR)
171 @echo generating $@
172 @rm -f $(CONFIGHEADER).tmp; \
173 echo \#ifndef __CONFIG_H > $(CONFIGHEADER).tmp; \
174 echo \#define __CONFIG_H >> $(CONFIGHEADER).tmp; \
175 for d in `echo $(DEFINES) | tr [:lower:] [:upper:]`; do \
176 echo "#define $$d" | sed "s/=/\ /g;s/-/_/g;s/\//_/g" >> $(CONFIGHEADER).tmp; \
177 done; \
178 echo \#endif >> $(CONFIGHEADER).tmp; \
179 if [ -f "$(CONFIGHEADER)" ]; then \
180 if cmp "$(CONFIGHEADER).tmp" "$(CONFIGHEADER)"; then \
181 rm -f $(CONFIGHEADER).tmp; \
182 else \
183 mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \
184 fi \
185 else \
186 mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \
187 fi
188
189# Empty rule for the .d files. The above rules will build .d files as a side
190# effect. Only works on gcc 3.x and above, however.
191%.d:
192
193ifeq ($(filter $(MAKECMDGOALS), clean), )
194-include $(DEPS)
195endif
196
197.PHONY: configheader
Brian Swetlandf1e5afd2009-01-24 22:09:30 -0800198endif
Travis Geiselbrecht78d0e6c2009-11-27 13:37:03 -0800199
200endif # make spotless