[FOSS_TLK]tlk: add LOCAL_MODULE_SUFFIX for tlk
[3rdparty/ote_partner/tlk.git] / secure_monitor / 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)/ $(MON_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)/secure_monitor
43 CONFIGHEADER := $(BUILDDIR)/config.h
44 MONELF := $(BUILDDIR)/monitor.elf
45 MONBIN := $(BUILDDIR)/monitor.bin
46 MONLIB := $(BUILDDIR)/libmonitor.a
47
48 INCLUDES := -I$(BUILDDIR) -Iinclude -Ilib/monitor/arm64/include
49 GLOBAL_OPTFLAGS ?= -Os
50 GLOBAL_COMPILEFLAGS := -g -fno-builtin -finline -W -Wall -Wno-multichar -Wno-unused-parameter -Wno-unused-function -include $(CONFIGHEADER)
51 GLOBAL_CFLAGS := --std=c99 -Werror-implicit-function-declaration
52 #GLOBAL_CFLAGS += -Werror
53 GLOBAL_CPPFLAGS := -fno-exceptions -fno-rtti -fno-threadsafe-statics
54 #GLOBAL_CPPFLAGS += -Weffc++
55 GLOBAL_ASMFLAGS := -DASSEMBLY
56 GLOBAL_LDFLAGS :=
57 GLOBAL_ARFLAGS := crsPD
58
59 GLOBAL_COMPILEFLAGS += -ffunction-sections -fdata-sections
60 GLOBAL_LDFLAGS += -gc-sections
61
62 # top level rule, based on whether we are building whole tos or just monitor
63 ifeq ($(STANDALONE_MONITOR), true)
64 all:: $(TOSIMAGE)
65 else
66 ifeq ($(MONITOR_LIBRARY), true)
67 all:: $(MONLIB)
68 else
69 all:: $(MONBIN)
70 endif # MONITOR_LIBRARY == true (for t124 builds only)
71 endif # STANDALONE_MONITOR == true (for 64 bit monitor, non tlk builds)
72
73 # master module object list
74 ALLOBJS_MODULE :=
75
76 # master object list (for dep generation)
77 ALLOBJS :=
78
79 # a linker script needs to be declared in one of the project/target/platform files
80 LINKER_SCRIPT :=
81 MON_LINKER_SCRIPT :=
82
83 # anything you add here will be deleted in make clean
84 GENERATED := $(CONFIGHEADER)
85
86 # anything added to DEFINES will be put into $(BUILDDIR)/config.h
87 DEFINES := LK=1
88
89 # Anything added to SRCDEPS will become a dependency of every source file in the system.
90 # Useful for header files that may be included by one or more source files.
91 SRCDEPS := $(CONFIGHEADER)
92
93 # these need to be filled out by the project/target/platform rules.mk files
94 TARGET :=
95 PLATFORM :=
96 ARCH :=
97 ALLMODULES :=
98 MODULES :=
99
100 # any rules you put here will also be built by the system before considered being complete
101 EXTRA_BUILDDEPS :=
102
103 # any rules you put here will be depended on in clean builds
104 EXTRA_CLEANDEPS :=
105
106 # any objects you put here get linked with the final image
107 EXTRA_OBJS :=
108
109 include target/$(TARGET)/rules.mk
110 include platform/$(PLATFORM)/rules.mk
111
112 $(info PROJECT = $(PROJECT))
113 $(info PLATFORM = $(PLATFORM))
114 $(info TARGET = $(TARGET))
115 $(info STANDALONE_MONITOR = $(STANDALONE_MONITOR))
116 $(info TARGET_ARCH = $(TARGET_ARCH))
117
118 include arch/$(ARCH)/rules.mk
119
120 ifeq ($(MONITOR_LIBRARY), false)
121 include lib/monitor/rules.mk
122 endif
123 include platform/tegra/monitor/rules.mk
124
125 # any extra top level build dependencies that someone declared
126 all:: $(EXTRA_BUILDDEPS)
127
128 # add some automatic configuration defines
129 DEFINES += \
130         PROJECT_$(PROJECT)=1 \
131         TARGET_$(TARGET)=1 \
132         PLATFORM_$(PLATFORM)=1 \
133         ARCH_$(ARCH)=1 \
134         $(addsuffix =1,$(addprefix WITH_,$(ALLMODULES)))
135
136 # debug build?
137 ifneq ($(DEBUG),)
138 DEFINES += \
139         DEBUG=$(DEBUG)
140 endif
141
142 # allow additional defines from outside the build system
143 ifneq ($(EXTERNAL_DEFINES),)
144 DEFINES += $(EXTERNAL_DEFINES)
145 $(info EXTERNAL_DEFINES = $(EXTERNAL_DEFINES))
146 endif
147
148 DEPS := $(ALLOBJS:%o=%d)
149
150 #$(warning DEPS=$(DEPS))
151
152 # default to no ccache
153 CCACHE ?=
154 CC := $(CCACHE) $(TOOLCHAIN_PREFIX)gcc
155 LD := $(TOOLCHAIN_PREFIX)ld
156 OBJDUMP := $(TOOLCHAIN_PREFIX)objdump
157 OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy
158 CPPFILT := $(TOOLCHAIN_PREFIX)c++filt
159 SIZE := $(TOOLCHAIN_PREFIX)size
160 NM := $(TOOLCHAIN_PREFIX)nm
161 AR := $(TOOLCHAIN_PREFIX)ar
162
163 # put all of the global build flags in config.h to force a rebuild if any change
164 DEFINES += INCLUDES=\"$(subst $(SPACE),_,$(INCLUDES))\"
165 DEFINES += GLOBAL_COMPILEFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_COMPILEFLAGS))\"
166 DEFINES += GLOBAL_OPTFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_OPTFLAGS))\"
167 DEFINES += GLOBAL_CFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_CFLAGS))\"
168 DEFINES += GLOBAL_CPPFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_CPPFLAGS))\"
169 DEFINES += GLOBAL_ASMFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_ASMFLAGS))\"
170 DEFINES += GLOBAL_LDFLAGS=\"$(subst $(SPACE),_,$(GLOBAL_LDFLAGS))\"
171
172 # comment out or override if you want to see the full output of each command
173 NOECHO ?= @
174
175 ifneq ($(OBJS),)
176 $(warning OBJS=$(OBJS))
177 $(error OBJS is not empty, please convert to new module format)
178 endif
179 ifneq ($(OPTFLAGS),)
180 $(warning OPTFLAGS=$(OPTFLAGS))
181 $(error OPTFLAGS is not empty, please use GLOBAL_OPTFLAGS or MODULE_OPTFLAGS)
182 endif
183 ifneq ($(CFLAGS),)
184 $(warning CFLAGS=$(CFLAGS))
185 $(error CFLAGS is not empty, please use GLOBAL_CFLAGS or MODULE_CFLAGS)
186 endif
187 ifneq ($(CPPFLAGS),)
188 $(warning CPPFLAGS=$(CPPFLAGS))
189 $(error CPPFLAGS is not empty, please use GLOBAL_CPPFLAGS or MODULE_CPPFLAGS)
190 endif
191
192 # the logic to compile and link stuff is in here
193 include make/build.mk
194
195 clean: $(EXTRA_CLEANDEPS)
196         rm -f $(ALLOBJS) $(DEPS) $(GENERATED)
197
198 # generate a config.h file with all of the DEFINES laid out in #define format
199 configheader:
200
201 $(CONFIGHEADER): configheader
202         $(call MAKECONFIGHEADER,$@,DEFINES)
203
204 # Empty rule for the .d files. The above rules will build .d files as a side
205 # effect. Only works on gcc 3.x and above, however.
206 %.d:
207
208 ifeq ($(filter $(MAKECMDGOALS), clean), )
209 -include $(DEPS)
210 endif
211
212 .PHONY: configheader
213 endif
214
215 endif # make spotless