]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/Modules.arm
update
[l4.git] / kernel / fiasco / src / Modules.arm
1 # -*- makefile -*-
2
3 ###############################################################################
4
5 include $(srcdir)/Modules.generic
6
7 SUBSYSTEMS :=   ABI KERNEL LIBK DRIVERS MINILIBC \
8                 CXXLIB VERSION JABI TCBOFFSET CRT0
9
10
11 PREPROCESS_PARTS        += arch $(CONFIG_ABI) 32bit $(CONFIG_XARCH) \
12                            h3800 noncont_mem \
13                            abs_syscalls
14
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
22 PREPROCESS_PARTS-$(CONFIG_ARM_920T)                 += armv5 arm920t vcache
23 PREPROCESS_PARTS-$(CONFIG_ARM_926)                  += armv5 926 vcache
24 PREPROCESS_PARTS-$(CONFIG_ARM_V6PLUS)               += armv6plus
25 PREPROCESS_PARTS-$(CONFIG_ARM_V6)                   += armv6
26 PREPROCESS_PARTS-$(CONFIG_ARM_V7)                   += armv7
27 PREPROCESS_PARTS-$(CONFIG_ARM_1136)                 += arm1136
28 PREPROCESS_PARTS-$(CONFIG_ARM_1176)                 += arm1176
29 PREPROCESS_PARTS-$(CONFIG_ARM_MPCORE)               += mpcore
30 PREPROCESS_PARTS-$(CONFIG_ARM_CORTEX_A8)            += armca8
31 PREPROCESS_PARTS-$(CONFIG_ARM_CORTEX_A9)            += armca9
32 PREPROCESS_PARTS-$(CONFIG_ARM_TZ)                   += tz
33 PREPROCESS_PARTS-$(CONFIG_ARM_1176_CACHE_ALIAS_FIX) += arm1176_cache_alias_fix
34 PREPROCESS_PARTS-$(CONFIG_SCHED_FIXED_PRIO)  += sched_fixed_prio
35 PREPROCESS_PARTS-$(CONFIG_SCHED_WFQ)         += sched_wfq
36 PREPROCESS_PARTS-$(CONFIG_SCHED_FP_WFQ)      += sched_fp_wfq
37
38 PREPROCESS_PARTS        += $(PREPROCESS_PARTS-y)
39
40 OBJ_SPACE-y = phys
41 OBJ_SPACE-  = virt
42 OBJ_SPACE   = $(OBJ_SPACE-$(CONFIG_DISABLE_VIRT_OBJ_SPACE))
43
44
45 ifeq ("$(CONFIG_ARM_1176)@$(CONFIG_ARM_1176_CACHE_ALIAS_FIX)","y@")
46 OBJ_SPACE_TYPE = phys
47 else
48 OBJ_SPACE_TYPE = $(if $(CONFIG_ARM_V6PLUS),$(OBJ_SPACE),phys)
49 endif
50
51 PREPROCESS_PARTS        += obj_space_$(OBJ_SPACE_TYPE)
52
53 #
54 # TYPES subsystem
55 #
56
57 PRIVATE_INCDIR += types/$(CONFIG_XARCH) types
58
59 VPATH_LIBUART  := $(srcdir)/lib/uart $(srcdir)/lib/uart/arm
60 PRIVATE_INCDIR += lib/uart
61
62 #
63 # DRIVERS Subsystem
64 #
65 DRIVERS                 := libdrivers.a libgluedriverslibc.a
66 VPATH                   += drivers/$(CONFIG_XARCH) drivers
67 PRIVATE_INCDIR          += drivers/$(CONFIG_XARCH) drivers
68 INTERFACES_DRIVERS      := sa1100 mux_console console uart filter_console \
69                            h3xxx io mem mmu reset processor delayloop
70 io_IMPL                 := io io-arm
71 mmu_IMPL                := mmu mmu-arm
72 mem_IMPL                := mem mem-arm
73 uart_IMPL               := uart
74 reset_IMPL              :=
75 processor_IMPL          := processor processor-arm
76 CXXSRC_DRIVERS          := glue_libc.cc 
77 NOOPT                   += $(patsubst %.o, %, $(OBJ_DRIVERS))
78 ALWAYS_INLINE           += mem
79
80 #
81 # MINILIBC Subsystem
82 #
83 MINILIBC        := libc.a
84 VPATH           += lib/minilibc/$(CONFIG_XARCH) lib/minilibc
85 PRIVATE_INCDIR  += lib/minilibc/$(CONFIG_XARCH)/include lib/minilibc/include
86 CSRC_MINILIBC   := atexit.c memccpy.c memcmp.c memmove.c memset.c memcpy.c \
87                    memchr.c panic.c strchr.c strcmp.c strcpy.c strlen.c \
88                    strncmp.c strncpy.c strstr.c __assert_fail.c printf.c \
89                    __v_printf.c vprintf.c strtol.c strtoul.c __lltostr.c \
90                    __ltostr.c putchar.c puts.c getchar.c gets.c \
91                    construction.c sprintf.c snprintf.c vsnprintf.c vsprintf.c \
92                    longjmp.c isalnum.c isalpha.c isascii.c isblank.c \
93                    iscntrl.c isdigit.c isgraph.c islower.c isprint.c \
94                    ispunct.c isspace.c isupper.c isxdigit.c strspn.c \
95                    strcspn.c tolower.c raise.c aeabi.c
96 ASSRC_MINILIBC  := setjmp.S
97 NOOPT           += $(patsubst %.o, %, $(OBJ_MINILIBC))
98
99
100 #
101 # LIBGZIP subsystem (only for Jdb)
102 #
103 ifneq ($(CONFIG_JDB_GZIP),)
104   LIBGZIP               := libgzip.a
105   VPATH         += lib/gzip
106   PRIVATE_INCDIR        += lib/gzip
107   CSRC_LIBGZIP  := adler32.c crc32.c gzip.c trees.c deflate.c zutil.c
108   NOOPT         += $(patsubst %.o, %, $(OBJ_LIBGZIP))
109 endif
110
111
112 #
113 # JABI Subsystem
114 #
115 JABI                    := libjabi.a
116 VPATH                   += jabi/$(CONFIG_XARCH) jabi
117 INTERFACES_JABI         := jdb_ktrace
118
119 #
120 # ABI Subsystem
121 #
122
123 ABI             := libabi.a
124 VPATH           += abi/$(CONFIG_XARCH) abi 
125
126 INTERFACES_ABI  := kip l4_types l4_fpage l4_msg_item \
127                    l4_buf_desc l4_error
128
129 l4_types_IMPL   := l4_types l4_types-debug
130
131
132 # x0!=32Bit UIDs
133 kip_IMPL        := kip kip-debug kip-arm
134
135
136 #
137 # KERNEL subsystem
138 #
139 KERNEL          := fiasco
140 KERNEL_EXTRA    := Symbols
141 VPATH           += kern/$(CONFIG_XARCH) kern
142 VPATH           += jdb/arm jdb
143 PRIVATE_INCDIR  += kern/$(CONFIG_XARCH) kern
144
145 INTERFACES_KERNEL +=    __main mem_op pagetable kmem_space boot_uart_init     \
146                         irq_chip_generic bootstrap kern_lib_page              \
147                         jdb_extensions outer_cache utcb_support
148
149 PREPROCESS_PARTS        += ulock
150 INTERFACES_KERNEL       += u_semaphore
151
152 INTERFACES_KERNEL-$(CONFIG_SERIAL) += uart_console
153 INTERFACES_KERNEL-$(CONFIG_ARM_TZ)      += vm
154
155 INTERFACES_KERNEL += $(INTERFACES_KERNEL-y)
156
157
158 boot_info_IMPL          := boot_info boot_info-arch
159 bootstrap_IMPL          := bootstrap
160 clock_IMPL              := clock
161 config_IMPL             := config config-arm
162 context_IMPL            := context context-arm context-vcpu
163 continuation_IMPL       := continuation-arm
164 cpu_IMPL                := cpu cpu-arm
165 cpu_lock_IMPL           := cpu_lock cpu_lock-generic
166 entry_frame_IMPL        := entry_frame entry_frame-arm                       \
167                            entry_frame-abs-timeout-hack
168 dirq_IMPL               := dirq dirq-arm
169 fpu_IMPL                := fpu fpu-arm
170 ipi_IMPL                := ipi ipi-arm
171 kdb_ke_IMPL             := kdb_ke kdb_ke-arm
172 kernel_task_IMPL        := kernel_task kernel_task-arm
173 kernel_thread_IMPL      := kernel_thread kernel_thread-std kernel_thread-arm
174 kernel_uart_IMPL        := kernel_uart
175 map_util_IMPL           := map_util map_util-mem map_util-objs
176 mapping_IMPL            := mapping-arm mapping
177 mem_layout_IMPL         := mem_layout mem_layout-arm mem_layout-noncont
178 mem_space_IMPL          := mem_space mem_space-arm mem_space-user
179 kmem_alloc_IMPL         := kmem_alloc kmem_alloc-arm
180 obj_space_IMPL          := obj_space obj_space-$(OBJ_SPACE_TYPE)
181 outer_cache_IMPL        := outer_cache
182 pagetable_IMPL          := pagetable pagetable-arch
183 paging_IMPL             := paging-arm paging
184 perf_cnt_IMPL           := perf_cnt perf_cnt-arm
185 pic_IMPL                := pic pic-arm
186 sched_context_IMPL      := sched_context-wfq sched_context-fixed_prio \
187                            sched_context-fp_wfq sched_context
188 space_IMPL              := space space-arm
189 spin_lock_IMPL          := spin_lock spin_lock-arm
190 startup_IMPL            := startup startup-arm
191 sys_call_page_IMPL      := sys_call_page sys_call_page-arm
192 task_IMPL               := task task-arm
193 thread_IMPL             := thread thread-arm \
194                            thread-jdb thread-ipc \
195                            thread-pagefault  thread-log \
196                            thread-ulock thread-vcpu
197 timer_IMPL              := timer timer-arm
198 utcb_support_IMPL       := utcb_support utcb_support-arm
199 vmem_alloc_IMPL         := vmem_alloc vmem_alloc-arch
200 tb_entry_IMPL           := tb_entry tb_entry-arm
201
202
203 ifeq ("$(CONFIG_JDB)","y")
204 JDB                     := jdb_compound.o
205 SUBSYSTEMS              += JDB
206 INTERFACES_JDB          := jdb_handler_queue jdb_module jdb_pic            \
207                            jdb jdb_core jdb_prompt_ext jdb_list            \
208                            jdb_prompt_module jdb_exit_module jdb_kern_info \
209                            jdb_tcb jdb_screen jdb_thread_list jdb_input    \
210                            jdb_symbol jdb_lines push_console               \
211                            jdb_timeout jdb_dump jdb_ptab                   \
212                            jdb_attach_irq jdb_table                        \
213                            jdb_kern_info_kmem_alloc                        \
214                            jdb_kern_info_kip jdb_mapdb kern_cnt            \
215                            jdb_trace_set jdb_entry_frame                   \
216                            jdb_kobject jdb_kobject_names                   \
217                            jdb_util jdb_space jdb_utcb                     \
218                            jdb_trap_state jdb_ipi jdb_rcupdate             \
219                            jdb_ipc_gate jdb_obj_space jdb_log jdb_factory  \
220                            jdb_semaphore jdb_thread jdb_scheduler jdb_sender_list\
221                            jdb_perf jdb_vm jdb_regex jdb_disasm jdb_bp \
222                            jdb_tbuf_output jdb_tbuf_show tb_entry_output
223
224
225 INTERFACES_KERNEL       += jdb_tbuf jdb_tbuf_init tb_entry jdb_trace
226 jdb_IMPL                := jdb jdb-arm jdb-ansi jdb-thread
227 jdb_kern_info_IMPL      := jdb_kern_info jdb_kern_info-arm \
228                            jdb_kern_info-bench jdb_kern_info-bench-arm \
229                            jdb_kern_info-cpu-arm
230 jdb_dump_entry_frame_IMPL:= jdb_dump_entry_frame-arm
231 jdb_tcb_IMPL            := jdb_tcb jdb_tcb-arm
232 jdb_ptab_IMPL           := jdb_ptab jdb_ptab-ia32-ux-arm jdb_ptab-arm
233 jdb_entry_frame_IMPL    := jdb_entry_frame-arm
234 jdb_trace_set_IMPL      := jdb_trace_set jdb_trace_set-arm
235 jdb_bp                  := jdb_bp
236 thread_IMPL             += thread-debug 
237
238 ifneq ($(CONFIG_JDB_GZIP),)
239  ifneq ($(wildcard $(srcdir)/lib/gzip),)
240   SUBSYSTEMS            += LIBGZIP
241   KERNEL_EXTRA_LIBS     += $(LIBGZIP)
242   INTERFACES_KERNEL     += jdb_gzip
243  endif
244 endif
245
246 INTERFACES_JDB          += $(INTERFACES_JDB-y)
247 endif
248
249 CXXSRC_KERNEL           := kernel_panic.cc libc_backend_lock.cc
250 ASSRC_KERNEL            := ivt.S $(if $(CONFIG_MP),tramp-mp.S)
251 CPPFLAGS                += $(if $(CONFIG_MP),-DMPCORE_PHYS_BASE=$(MPCORE_PHYS_BASE))
252
253 NOOPT                   += $(filter jdb%,\
254                              $(foreach in,$(INTERFACES_KERNEL), \
255                                $(if $($(in)_IMPL),$($(in)_IMPL),$(in))))
256 NOOPT                   += tb_entry tb_entry_output
257
258
259 #INTERFACES_KERNEL = boot_info __main mapdb region \
260 #  space_context space space_index space_index_util \
261 #  stack kmem kmem_alloc slab_cache_anon kmem_slab_simple kmem_slab \
262 #  switch_lock thread_lock helping_lock kernel_lock timer \
263 #  thread_state sched context threadid thread_regs sender receiver \
264 #  thread kernel_thread thread_util \
265 #  map_util irq dirq virq console paranoia globals \
266 #  checksum main config
267
268 #
269 # CRT0 subsystem
270 #
271 CRT0            := crt0.o
272 ASSRC_CRT0      := crt0.S
273
274
275 #
276 # CXXLIB Subsystem
277
278 CXXLIB                  := libcxx.a
279 VPATH                   += lib/cxxlib
280 INTERFACES_CXXLIB       := paranoia s_cruft
281
282 #
283 # LIBK subsystem
284 #
285 LIBK            := libk.a
286 VPATH           += lib/libk/$(CONFIG_XARCH) lib/libk
287 PRIVATE_INCDIR  += lib/libk/$(CONFIG_XARCH) lib/libk
288
289 #INTERFACES_LIBK:= atomic lock_guard profile uuencode gmon unistd panic auto_ptr
290 INTERFACES_LIBK := std_macros atomic lock_guard auto_ptr dlist
291 atomic_IMPL     := atomic atomic-arm-up
292
293 ifeq ("$(CONFIG_JDB_DISASM)","y")
294   # $(srcdir)/lib/disasm may be removed
295   ifeq ($(wildcard $(srcdir)/lib/disasm),)
296     $(error $(srcdir)/lib/disasm is missing, disable CONFIG_JDB_DISASM)
297   endif
298   SUBSYSTEMS          += LIBDISASM
299   KERNEL_EXTRA_LIBS   += $(LIBDISASM)
300   PREPROCESS_PARTS    += jdb_disasm
301
302   LIBDISASM           := libdisasm.a
303   VPATH               += lib/disasm lib/disasm/elf lib/disasm/include \
304                          lib/disasm/include/opcode lib/disasm/opcodes \
305                          lib/disasm/libiberty lib/disasm/bfd
306   PRIVATE_INCDIR      += lib/disasm lib/disasm/elf lib/disasm/include \
307                          lib/disasm/include/opcode lib/disasm/opcodes \
308                          lib/disasm/libiberty lib/disasm/bfd
309   PRIVATE_INCDIR      += lib/disasm
310   CSRC_LIBDISASM      := disasm.c arm-dis.c dis-init.c dis-buf.c safe-ctype.c
311   NOOPT               += $(patsubst %.o, %, $(OBJ_LIBDISASM))
312 endif
313
314 #
315 # VERSION subsystem
316 #
317 VERSION         := version.h
318
319 TCBOFFSET       := tcboffset.h
320 CXXSRC_TCBOFFSET        := tcboffset.cc dump_tcboffsets.cc
321
322 BSP_NAME         := $(patsubst "%",%,$(CONFIG_BSP_NAME))
323 MODULES_FILE_BSP := $(srcdir)/kern/arm/bsp/$(BSP_NAME)/Modules
324 ifeq ($(wildcard $(MODULES_FILE_BSP)),)
325   $(error No BSP name defined or no BSP Modules file available)
326 endif
327
328 include $(MODULES_FILE_BSP)
329 VPATH += kern/arm/bsp/$(BSP_NAME) kern/arm/bsp
330
331 ifeq ("$(filter LIBUART, $(SUBSYSTEMS))","LIBUART")
332   LIBUART                       := uart/libuart.a
333 endif
334
335 ifneq ($(CONFIG_MP),)
336 ifeq ($(MPCORE_PHYS_BASE),)
337 $(error $(MODULES_FILE_BSP) needs to set MPCORE_PHYS_BASE variable)
338 endif
339 endif
340
341 MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP)