3 ###############################################################################
5 include $(srcdir)/Modules.generic
7 SUBSYSTEMS := ABI KERNEL LIBK DRIVERS MINILIBC \
8 CXXLIB VERSION JABI TCBOFFSET CRT0
11 PREPROCESS_PARTS += arch $(CONFIG_ABI) 32bit $(CONFIG_XARCH) \
15 PREPROCESS_PARTS-$(CONFIG_SERIAL) += serial
16 PREPROCESS_PARTS-$(CONFIG_MP) += mp
17 PREPROCESS_PARTS-$(CONFIG_FPU) += fpu
18 PREPROCESS_PARTS-$(CONFIG_LIST_ALLOC_SANITY) += list_alloc_debug
19 PREPROCESS_PARTS-$(CONFIG_JDB) += debug jdb log
20 PREPROCESS_PARTS-$(CONFIG_PERF_CNT) += perf_cnt
21 PREPROCESS_PARTS-$(CONFIG_ARM_CACHE_L2CXX0) += outer_cache outer_cache_l2cxx0
23 PREPROCESS_PARTS-$(CONFIG_ARM_920T) += armv5 arm920t vcache
24 PREPROCESS_PARTS-$(CONFIG_ARM_926) += armv5 926 vcache
25 PREPROCESS_PARTS-$(CONFIG_ARM_V6PLUS) += armv6plus
26 PREPROCESS_PARTS-$(CONFIG_ARM_V6) += armv6
27 PREPROCESS_PARTS-$(CONFIG_ARM_V7) += armv7
28 PREPROCESS_PARTS-$(CONFIG_ARM_1136) += arm1136
29 PREPROCESS_PARTS-$(CONFIG_ARM_1176) += arm1176
30 PREPROCESS_PARTS-$(CONFIG_ARM_MPCORE) += mpcore
31 PREPROCESS_PARTS-$(CONFIG_ARM_CORTEX_A8) += armca8
32 PREPROCESS_PARTS-$(CONFIG_ARM_CORTEX_A9) += armca9
33 PREPROCESS_PARTS-$(CONFIG_ARM_TZ) += tz
34 PREPROCESS_PARTS-$(CONFIG_ARM_1176_CACHE_ALIAS_FIX) += arm1176_cache_alias_fix
35 PREPROCESS_PARTS-$(CONFIG_SCHED_FIXED_PRIO) += sched_fixed_prio
36 PREPROCESS_PARTS-$(CONFIG_SCHED_WFQ) += sched_wfq
37 PREPROCESS_PARTS-$(CONFIG_SCHED_FP_WFQ) += sched_fp_wfq
39 PREPROCESS_PARTS += $(PREPROCESS_PARTS-y)
43 OBJ_SPACE = $(OBJ_SPACE-$(CONFIG_DISABLE_VIRT_OBJ_SPACE))
46 ifeq ("$(CONFIG_ARM_1176)@$(CONFIG_ARM_1176_CACHE_ALIAS_FIX)","y@")
49 OBJ_SPACE_TYPE = $(if $(CONFIG_ARM_V6PLUS),$(OBJ_SPACE),phys)
52 PREPROCESS_PARTS += obj_space_$(OBJ_SPACE_TYPE)
58 PRIVATE_INCDIR += types/$(CONFIG_XARCH) types
60 VPATH_LIBUART := $(srcdir)/lib/uart $(srcdir)/lib/uart/arm
61 PRIVATE_INCDIR += lib/uart
66 DRIVERS := libdrivers.a libgluedriverslibc.a
67 VPATH += drivers/$(CONFIG_XARCH) drivers
68 PRIVATE_INCDIR += drivers/$(CONFIG_XARCH) drivers
69 INTERFACES_DRIVERS := sa1100 mux_console console uart filter_console \
70 h3xxx io mem mmu reset processor delayloop
72 mmu_IMPL := mmu mmu-arm
73 mem_IMPL := mem mem-arm
76 processor_IMPL := processor processor-arm
77 CXXSRC_DRIVERS := glue_libc.cc
78 NOOPT += $(patsubst %.o, %, $(OBJ_DRIVERS))
85 VPATH += lib/minilibc/$(CONFIG_XARCH) lib/minilibc
86 PRIVATE_INCDIR += lib/minilibc/$(CONFIG_XARCH)/include lib/minilibc/include
87 CSRC_MINILIBC := atexit.c memccpy.c memcmp.c memmove.c memset.c memcpy.c \
88 memchr.c panic.c strchr.c strcmp.c strcpy.c strlen.c \
89 strncmp.c strncpy.c strstr.c __assert_fail.c printf.c \
90 __v_printf.c vprintf.c strtol.c strtoul.c __lltostr.c \
91 __ltostr.c putchar.c puts.c getchar.c gets.c \
92 construction.c sprintf.c snprintf.c vsnprintf.c vsprintf.c \
93 longjmp.c isalnum.c isalpha.c isascii.c isblank.c \
94 iscntrl.c isdigit.c isgraph.c islower.c isprint.c \
95 ispunct.c isspace.c isupper.c isxdigit.c strspn.c \
96 strcspn.c tolower.c raise.c aeabi.c
97 ASSRC_MINILIBC := setjmp.S
98 NOOPT += $(patsubst %.o, %, $(OBJ_MINILIBC))
102 # LIBGZIP subsystem (only for Jdb)
104 ifneq ($(CONFIG_JDB_GZIP),)
107 PRIVATE_INCDIR += lib/gzip
108 CSRC_LIBGZIP := adler32.c crc32.c gzip.c trees.c deflate.c zutil.c
109 NOOPT += $(patsubst %.o, %, $(OBJ_LIBGZIP))
117 VPATH += jabi/$(CONFIG_XARCH) jabi
118 INTERFACES_JABI := jdb_ktrace
125 VPATH += abi/$(CONFIG_XARCH) abi
127 INTERFACES_ABI := kip l4_types l4_fpage l4_msg_item \
130 l4_types_IMPL := l4_types l4_types-debug
134 kip_IMPL := kip kip-debug kip-arm
141 KERNEL_EXTRA := Symbols
142 VPATH += kern/$(CONFIG_XARCH) kern
144 PRIVATE_INCDIR += kern/$(CONFIG_XARCH) kern
146 INTERFACES_KERNEL += __main mem_op pagetable kmem_space boot_uart_init \
147 irq_chip_generic bootstrap kern_lib_page \
148 jdb_extensions outer_cache utcb_support
150 PREPROCESS_PARTS += ulock
151 INTERFACES_KERNEL += u_semaphore
153 INTERFACES_KERNEL-$(CONFIG_SERIAL) += uart_console
154 INTERFACES_KERNEL-$(CONFIG_ARM_TZ) += vm
156 INTERFACES_KERNEL += $(INTERFACES_KERNEL-y)
159 boot_info_IMPL := boot_info boot_info-arch
160 bootstrap_IMPL := bootstrap
162 config_IMPL := config config-arm
163 context_IMPL := context context-arm context-vcpu
164 continuation_IMPL := continuation-arm
165 cpu_IMPL := cpu cpu-arm
166 cpu_lock_IMPL := cpu_lock cpu_lock-generic
167 entry_frame_IMPL := entry_frame entry_frame-arm \
168 entry_frame-abs-timeout-hack
169 dirq_IMPL := dirq dirq-arm
170 fpu_IMPL := fpu fpu-arm
171 ipi_IMPL := ipi ipi-arm
172 kdb_ke_IMPL := kdb_ke kdb_ke-arm
173 kernel_task_IMPL := kernel_task kernel_task-arm
174 kernel_thread_IMPL := kernel_thread kernel_thread-std kernel_thread-arm
175 kernel_uart_IMPL := kernel_uart
176 map_util_IMPL := map_util map_util-mem map_util-objs
177 mapping_IMPL := mapping-arm mapping
178 mem_layout_IMPL := mem_layout mem_layout-arm mem_layout-noncont
179 mem_space_IMPL := mem_space mem_space-arm mem_space-user
180 kmem_alloc_IMPL := kmem_alloc kmem_alloc-arm
181 obj_space_IMPL := obj_space obj_space-$(OBJ_SPACE_TYPE)
182 outer_cache_IMPL := outer_cache outer_cache-l2cxx0
183 pagetable_IMPL := pagetable pagetable-arch
184 paging_IMPL := paging-arm paging
185 perf_cnt_IMPL := perf_cnt perf_cnt-arm
186 pic_IMPL := pic pic-arm
187 sched_context_IMPL := sched_context-wfq sched_context-fixed_prio \
188 sched_context-fp_wfq sched_context
189 space_IMPL := space space-arm
190 spin_lock_IMPL := spin_lock spin_lock-arm
191 startup_IMPL := startup startup-arm
192 sys_call_page_IMPL := sys_call_page sys_call_page-arm
193 task_IMPL := task task-arm
194 thread_IMPL := thread thread-arm \
195 thread-jdb thread-ipc \
196 thread-pagefault thread-log \
197 thread-ulock thread-vcpu
198 timer_IMPL := timer timer-arm
199 utcb_support_IMPL := utcb_support utcb_support-arm
200 vmem_alloc_IMPL := vmem_alloc vmem_alloc-arch
201 tb_entry_IMPL := tb_entry tb_entry-arm
204 ifeq ("$(CONFIG_JDB)","y")
205 JDB := jdb_compound.o
207 INTERFACES_JDB := jdb_handler_queue jdb_module jdb_pic \
208 jdb jdb_core jdb_prompt_ext jdb_list \
209 jdb_prompt_module jdb_exit_module jdb_kern_info \
210 jdb_tcb jdb_screen jdb_thread_list jdb_input \
211 jdb_symbol jdb_lines push_console \
212 jdb_timeout jdb_dump jdb_ptab \
213 jdb_attach_irq jdb_table \
214 jdb_kern_info_kmem_alloc \
215 jdb_kern_info_kip jdb_mapdb kern_cnt \
216 jdb_trace_set jdb_entry_frame \
217 jdb_kobject jdb_kobject_names \
218 jdb_util jdb_space jdb_utcb \
219 jdb_trap_state jdb_ipi jdb_rcupdate \
220 jdb_ipc_gate jdb_obj_space jdb_log jdb_factory \
221 jdb_semaphore jdb_thread jdb_scheduler jdb_sender_list\
222 jdb_perf jdb_vm jdb_regex jdb_disasm jdb_bp \
223 jdb_tbuf_output jdb_tbuf_show tb_entry_output
226 INTERFACES_KERNEL += jdb_tbuf jdb_tbuf_init tb_entry jdb_trace
227 jdb_IMPL := jdb jdb-arm jdb-ansi jdb-thread
228 jdb_kern_info_IMPL := jdb_kern_info jdb_kern_info-arm \
229 jdb_kern_info-bench jdb_kern_info-bench-arm \
230 jdb_kern_info-cpu-arm
231 jdb_dump_entry_frame_IMPL:= jdb_dump_entry_frame-arm
232 jdb_tcb_IMPL := jdb_tcb jdb_tcb-arm
233 jdb_ptab_IMPL := jdb_ptab jdb_ptab-ia32-ux-arm jdb_ptab-arm
234 jdb_entry_frame_IMPL := jdb_entry_frame-arm
235 jdb_trace_set_IMPL := jdb_trace_set jdb_trace_set-arm
237 thread_IMPL += thread-debug
239 ifneq ($(CONFIG_JDB_GZIP),)
240 ifneq ($(wildcard $(srcdir)/lib/gzip),)
241 SUBSYSTEMS += LIBGZIP
242 KERNEL_EXTRA_LIBS += $(LIBGZIP)
243 INTERFACES_KERNEL += jdb_gzip
247 INTERFACES_JDB += $(INTERFACES_JDB-y)
250 CXXSRC_KERNEL := kernel_panic.cc libc_backend_lock.cc
251 ASSRC_KERNEL := ivt.S $(if $(CONFIG_MP),tramp-mp.S)
252 CPPFLAGS += $(if $(CONFIG_MP),-DMPCORE_PHYS_BASE=$(MPCORE_PHYS_BASE))
254 NOOPT += $(filter jdb%,\
255 $(foreach in,$(INTERFACES_KERNEL), \
256 $(if $($(in)_IMPL),$($(in)_IMPL),$(in))))
257 NOOPT += tb_entry tb_entry_output
260 #INTERFACES_KERNEL = boot_info __main mapdb region \
261 # space_context space space_index space_index_util \
262 # stack kmem kmem_alloc slab_cache_anon kmem_slab_simple kmem_slab \
263 # switch_lock thread_lock helping_lock kernel_lock timer \
264 # thread_state sched context threadid thread_regs sender receiver \
265 # thread kernel_thread thread_util \
266 # map_util irq dirq virq console paranoia globals \
267 # checksum main config
281 INTERFACES_CXXLIB := paranoia s_cruft
287 VPATH += lib/libk/$(CONFIG_XARCH) lib/libk
288 PRIVATE_INCDIR += lib/libk/$(CONFIG_XARCH) lib/libk
290 #INTERFACES_LIBK:= atomic lock_guard profile uuencode gmon unistd panic auto_ptr
291 INTERFACES_LIBK := std_macros atomic lock_guard auto_ptr dlist
292 atomic_IMPL := atomic atomic-arm-up
294 ifeq ("$(CONFIG_JDB_DISASM)","y")
295 # $(srcdir)/lib/disasm may be removed
296 ifeq ($(wildcard $(srcdir)/lib/disasm),)
297 $(error $(srcdir)/lib/disasm is missing, disable CONFIG_JDB_DISASM)
299 SUBSYSTEMS += LIBDISASM
300 KERNEL_EXTRA_LIBS += $(LIBDISASM)
301 PREPROCESS_PARTS += jdb_disasm
303 LIBDISASM := libdisasm.a
304 VPATH += lib/disasm lib/disasm/elf lib/disasm/include \
305 lib/disasm/include/opcode lib/disasm/opcodes \
306 lib/disasm/libiberty lib/disasm/bfd
307 PRIVATE_INCDIR += lib/disasm lib/disasm/elf lib/disasm/include \
308 lib/disasm/include/opcode lib/disasm/opcodes \
309 lib/disasm/libiberty lib/disasm/bfd
310 PRIVATE_INCDIR += lib/disasm
311 CSRC_LIBDISASM := disasm.c arm-dis.c dis-init.c dis-buf.c safe-ctype.c
312 NOOPT += $(patsubst %.o, %, $(OBJ_LIBDISASM))
320 TCBOFFSET := tcboffset.h
321 CXXSRC_TCBOFFSET := tcboffset.cc dump_tcboffsets.cc
323 BSP_NAME := $(patsubst "%",%,$(CONFIG_BSP_NAME))
324 MODULES_FILE_BSP := $(srcdir)/kern/arm/bsp/$(BSP_NAME)/Modules
325 ifeq ($(wildcard $(MODULES_FILE_BSP)),)
326 $(error No BSP name defined or no BSP Modules file available)
329 include $(MODULES_FILE_BSP)
330 VPATH += kern/arm/bsp/$(BSP_NAME) kern/arm/bsp
332 ifeq ("$(filter LIBUART, $(SUBSYSTEMS))","LIBUART")
333 LIBUART := uart/libuart.a
336 ifneq ($(CONFIG_MP),)
337 ifeq ($(MPCORE_PHYS_BASE),)
338 $(error $(MODULES_FILE_BSP) needs to set MPCORE_PHYS_BASE variable)
342 MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP)