]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/Modules.ia32
b7f08b2e7d138bddeef5dddb01d646dcd31f96b0
[l4.git] / kernel / fiasco / src / Modules.ia32
1 # -*- makefile -*-
2
3 include $(srcdir)/Modules.generic
4
5 SUBSYSTEMS = JABI ABI DRIVERS KERNEL CRT0 BOOT LIBK \
6              CHECKSUM CXXLIB MINILIBC LIBKERN TCBOFFSET VERSION GBLCFG
7
8 ifeq ("$(CONFIG_GSTABS)","y")      
9   SUBSYSTEMS            += LINES
10 endif
11
12 PREPROCESS_PARTS        += arch $(CONFIG_ABI) 32bit iofp         \
13                            $(CONFIG_XARCH) apic abs-timeout-hack \
14                            i8259 pc i8254 fpu                    \
15                            abs_syscalls auto_map_kip
16
17 OBJ_SPACE-y = phys
18 OBJ_SPACE-  = virt
19 OBJ_SPACE   = $(OBJ_SPACE-$(CONFIG_DISABLE_VIRT_OBJ_SPACE))
20
21 PREPROCESS_PARTS += obj_space_$(OBJ_SPACE)
22
23 PREPROCESS_PARTS-$(CONFIG_MP)                += mp
24 PREPROCESS_PARTS-$(CONFIG_LIST_ALLOC_SANITY) += list_alloc_debug
25 PREPROCESS_PARTS-$(CONFIG_JDB)               += debug log
26 PREPROCESS_PARTS-$(CONFIG_PROFILE)           += profile
27 PREPROCESS_PARTS-$(CONFIG_SCHED_PIT)         += pit_timer
28 PREPROCESS_PARTS-$(CONFIG_SCHED_RTC)         += rtc_timer
29 PREPROCESS_PARTS-$(CONFIG_SCHED_APIC)        += apic_timer
30 PREPROCESS_PARTS-$(CONFIG_SCHED_HPET)        += hpet_timer
31 PREPROCESS_PARTS-$(CONFIG_SERIAL)            += serial 16550
32 PREPROCESS_PARTS-$(CONFIG_WATCHDOG)          += watchdog
33 PREPROCESS_PARTS-$(CONFIG_PERF_CNT)          += perf_cnt
34 PREPROCESS_PARTS-$(CONFIG_IO_PROT)           += io
35 PREPROCESS_PARTS-$(CONFIG_CPU_VIRT)          += svm vmx
36 PREPROCESS_PARTS-$(CONFIG_SCHED_FIXED_PRIO)  += sched_fixed_prio
37 PREPROCESS_PARTS-$(CONFIG_SCHED_WFQ)         += sched_wfq
38 PREPROCESS_PARTS-$(CONFIG_SCHED_FP_WFQ)      += sched_fp_wfq
39 PREPROCESS_PARTS-$(CONFIG_IO_PROT_IOPL_3)    += iopl3
40
41 PREPROCESS_PARTS        += $(PREPROCESS_PARTS-y)
42
43 #
44 # TYPES subsystem
45 #
46 PRIVATE_INCDIR          += types/$(CONFIG_XARCH) types
47
48 #
49 # ABI Subsystem
50 #
51 ABI                     := libabi.a
52 VPATH                   += abi/$(CONFIG_XARCH) abi
53 INTERFACES_ABI          := l4_fpage l4_msg_item l4_buf_desc kip l4_types \
54                            l4_error virt
55
56 kip_IMPL                := kip kip-debug kip-ia32 kip-ia32-debug
57 l4_types_IMPL           := l4_types l4_types-debug
58 virt_IMPL               := virt-ia32-amd64
59
60 #
61 # JABI Subsystem
62 #
63 JABI                    := libjabi.a
64 VPATH                   += jabi/$(CONFIG_XARCH) jabi
65 INTERFACES_JABI         := jdb_ktrace
66
67 #
68 # DRIVERS subsystem
69 #
70 DRIVERS                 := libdrivers.a libgluedriverslibc.a
71 VPATH                   += drivers/$(CONFIG_XARCH) drivers
72 PRIVATE_INCDIR          += drivers/$(CONFIG_XARCH) drivers
73 INTERFACES_DRIVERS      := mux_console console keyb io pci vga_console reset \
74                            processor delayloop mem
75 ifeq ("$(CONFIG_SERIAL)","y")
76 INTERFACES_DRIVERS      += filter_console uart
77 endif
78 reset_IMPL              := reset-ia32
79 uart_IMPL               := uart uart-16550
80 CXXSRC_DRIVERS          := glue_libc.cc
81 NOOPT                   += $(patsubst %.o, %, $(OBJ_DRIVERS))
82
83 keyb_IMPL               := keyb keyb-pc 
84 io_IMPL                 := io io-ia32
85 mem_IMPL                := mem mem-ia32
86 processor_IMPL          := processor processor-ia32
87
88 #
89 # KERNEL subsystem
90 #
91 KERNEL                  := fiasco.image
92 VPATH                   += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern
93 PRIVATE_INCDIR          += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern
94
95 INTERFACES_KERNEL       += __main acpi io_apic dirq_pic_pin dirq_io_apic  \
96                            io_space_sigma0 irq_msi boot_console profile   \
97                            io_space apic pit checksum x86desc gdt idt tss \
98                            timer_irq
99
100 INTERFACES_KERNEL-$(CONFIG_CPU_VIRT) += svm vmx vm vm_svm vm_vmx
101
102 PREPROCESS_PARTS        += ulock
103 INTERFACES_KERNEL       += u_semaphore
104
105
106 apic_IMPL               := apic-ia32 apic-ia32-mp
107 boot_console_IMPL       := boot_console-ia32-amd64
108 boot_info_IMPL          := boot_info boot_info-ia32
109 clock_IMPL              := clock clock-ia32
110 config_IMPL             := config config-ia32-32 config-ia32
111 context_IMPL            := context context-ia32 context-ia32-32 context-vcpu
112 continuation_IMPL       := continuation-ia32-32
113 cpu_IMPL                := cpu cpu-ia32 cpu-32
114 dirq_IMPL               := dirq dirq-ia32-ux
115 dirq_pic_pin_IMPL       := dirq_pic_pin dirq_pic_pin-ia32-ux
116 entry_frame_IMPL        := entry_frame entry_frame-ia32-ux \
117                            entry_frame-abs-timeout-hack
118 fpu_IMPL                := fpu fpu-ia32-ux fpu-ia32
119 ipi_IMPL                := ipi ipi-ia32
120 kdb_ke_IMPL             := kdb_ke kdb_ke-ia32
121 kernel_thread_IMPL      := kernel_thread kernel_thread-std kernel_thread-ia32
122 kernel_uart_IMPL        := kernel_uart kernel_uart-16550
123 kip_init_IMPL           := kip_init-ia32
124 kmem_IMPL               := kmem-ia32 kmem-ia32-32
125 kmem_alloc_IMPL         := kmem_alloc kmem_alloc-ia32
126 main_IMPL               := main-ia32-32 main-ia32
127 mapping_IMPL            := mapping-ia32-32 mapping
128 map_util_IMPL           := map_util map_util-mem map_util-io map_util-objs
129 mem_layout_IMPL         := mem_layout mem_layout-ia32 mem_layout-ia32-32
130 mem_space_IMPL          := mem_space mem_space-user mem_space-ia32
131 mem_unit_IMPL           := mem_unit-ia32
132 obj_space_IMPL          := obj_space obj_space-$(OBJ_SPACE)
133 paging_IMPL             := paging-ia32-32 paging-ia32 paging
134 perf_cnt_IMPL           := perf_cnt perf_cnt-ia32
135 pic_IMPL                := pic pic-i8259
136 pit_IMPL                := pit-i8254
137 pmem_alloc_IMPL         := pmem_alloc pmem_alloc-ia32-ux
138 rtc_IMPL                := rtc-ia32
139 sched_context_IMPL      := sched_context-wfq sched_context-fixed_prio \
140                            sched_context-fp_wfq sched_context
141 space_IMPL              := space space-ia32
142 spin_lock_IMPL          := spin_lock spin_lock-ia32
143 startup_IMPL            := startup startup-ia32
144 sys_call_page_IMPL      := sys_call_page sys_call_page-abs-ia32
145 task_IMPL               := task task-ia32-amd64
146 tb_entry_IMPL           := tb_entry tb_entry-ia32-32
147 timer_IMPL              := timer timer-ia32-amd64-ux
148 thread_IMPL             := thread thread-ia32 thread-ia32-32 \
149                            thread-ipc thread-pagefault thread-log \
150                            thread-debug thread-dbf thread-ulock thread-vcpu
151 utcb_init_IMPL          := utcb_init utcb_init-ia32
152 vmem_alloc_IMPL         := vmem_alloc vmem_alloc-ia32
153 vm_factory_IMPL         := vm_factory vm_factory-ia32
154 watchdog_IMPL           := watchdog watchdog-ia32
155
156 INTERFACES_KERNEL-$(CONFIG_SERIAL) += uart_console
157
158 ifeq ("$(CONFIG_PROFILE)","y")
159   cpu_lock_IMPL         := cpu_lock cpu_lock-pic
160 else
161   cpu_lock_IMPL         := cpu_lock cpu_lock-generic
162 endif
163
164 ifeq ("$(CONFIG_SCHED_PIT)","y")
165   timer_IMPL            += timer-pit
166 endif
167 ifeq ("$(CONFIG_SCHED_RTC)","y")
168   timer_IMPL            += timer-rtc
169   INTERFACES_KERNEL     += rtc
170 endif
171 ifeq ("$(CONFIG_SCHED_APIC)","y")
172   timer_IMPL            += timer-apic
173 endif
174 ifeq ("$(CONFIG_SCHED_HPET)","y")
175   timer_IMPL            += timer-hpet
176   INTERFACES_KERNEL     += hpet
177 endif
178
179
180 ifeq ("$(CONFIG_IO_PROT)","y")
181   space_IMPL            += space-io
182   thread_IMPL           += thread-io
183 endif
184
185 ifeq ("$(CONFIG_JDB)","y")
186 JDB                     := jdb_compound.o
187 SUBSYSTEMS              += JDB
188 VPATH                   += jdb/ia32/32 jdb/ia32 jdb
189 INTERFACES_KERNEL       += jdb_tbuf jdb_tbuf_init jdb_trace tb_entry 
190 INTERFACES_JDB          += jdb jdb_util jdb_prompt_ext jdb_symbol jdb_lines \
191                            jdb_dbinfo jdb_bp \
192                            jdb_module jdb_core jdb_io_ports \
193                            jdb_kern_info jdb_prompt_module jdb_tbuf_output \
194                            jdb_input jdb_dump jdb_ptab jdb_misc jdb_mapdb \
195                            jdb_tcb jdb_attach_irq \
196                            jdb_trace_set jdb_counters jdb_table kern_cnt  \
197                            tb_entry_output jdb_exit_module \
198                            jdb_tbuf_show jdb_console_buffer \
199                            jdb_list jdb_screen push_console jdb_timeout \
200                            jdb_handler_queue jdb_halt_thread \
201                            jdb_kern_info_kmem_alloc \
202                            jdb_kern_info_kip jdb_kern_info_config \
203                            loadcnt jdb_utcb jdb_thread_list \
204                            jdb_entry_frame jdb_kobject jdb_space jdb_io_apic \
205                            jdb_trap_state jdb_ipi jdb_kobject_names \
206                            jdb_rcupdate jdb_bt jdb_ipc_gate jdb_obj_space \
207                            jdb_log jdb_factory jdb_semaphore jdb_iomap \
208                            jdb_thread jdb_scheduler jdb_sender_list \
209                            jdb_regex jdb_disasm
210
211 apic_IMPL               += apic-debug
212 jdb_IMPL                := jdb jdb-ia32-amd64 jdb-ansi jdb-ia32-ux jdb-thread \
213                            jdb-int3-ia32-amd64 jdb-int3-ia32-ux
214 jdb_bp_IMPL             := jdb_bp-ia32-ux jdb_bp-ia32-amd64 jdb_bp-ia32
215 jdb_bt_IMPL             := jdb_bt-ia32-ux
216 jdb_entry_frame_IMPL    := jdb_entry_frame-ia32
217 jdb_kern_info_IMPL      := jdb_kern_info jdb_kern_info-ia32-amd64 \
218                            jdb_kern_info-ia32-ux jdb_kern_info-apic \
219                            jdb_kern_info-pci jdb_kern_info-bench \
220                            jdb_kern_info-bench-ia32-32 \
221                            jdb_kern_info-dr jdb_kern_info-mtrr
222 jdb_misc_IMPL           := jdb_misc-ia32-amd64
223 jdb_ptab_IMPL           := jdb_ptab jdb_ptab-ia32-ux-arm
224 jdb_screen_IMPL         := jdb_screen jdb_screen-ia32
225 jdb_tcb_IMPL            := jdb_tcb jdb_tcb-ia32-ux
226 jdb_trace_set_IMPL      := jdb_trace_set jdb_trace_set-ia32-ux
227
228 INTERFACES_JDB-$(CONFIG_JDB_MISC)       += jdb_tetris
229 endif
230
231
232 CXXSRC_KERNEL           := kernel_panic.cc libc_backend_lock.cc
233 ASSRC_KERNEL            := entry.S entry-native.S sys_call_page-asm.S
234
235 ASSRC_KERNEL-$(CONFIG_MP)               += tramp-mp.S entry-mp.S
236 ASSRC_KERNEL-$(CONFIG_CPU_VIRT)         += vm_svm_asm.S vm_vmx_asm.S
237 ASSRC_KERNEL                            += $(ASSRC_KERNEL-y)
238
239 NOOPT                   += $(filter jdb%,\
240                              $(foreach in,$(INTERFACES_KERNEL), \
241                                $(if $($(in)_IMPL),$($(in)_IMPL),$(in))))
242 NOOPT                   += tb_entry_output $(tb_entry_IMPL) $(perf_cnt_IMPL)  \
243                            kern_cnt loadcnt $(apic_IMPL) $(watchdog_IMPL) kdb \
244                            $(kernel_uart_IMPL) push_console virq thread-dbf   \
245                            trap_state
246 NOOPT                   += $(foreach in,$(INTERFACES_JDB), \
247                                $(if $($(in)_IMPL),$($(in)_IMPL),$(in)))
248
249
250 ### When testing with test threads, uncomment the following:
251 #
252 # VPATH                 += kern-test
253 # PRIVATE_INCDIR        += kern-test
254 #
255 # INTERFACES_KERNEL     += generic_test_thread test_thread node cpu \
256 #                          back_trace cpu_guard types
257 #
258 # node_IMPL             := node node-up
259 # cpu_IMPL              := cpu cpu-perf cpu-perfp4
260 # config_IMPL           := config config-test
261 #
262 # kernel_thread_IMPL    := $(filter-out kernel_thread-std,$(kernel_thread_IMPL)) \
263 #                          kernel_thread-test
264 #
265 # Replace this definition with your own test thread.
266 # test_thread_IMPL      := test_thread-test26
267 #
268 ### End of test-thread section
269
270 #
271 # CRT0 subsystem
272 #
273 CRT0                    := crt0.o
274 ASSRC_CRT0              := crt0.S
275
276 #
277 # BOOT subsystem
278 #
279 BOOT                    := main
280 VPATH                   += boot/$(CONFIG_XARCH) boot
281 PRIVATE_INCDIR          += boot boot/ia32
282 CXXSRC_BOOT             := boot_libc_glue.cc bootstrap.cc boot_cpu.cc \
283                            direct_cons_putchar.cc
284 ASSRC_BOOT              := boot.S boot_idt.S
285 NOOPT                   += $(patsubst %.o, %, $(OBJ_BOOT))
286
287 #
288 # TCBOFFSET subsystem
289 #
290 TCBOFFSET               := tcboffset.h
291 CXXSRC_TCBOFFSET        := tcboffset.cc dump_tcboffsets.cc
292
293 #
294 # SYMBOLS subsystem
295 #
296 SYMBOLS                 := Symbols
297
298 #
299 # LINES subsystem
300 #
301 LINES                   := Lines
302 PROG_LINES              := genlines
303
304 #
305 # CHECKSUM subsystem
306 #
307 CHECKSUM                := checksum
308 CXXSRC_CHECKSUM         := genchecksum.cc
309
310 #
311 # VERSION subsystem
312 #
313 VERSION                 := version.h
314
315 #
316 # GBLCFG subsystem
317 #
318 GBLCFG                  := gblcfg.o
319 OBJ_KERNEL              += gblcfg.o
320
321 #
322 # CXXLIB Subsystem
323 #
324
325 CXXLIB                  := libcxx.a
326 VPATH                   += lib/cxxlib
327 INTERFACES_CXXLIB       := paranoia s_cruft
328
329 #
330 # LIBK subsystem
331 #
332 LIBK            := libk.a
333 VPATH           += lib/libk/$(CONFIG_XARCH) lib/libk
334 PRIVATE_INCDIR  += lib/libk/$(CONFIG_XARCH) lib/libk
335 INTERFACES_LIBK := atomic lock_guard auto_ptr std_macros dlist
336 ifeq ("$(CONFIG_PROFILE)","y")
337 INTERFACES_LIBK += gmon unistd
338 endif
339 CSRC_LIBK       += gcc_lib.c
340
341 NOPROFILE       += profile gmon
342
343 #
344 # LIBKERN Subsystem
345 #
346 LIBKERN         := libkern.a
347 VPATH           += lib/kern
348 PRIVATE_INCDIR  += lib/kern/include
349 CSRC_LIBKERN    :=
350 NOOPT           += $(patsubst %.o, %, $(OBJ_LIBKERN))
351
352
353 #
354 # LIBGZIP subsystem (only for Jdb)
355 #
356 ifneq ($(CONFIG_JDB_GZIP),)
357   LIBGZIP               := libgzip.a
358   VPATH                 += lib/gzip
359   PRIVATE_INCDIR        += lib/gzip
360   CSRC_LIBGZIP          := adler32.c crc32.c gzip.c trees.c deflate.c zutil.c
361   NOOPT                 += $(patsubst %.o, %, $(OBJ_LIBGZIP))
362 endif
363
364 #
365 # LIBDISASM subsystem (only for Jdb)
366 #
367 ifeq ("$(CONFIG_JDB_DISASM)","y")
368   # $(srcdir)/lib/disasm may be removed
369   ifeq ($(wildcard $(srcdir)/lib/disasm),)
370     $(error $(srcdir)/lib/disasm is missing, disable CONFIG_JDB_DISASM)
371   endif
372
373   SUBSYSTEMS        += LIBDISASM
374   KERNEL_EXTRA_LIBS += $(LIBDISASM)
375   PREPROCESS_PARTS  += jdb_disasm
376
377   LIBDISASM         := libdisasm.a
378   VPATH             += lib/disasm lib/disasm/elf lib/disasm/include \
379                        lib/disasm/include/opcode lib/disasm/opcodes \
380                        lib/disasm/libiberty lib/disasm/bfd
381   PRIVATE_INCDIR    += lib/disasm lib/disasm/elf lib/disasm/include \
382                        lib/disasm/include/opcode lib/disasm/opcodes \
383                        lib/disasm/libiberty lib/disasm/bfd
384   PRIVATE_INCDIR    += lib/disasm
385   CSRC_LIBDISASM    := disasm.c dis-init.c i386-dis.c dis-buf.c
386   NOOPT             += $(patsubst %.o, %, $(OBJ_LIBDISASM))
387 endif
388
389 #
390 # LIBPERFCTR subsystem (only for Jdb)
391 #
392 LIBPERFCTR      := libperfctr.a
393 VPATH           += lib/perfctr
394 PRIVATE_INCDIR  += lib/perfctr
395 CSRC_LIBPERFCTR := event_set_p5.c event_set_p6.c event_set_amd.c \
396                    event_set_p4.c event_set_x86.c perfctr.c \
397                    event_set_centaur.c
398 NOOPT           += $(patsubst %.o, %, $(OBJ_LIBPERFCTR))
399
400 #
401 # LIBREGEX subsystem (only for Jdb)
402 #
403 LIBREGEX        := libregex.a
404 VPATH           += lib/regex
405 PRIVATE_INCDIR  += lib/regex
406 CSRC_LIBREGEX   := alloc.c rx.c
407 NOOPT           += $(patsubst %.o, %, $(OBJ_LIBREGEX))
408
409 #
410 # MINILIBC Subsystem
411 #
412 MINILIBC        := libc.a
413 VPATH           += lib/minilibc/$(CONFIG_XARCH) lib/minilibc
414 PRIVATE_INCDIR  += lib/minilibc/$(CONFIG_XARCH)/include lib/minilibc/include
415 CSRC_MINILIBC   := atexit.c memccpy.c memcmp.c memmove.c memset.c memcpy.c \
416                    memchr.c strchr.c strcmp.c strcpy.c strlen.c strncmp.c \
417                    strncpy.c strstr.c __assert_fail.c printf.c __v_printf.c \
418                    vprintf.c strtol.c strtoul.c lltostr.c __ltostr.c \
419                    putchar.c puts.c getchar.c gets.c construction.c sprintf.c \
420                    snprintf.c vsnprintf.c vsprintf.c longjmp.c isalnum.c \
421                    isalpha.c isascii.c isblank.c iscntrl.c isdigit.c \
422                    isgraph.c islower.c isprint.c ispunct.c isspace.c \
423                    isupper.c isxdigit.c tolower.c strcspn.c strspn.c panic.c
424 ASSRC_MINILIBC  := setjmp.S
425
426 # do not profile all of MINILIBC, because it is used in the BOOT subsystem
427 NOOPT           += $(patsubst %.o, %, $(OBJ_MINILIBC))
428
429 ifeq ("$(CONFIG_JDB)","y")
430
431 ifneq ($(CONFIG_JDB_GZIP),)
432  ifneq ($(wildcard $(srcdir)/lib/gzip),)
433   SUBSYSTEMS            += LIBGZIP
434   KERNEL_EXTRA_LIBS     += $(LIBGZIP)
435   INTERFACES_KERNEL     += jdb_gzip
436  endif
437 endif
438
439 ifneq ($(wildcard $(srcdir)/lib/perfctr),)
440   SUBSYSTEMS            += LIBPERFCTR
441   KERNEL_EXTRA_LIBS     += $(LIBPERFCTR)
442   KERNEL_UNRES_SYMS     += -u perfctr_set_cputype
443 endif
444
445 ifneq ($(wildcard $(srcdir)/lib/regex),)
446   SUBSYSTEMS            += LIBREGEX
447   KERNEL_EXTRA_LIBS     += $(LIBREGEX)
448   PREPROCESS_PARTS      += jdb_regex
449 endif
450
451 endif
452
453 MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP)
454
455 INTERFACES_KERNEL       += $(INTERFACES_KERNEL-y)