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