[FOSS_TLK]ote: tlk: makefile change for upstream TLK
[3rdparty/ote_partner/tlk.git] / makefile
1 PREFIX ?= ..
2
3 ifeq ($(TARGET_ARCH),arm64)
4 TOOLCHAIN_PREFIX ?= ../tools/aarch64-linux-android-4.8/bin/aarch64-linux-android-
5 TOOLCHAIN_PREFIX64 ?= ../tools/aarch64-linux-android-4.8/bin/aarch64-linux-android-
6 else
7 TOOLCHAIN_PREFIX ?= ../tools/arm-eabi-4.7/bin/arm-eabi-
8 TOOLCHAIN_PREFIX64 ?= ../tools/aarch64-linux-android-4.8/bin/aarch64-linux-android-
9 endif
10
11 ifeq ($(MAKECMDGOALS),spotless)
12 spotless:
13         rm -rf $(PREFIX)/build-* $(LK_IMAGE)
14 else
15
16 -include local.mk
17 include make/macros.mk
18
19 # If one of our goals (from the commandline) happens to have a
20 # matching project/goal.mk, then we should re-invoke make with
21 # that project name specified...
22
23 project-name := $(firstword $(MAKECMDGOALS))
24
25 ifneq ($(project-name),)
26 ifneq ($(wildcard project/$(project-name).mk),)
27 do-nothing := 1
28 $(MAKECMDGOALS) _all: make-make
29 make-make:
30         @PROJECT=$(project-name) $(MAKE) $(filter-out $(project-name), $(MAKECMDGOALS))
31 endif
32 endif
33
34 ifeq ($(do-nothing),)
35
36 ifeq ($(PROJECT),)
37 $(error No project specified.  Use "make projectname" or put "PROJECT := projectname" in local.mk)
38 endif
39
40 DEBUG ?= 2
41
42 BUILDDIR := $(PREFIX)/build-$(TARGET)
43 OUTBIN := $(BUILDDIR)/lk.bin
44 OUTELF := $(BUILDDIR)/lk
45 OUTSYS := $(BUILDDIR)/lk.sys
46 OUTTASK := $(BUILDDIR)/lk.task
47 CONFIGHEADER := $(BUILDDIR)/config.h
48 IMGBIN := $(BUILDDIR)/img.bin
49 TOSIMAGE ?= $(BUILDDIR)/tos.img
50 MONLIB := $(BUILDDIR)/secure_monitor/libmonitor.a
51
52 TASK_MODULES := \
53         trusted_app \
54         trusted_app2
55
56 TASKS ?= \
57         $(foreach task,$(TASK_MODULES), ../out/tasks/$(task)/$(task))
58
59 ifneq ($(TARGET),t124)
60 DEFINES += \
61         WITH_MONITOR_BIN=1
62 MONLIB :=
63 MONBIN := $(BUILDDIR)/secure_monitor/monitor.bin
64 endif
65
66 INCLUDES := -I$(BUILDDIR) -Iinclude -I../lib/include
67 GLOBAL_OPTFLAGS ?= -Os
68 GLOBAL_COMPILEFLAGS := -g -fno-builtin -finline -W -Wall -Wno-multichar -Wno-unused-parameter -Wno-unused-function -include $(CONFIGHEADER)
69 GLOBAL_CFLAGS := --std=c99 -Werror-implicit-function-declaration
70 #GLOBAL_CFLAGS += -Werror
71 GLOBAL_CPPFLAGS := -fno-exceptions -fno-rtti -fno-threadsafe-statics
72 #GLOBAL_CPPFLAGS += -Weffc++
73 GLOBAL_ASMFLAGS := -DASSEMBLY
74 GLOBAL_LDFLAGS :=
75
76 GLOBAL_COMPILEFLAGS += -ffunction-sections -fdata-sections
77 GLOBAL_LDFLAGS += -gc-sections
78
79 # top level rule
80 all:: $(TOSIMAGE) $(OUTTASK) $(OUTELF).lst $(OUTELF).debug.lst $(OUTELF).sym $(OUTELF).size
81
82 # master module object list
83 ALLOBJS_MODULE :=
84
85 # master object list (for dep generation)
86 ALLOBJS :=
87
88 # a linker script needs to be declared in one of the project/target/platform files
89 LINKER_SCRIPT :=
90 MON_LINKER_SCRIPT :=
91
92 # anything you add here will be deleted in make clean
93 GENERATED := $(CONFIGHEADER)
94
95 # anything added to DEFINES will be put into $(BUILDDIR)/config.h
96 DEFINES += LK=1
97
98 # Anything added to SRCDEPS will become a dependency of every source file in the system.
99 # Useful for header files that may be included by one or more source files.
100 SRCDEPS := $(CONFIGHEADER)
101
102 # these need to be filled out by the project/target/platform rules.mk files
103 TARGET :=
104 PLATFORM :=
105 ARCH :=
106 ALLMODULES :=
107 MODULES :=
108
109 # any rules you put here will also be built by the system before considered being complete
110 EXTRA_BUILDDEPS :=
111
112 # any rules you put here will be depended on in clean builds
113 EXTRA_CLEANDEPS :=
114
115 # any objects you put here get linked with the final image
116 EXTRA_OBJS :=
117
118 include project/$(PROJECT).mk
119 include target/$(TARGET)/rules.mk
120 include platform/$(PLATFORM)/rules.mk
121
122 $(info PROJECT = $(PROJECT))
123 $(info PLATFORM = $(PLATFORM))
124 $(info TARGET = $(TARGET))
125 $(info MONLIB = $(MONLIB))
126 $(info TARGET_ARCH = $(TARGET_ARCH))
127
128 include arch/$(ARCH)/rules.mk
129 include platform/rules.mk
130 include target/rules.mk
131 include kernel/rules.mk
132 include dev/rules.mk
133 include app/rules.mk
134 #include task/rules.mk
135
136 # recursively include any modules in the MODULE variable, leaving a trail of included
137 # modules in the ALLMODULES list
138 include make/recurse.mk
139
140 # any extra top level build dependencies that someone declared
141 all:: $(EXTRA_BUILDDEPS)
142
143 # add some automatic configuration defines
144 DEFINES += \
145         PROJECT_$(PROJECT)=1 \
146         TARGET_$(TARGET)=1 \
147         PLATFORM_$(PLATFORM)=1 \
148         ARCH_$(ARCH)=1 \
149         $(addsuffix =1,$(addprefix WITH_,$(ALLMODULES)))
150
151 # debug build?
152 ifneq ($(DEBUG),)
153 DEFINES += \
154         DEBUG=$(DEBUG)
155 endif
156
157 # allow additional defines from outside the build system
158 ifneq ($(EXTERNAL_DEFINES),)
159 DEFINES += $(EXTERNAL_DEFINES)
160 $(info EXTERNAL_DEFINES = $(EXTERNAL_DEFINES))
161 endif
162
163 DEPS := $(ALLOBJS:%o=%d)
164
165 #$(warning DEPS=$(DEPS))
166
167 # default to no ccache
168 CCACHE ?=
169 CC := $(CCACHE) $(TOOLCHAIN_PREFIX)gcc
170 LD := $(TOOLCHAIN_PREFIX)ld
171 OBJDUMP := $(TOOLCHAIN_PREFIX)objdump
172 OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy
173 CPPFILT := $(TOOLCHAIN_PREFIX)c++filt
174 SIZE := $(TOOLCHAIN_PREFIX)size
175 NM := $(TOOLCHAIN_PREFIX)nm
176
177 # put all of the global build flags in config.h to force a rebuild if any change
178 DEFINES += INCLUDES=\"$(subst $(SPACE),_,$(INCLUDES))\"
179 DEFINES += GLOBAL_COMPILEFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_COMPILEFLAGS))\"
180 DEFINES += GLOBAL_OPTFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_OPTFLAGS))\"
181 DEFINES += GLOBAL_CFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_CFLAGS))\"
182 DEFINES += GLOBAL_CPPFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_CPPFLAGS))\"
183 DEFINES += GLOBAL_ASMFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_ASMFLAGS))\"
184 DEFINES += GLOBAL_LDFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_LDFLAGS))\"
185
186 # comment out or override if you want to see the full output of each command
187 NOECHO ?= @
188
189 #$(warning ALLMODULE_OBJS=$(ALLMODULE_OBJS))
190
191 ifneq ($(OBJS),)
192 $(warning OBJS=$(OBJS))
193 $(error OBJS is not empty, please convert to new module format)
194 endif
195 ifneq ($(OPTFLAGS),)
196 $(warning OPTFLAGS=$(OPTFLAGS))
197 $(error OPTFLAGS is not empty, please use GLOBAL_OPTFLAGS or MODULE_OPTFLAGS)
198 endif
199 ifneq ($(CFLAGS),)
200 $(warning CFLAGS=$(CFLAGS))
201 $(error CFLAGS is not empty, please use GLOBAL_CFLAGS or MODULE_CFLAGS)
202 endif
203 ifneq ($(CPPFLAGS),)
204 $(warning CPPFLAGS=$(CPPFLAGS))
205 $(error CPPFLAGS is not empty, please use GLOBAL_CPPFLAGS or MODULE_CPPFLAGS)
206 endif
207
208 include lib/version/version.mk
209
210 # the logic to compile and link stuff is in here
211 include make/build.mk
212
213 clean: $(EXTRA_CLEANDEPS)
214         rm -f $(ALLOBJS) $(DEPS) $(GENERATED) $(OUTBIN) $(OUTELF) $(OUTSYS) $(OUTTASK) $(OUTELF).lst
215
216 install: all
217         scp $(OUTBIN) 192.168.0.4:/tftproot
218
219 # generate a config.h file with all of the DEFINES laid out in #define format
220 configheader:
221
222 $(CONFIGHEADER): configheader
223         $(call MAKECONFIGHEADER,$@,DEFINES)
224
225 # Empty rule for the .d files. The above rules will build .d files as a side
226 # effect. Only works on gcc 3.x and above, however.
227 %.d:
228
229 ifeq ($(filter $(MAKECMDGOALS), clean), )
230 -include $(DEPS)
231 endif
232
233 .PHONY: configheader
234 endif
235
236 endif # make spotless