blob: f93bfd939a8894cd95937a0cc3f6103974b5a52a [file] [log] [blame]
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -07001-include local.mk
Travis Geiselbrecht5bcbd9d2009-01-24 20:15:32 -08002include make/macros.mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -07003
Brian Swetlandf1e5afd2009-01-24 22:09:30 -08004# If one of our goals (from the commandline) happens to have a
5# matching project/goal.mk, then we should re-invoke make with
6# that project name specified...
7
8project-name := $(firstword $(MAKECMDGOALS))
9
10ifneq ($(project-name),)
11ifneq ($(wildcard project/$(project-name).mk),)
12do-nothing := 1
13$(MAKECMDGOALS) _all: make-make
14make-make:
15 @PROJECT=$(project-name) $(MAKE) $(filter-out $(project-name), $(MAKECMDGOALS))
16endif
17endif
18
19ifeq ($(do-nothing),)
20
21ifeq ($(PROJECT),)
22$(error No project specified. Use "make projectname" or put "PROJECT := projectname" in local.mk)
23endif
24
Chandan Uddaraju40b227d2010-08-03 19:25:41 -070025DEBUG ?= 0
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070026
Chandan Uddarajua9b07bb2009-11-21 12:22:02 -080027ifndef $(BOOTLOADER_OUT)
28BOOTLOADER_OUT := .
29endif
30
Chandan Uddaraju885e4db2009-12-03 22:45:26 -080031LK_TOP_DIR:= .
Chandan Uddarajua9b07bb2009-11-21 12:22:02 -080032BUILDDIR := $(BOOTLOADER_OUT)/build-$(PROJECT)
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070033OUTBIN := $(BUILDDIR)/lk.bin
34OUTELF := $(BUILDDIR)/lk
35CONFIGHEADER := $(BUILDDIR)/config.h
36
Subbaraman Narayanamurthy8bcd5fd2011-01-17 17:18:44 -080037#Initialize the command-line flag ENABLE_TRUSTZONE. Value for flag passed in at command-line will take precedence
38ENABLE_TRUSTZONE := 0
39
40ifeq ($(ENABLE_TRUSTZONE),1)
41 INPUT_TZ_BIN := tzbsp/tzbsp.bin
42 OUTPUT_TZ_BIN := $(BUILDDIR)/tzbsp_bin.o
43endif
44
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -070045INCLUDES := -I$(BUILDDIR) -Iinclude
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070046CFLAGS := -O2 -g -fno-builtin -finline -W -Wall -Wno-multichar -Wno-unused-parameter -Wno-unused-function -include $(CONFIGHEADER)
47#CFLAGS += -Werror
David Ng025c1d92009-12-09 23:46:00 -080048ifeq ($(EMMC_BOOT),1)
49 CFLAGS += -D_EMMC_BOOT=1
50endif
Christopher Johnson36cd7032010-11-09 14:46:30 -070051# When the host arch is ARM, ensure stack protection code is not emitted since
52# it's not supported by the bootloader's libc
53ifneq ($(shell uname -m | grep "arm.*"),)
54 CFLAGS += -fno-stack-protector
55endif
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070056CPPFLAGS := -fno-exceptions -fno-rtti -fno-threadsafe-statics
57#CPPFLAGS += -Weffc++
58ASMFLAGS := -DASSEMBLY
59LDFLAGS :=
60
61CFLAGS += -ffunction-sections -fdata-sections
62LDFLAGS += -gc-sections
63
64# top level rule
Chandan Uddarajua9b07bb2009-11-21 12:22:02 -080065all:: $(OUTBIN) $(OUTELF).lst $(OUTELF).debug.lst $(OUTELF).sym $(OUTELF).size APPSBOOTHEADER
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070066
67# the following three object lists are identical except for the ordering
68# which is bootobjs, kobjs, objs
69BOOTOBJS :=
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070070OBJS :=
71
72# a linker script needs to be declared in one of the project/target/platform files
73LINKER_SCRIPT :=
74
75# anything you add here will be deleted in make clean
76GENERATED := $(CONFIGHEADER)
77
78# anything added to DEFINES will be put into $(BUILDDIR)/config.h
79DEFINES := LK=1
80
81# Anything added to SRCDEPS will become a dependency of every source file in the system.
82# Useful for header files that may be included by one or more source files.
83SRCDEPS := $(CONFIGHEADER)
84
85# these need to be filled out by the project/target/platform rules.mk files
86TARGET :=
87PLATFORM :=
88ARCH :=
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -070089ALLMODULES :=
90MODULES :=
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070091
92# any rules you put here will also be built by the system before considered being complete
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -070093EXTRA_BUILDDEPS :=
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070094
95# any rules you put here will be depended on in clean builds
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -070096EXTRA_CLEANDEPS :=
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070097
Travis Geiselbrecht577036f2009-01-24 21:37:21 -080098include project/$(PROJECT).mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -070099include target/$(TARGET)/rules.mk
Chandan Uddarajua9b07bb2009-11-21 12:22:02 -0800100include target/$(TARGET)/tools/makefile
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700101include platform/$(PLATFORM)/rules.mk
102include arch/$(ARCH)/rules.mk
103include platform/rules.mk
104include target/rules.mk
105include kernel/rules.mk
106include dev/rules.mk
Travis Geiselbrecht68372232009-01-24 21:21:08 -0800107include app/rules.mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700108
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700109# recursively include any modules in the MODULE variable, leaving a trail of included
110# modules in the ALLMODULES list
Travis Geiselbrecht5bcbd9d2009-01-24 20:15:32 -0800111include make/module.mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700112
113# any extra top level build dependencies that someone declared
114all:: $(EXTRA_BUILDDEPS)
115
116ALLOBJS := \
117 $(BOOTOBJS) \
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700118 $(OBJS)
119
120# add some automatic configuration defines
121DEFINES += \
Subbaraman Narayanamurthyeb92bcc2010-07-20 14:32:46 -0700122 BOARD=$(PROJECT) \
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700123 PROJECT_$(PROJECT)=1 \
124 TARGET_$(TARGET)=1 \
125 PLATFORM_$(PLATFORM)=1 \
126 ARCH_$(ARCH)=1 \
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700127 $(addsuffix =1,$(addprefix WITH_,$(ALLMODULES)))
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700128
129# debug build?
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700130ifneq ($(DEBUG),)
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700131DEFINES += \
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700132 DEBUG=$(DEBUG)
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700133endif
134
135ALLOBJS := $(addprefix $(BUILDDIR)/,$(ALLOBJS))
136
137DEPS := $(ALLOBJS:%o=%d)
138
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700139# default to no ccache
140CCACHE ?=
141CC := $(CCACHE) $(TOOLCHAIN_PREFIX)gcc
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700142LD := $(TOOLCHAIN_PREFIX)ld
143OBJDUMP := $(TOOLCHAIN_PREFIX)objdump
144OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy
145CPPFILT := $(TOOLCHAIN_PREFIX)c++filt
146SIZE := $(TOOLCHAIN_PREFIX)size
147NM := $(TOOLCHAIN_PREFIX)nm
148
Travis Geiselbrechtf54ab822008-09-05 04:14:40 -0700149# comment out or override if you want to see the full output of each command
150NOECHO ?= @
151
152# the logic to compile and link stuff is in here
Travis Geiselbrecht5bcbd9d2009-01-24 20:15:32 -0800153include make/build.mk
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -0700154
155clean: $(EXTRA_CLEANDEPS)
156 rm -f $(ALLOBJS) $(DEPS) $(GENERATED) $(OUTBIN) $(OUTELF) $(OUTELF).lst
157
158spotless:
159 rm -rf build-*
160
161install: all
162 scp $(OUTBIN) 192.168.0.4:/tftproot
163
164# generate a config.h file with all of the DEFINES laid out in #define format
165configheader:
166
167$(CONFIGHEADER): configheader
168 @$(MKDIR)
169 @echo generating $@
170 @rm -f $(CONFIGHEADER).tmp; \
171 echo \#ifndef __CONFIG_H > $(CONFIGHEADER).tmp; \
172 echo \#define __CONFIG_H >> $(CONFIGHEADER).tmp; \
173 for d in `echo $(DEFINES) | tr [:lower:] [:upper:]`; do \
174 echo "#define $$d" | sed "s/=/\ /g;s/-/_/g;s/\//_/g" >> $(CONFIGHEADER).tmp; \
175 done; \
176 echo \#endif >> $(CONFIGHEADER).tmp; \
177 if [ -f "$(CONFIGHEADER)" ]; then \
178 if cmp "$(CONFIGHEADER).tmp" "$(CONFIGHEADER)"; then \
179 rm -f $(CONFIGHEADER).tmp; \
180 else \
181 mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \
182 fi \
183 else \
184 mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \
185 fi
186
187# Empty rule for the .d files. The above rules will build .d files as a side
188# effect. Only works on gcc 3.x and above, however.
189%.d:
190
191ifeq ($(filter $(MAKECMDGOALS), clean), )
192-include $(DEPS)
193endif
194
195.PHONY: configheader
Brian Swetlandf1e5afd2009-01-24 22:09:30 -0800196endif