3 include $(srcdir)/Modules.generic
5 SUBSYSTEMS = JABI ABI DRIVERS KERNEL CRT0 BOOT LIBK \
6 CHECKSUM CXXLIB MINILIBC LIBKERN TCBOFFSET VERSION GBLCFG
8 ifeq ("$(CONFIG_GSTABS)","y")
12 PREPROCESS_PARTS += arch $(CONFIG_ABI) 32bit iofp \
13 $(CONFIG_XARCH) apic abs-timeout-hack \
15 abs_syscalls auto_map_kip io
19 OBJ_SPACE = $(OBJ_SPACE-$(CONFIG_DISABLE_VIRT_OBJ_SPACE))
21 PREPROCESS_PARTS += obj_space_$(OBJ_SPACE)
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_SCHED_PIT) += pit_timer
27 PREPROCESS_PARTS-$(CONFIG_SCHED_RTC) += rtc_timer
28 PREPROCESS_PARTS-$(CONFIG_SCHED_APIC) += apic_timer
29 PREPROCESS_PARTS-$(CONFIG_SCHED_HPET) += hpet_timer
30 PREPROCESS_PARTS-$(CONFIG_SERIAL) += serial 16550
31 PREPROCESS_PARTS-$(CONFIG_WATCHDOG) += watchdog
32 PREPROCESS_PARTS-$(CONFIG_PERF_CNT) += perf_cnt
33 PREPROCESS_PARTS-$(CONFIG_CPU_VIRT) += svm vmx
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
38 PREPROCESS_PARTS += $(PREPROCESS_PARTS-y)
43 PRIVATE_INCDIR += types/$(CONFIG_XARCH) types
49 VPATH += abi/$(CONFIG_XARCH) abi
50 INTERFACES_ABI := l4_fpage l4_msg_item l4_buf_desc kip l4_types \
53 kip_IMPL := kip kip-debug kip-ia32 kip-ia32-debug
54 l4_types_IMPL := l4_types l4_types-debug
55 virt_IMPL := virt-ia32-amd64
61 VPATH += jabi/$(CONFIG_XARCH) jabi
62 INTERFACES_JABI := jdb_ktrace
67 DRIVERS := libdrivers.a libgluedriverslibc.a
68 VPATH += drivers/$(CONFIG_XARCH) drivers
69 PRIVATE_INCDIR += drivers/$(CONFIG_XARCH) drivers
70 INTERFACES_DRIVERS := mux_console console keyb io pci vga_console reset \
71 processor delayloop mem
72 ifeq ("$(CONFIG_SERIAL)","y")
73 INTERFACES_DRIVERS += filter_console uart
75 reset_IMPL := reset-ia32
76 uart_IMPL := uart uart-16550
77 CXXSRC_DRIVERS := glue_libc.cc
78 NOOPT += $(patsubst %.o, %, $(OBJ_DRIVERS))
80 keyb_IMPL := keyb keyb-pc
82 mem_IMPL := mem mem-ia32
83 processor_IMPL := processor processor-ia32
88 KERNEL := fiasco.image
89 VPATH += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern
90 PRIVATE_INCDIR += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern
92 INTERFACES_KERNEL += __main acpi irq_chip_ia32 irq_chip_pic io_apic \
93 irq_msi boot_console \
94 io_space apic pit checksum x86desc gdt idt tss \
97 INTERFACES_KERNEL-$(CONFIG_CPU_VIRT) += svm vmx vm vm_svm vm_vmx
99 apic_IMPL := apic-ia32 apic-ia32-mp
100 boot_console_IMPL := boot_console-ia32-amd64
101 boot_info_IMPL := boot_info boot_info-ia32
102 clock_IMPL := clock clock-ia32
103 config_IMPL := config config-ia32-32 config-ia32
104 context_IMPL := context context-ia32 context-ia32-32 context-vcpu
105 continuation_IMPL := continuation-ia32-32
106 cpu_IMPL := cpu cpu-ia32 cpu-32
107 dirq_IMPL := dirq-ia32-ux
108 entry_frame_IMPL := entry_frame entry_frame-ia32-ux \
109 entry_frame-abs-timeout-hack
110 fpu_IMPL := fpu fpu-ia32-ux fpu-ia32
111 ipi_IMPL := ipi ipi-ia32
112 kdb_ke_IMPL := kdb_ke kdb_ke-ia32
113 kernel_thread_IMPL := kernel_thread kernel_thread-std kernel_thread-ia32
114 kernel_uart_IMPL := kernel_uart kernel_uart-16550
115 kip_init_IMPL := kip_init-ia32
116 kmem_IMPL := kmem-ia32 kmem-ia32-32
117 kmem_alloc_IMPL := kmem_alloc kmem_alloc-ia32
118 main_IMPL := main-ia32-32 main-ia32
119 mapping_IMPL := mapping-ia32-32 mapping
120 map_util_IMPL := map_util map_util-mem map_util-io map_util-objs
121 mem_layout_IMPL := mem_layout mem_layout-ia32 mem_layout-ia32-32
122 mem_space_IMPL := mem_space mem_space-user mem_space-ia32
123 mem_unit_IMPL := mem_unit-ia32
124 obj_space_IMPL := obj_space obj_space-$(OBJ_SPACE)
125 paging_IMPL := paging-ia32-32 paging-ia32 paging
126 perf_cnt_IMPL := perf_cnt perf_cnt-ia32
127 pic_IMPL := pic pic-i8259
128 pit_IMPL := pit-i8254
129 pmem_alloc_IMPL := pmem_alloc pmem_alloc-ia32-ux
131 sched_context_IMPL := sched_context-wfq sched_context-fixed_prio \
132 sched_context-fp_wfq sched_context
133 sigma0_task_IMPL := sigma0_task sigma0_task-io
134 space_IMPL := space space-ia32 space-io
135 spin_lock_IMPL := spin_lock spin_lock-ia32
136 startup_IMPL := startup startup-ia32
137 sys_call_page_IMPL := sys_call_page sys_call_page-abs-ia32
138 task_IMPL := task task-ia32-amd64
139 tb_entry_IMPL := tb_entry tb_entry-ia32-32
140 timer_IMPL := timer timer-ia32-amd64-ux
141 thread_IMPL := thread thread-ia32 thread-ia32-32 \
142 thread-ipc thread-pagefault thread-log \
143 thread-debug thread-dbf thread-vcpu thread-io
144 utcb_init_IMPL := utcb_init utcb_init-ia32
145 vmem_alloc_IMPL := vmem_alloc vmem_alloc-ia32
146 vm_factory_IMPL := vm_factory vm_factory-ia32
147 watchdog_IMPL := watchdog watchdog-ia32
149 INTERFACES_KERNEL-$(CONFIG_SERIAL) += uart_console
151 cpu_lock_IMPL := cpu_lock cpu_lock-generic
153 ifeq ("$(CONFIG_SCHED_PIT)","y")
154 timer_IMPL += timer-pit
155 timer_tick_IMPL += timer_tick-single-vector timer_tick-ia32
157 ifeq ("$(CONFIG_SCHED_RTC)","y")
158 timer_IMPL += timer-rtc
159 timer_tick_IMPL += timer_tick-single-vector timer_tick-ia32
160 INTERFACES_KERNEL += rtc
162 ifeq ("$(CONFIG_SCHED_APIC)","y")
163 timer_IMPL += timer-apic
164 timer_tick_IMPL += timer_tick-apic
166 ifeq ("$(CONFIG_SCHED_HPET)","y")
167 timer_IMPL += timer-hpet
168 timer_tick_IMPL += timer_tick-single-vector timer_tick-ia32
169 INTERFACES_KERNEL += hpet
172 ifeq ("$(CONFIG_JDB)","y")
173 JDB := jdb_compound.o
175 VPATH += jdb/ia32/32 jdb/ia32 jdb
176 INTERFACES_KERNEL += jdb_tbuf jdb_tbuf_init jdb_trace tb_entry
177 INTERFACES_JDB += jdb jdb_util jdb_prompt_ext jdb_symbol jdb_lines \
179 jdb_module jdb_core jdb_io_ports \
180 jdb_kern_info jdb_prompt_module jdb_tbuf_output \
181 jdb_input jdb_dump jdb_ptab jdb_misc jdb_mapdb \
182 jdb_tcb jdb_attach_irq \
183 jdb_trace_set jdb_counters jdb_table kern_cnt \
185 jdb_tbuf_show jdb_console_buffer \
186 jdb_list jdb_screen push_console jdb_timeout \
187 jdb_handler_queue jdb_halt_thread \
188 jdb_kern_info_kmem_alloc \
189 jdb_kern_info_kip jdb_kern_info_config \
190 loadcnt jdb_utcb jdb_thread_list \
191 jdb_entry_frame jdb_kobject jdb_space jdb_io_apic \
192 jdb_trap_state jdb_ipi jdb_kobject_names \
193 jdb_rcupdate jdb_bt jdb_ipc_gate jdb_obj_space \
194 jdb_log jdb_factory jdb_iomap \
195 jdb_thread jdb_scheduler jdb_sender_list \
198 CXXSRC_JDB := tb_entry_output.cc
200 apic_IMPL += apic-debug
201 jdb_IMPL := jdb jdb-ia32-amd64 jdb-ansi jdb-ia32-ux jdb-thread \
202 jdb-int3-ia32-amd64 jdb-int3-ia32-ux
203 jdb_bp_IMPL := jdb_bp-ia32-ux jdb_bp-ia32-amd64 jdb_bp-ia32
204 jdb_bt_IMPL := jdb_bt-ia32-ux
205 jdb_entry_frame_IMPL := jdb_entry_frame-ia32
206 jdb_kern_info_IMPL := jdb_kern_info jdb_kern_info-ia32-amd64 \
207 jdb_kern_info-ia32-ux jdb_kern_info-apic \
208 jdb_kern_info-pci jdb_kern_info-bench \
209 jdb_kern_info-bench-ia32-32 \
210 jdb_kern_info-dr jdb_kern_info-mtrr
211 jdb_misc_IMPL := jdb_misc-ia32-amd64
212 jdb_ptab_IMPL := jdb_ptab jdb_ptab-ia32-ux-arm
213 jdb_screen_IMPL := jdb_screen jdb_screen-ia32
214 jdb_tcb_IMPL := jdb_tcb jdb_tcb-ia32-ux
215 jdb_trace_set_IMPL := jdb_trace_set jdb_trace_set-ia32-ux
217 INTERFACES_JDB-$(CONFIG_JDB_MISC) += jdb_tetris
219 INTERFACES_JDB += $(INTERFACES_JDB-y)
223 CXXSRC_KERNEL := kernel_panic.cc libc_backend_lock.cc
224 ASSRC_KERNEL := entry.S entry-native.S sys_call_page-asm.S
226 ASSRC_KERNEL-$(CONFIG_MP) += tramp-mp.S entry-mp.S
227 ASSRC_KERNEL-$(CONFIG_CPU_VIRT) += vm_svm_asm.S vm_vmx_asm.S
228 ASSRC_KERNEL += $(ASSRC_KERNEL-y)
230 NOOPT += $(filter jdb%,\
231 $(foreach in,$(INTERFACES_KERNEL), \
232 $(if $($(in)_IMPL),$($(in)_IMPL),$(in))))
233 NOOPT += tb_entry_output $(tb_entry_IMPL) $(perf_cnt_IMPL) \
234 kern_cnt loadcnt $(apic_IMPL) $(watchdog_IMPL) kdb \
235 $(kernel_uart_IMPL) push_console virq thread-dbf \
237 NOOPT += $(foreach in,$(INTERFACES_JDB), \
238 $(if $($(in)_IMPL),$($(in)_IMPL),$(in)))
241 ### When testing with test threads, uncomment the following:
244 # PRIVATE_INCDIR += kern-test
246 # INTERFACES_KERNEL += generic_test_thread test_thread node cpu \
247 # back_trace cpu_guard types
249 # node_IMPL := node node-up
250 # cpu_IMPL := cpu cpu-perf cpu-perfp4
251 # config_IMPL := config config-test
253 # kernel_thread_IMPL := $(filter-out kernel_thread-std,$(kernel_thread_IMPL)) \
256 # Replace this definition with your own test thread.
257 # test_thread_IMPL := test_thread-test26
259 ### End of test-thread section
271 VPATH += boot/$(CONFIG_XARCH) boot
272 PRIVATE_INCDIR += boot boot/ia32
273 CXXSRC_BOOT := boot_libc_glue.cc bootstrap.cc boot_cpu.cc \
274 direct_cons_putchar.cc
275 ASSRC_BOOT := boot.S boot_idt.S
276 NOOPT += $(patsubst %.o, %, $(OBJ_BOOT))
279 # TCBOFFSET subsystem
281 TCBOFFSET := tcboffset.h
282 CXXSRC_TCBOFFSET := tcboffset.cc dump_tcboffsets.cc
293 PROG_LINES := genlines
299 CXXSRC_CHECKSUM := genchecksum.cc
310 OBJ_KERNEL += gblcfg.o
318 INTERFACES_CXXLIB := paranoia s_cruft
324 VPATH += lib/libk/$(CONFIG_XARCH) lib/libk
325 PRIVATE_INCDIR += lib/libk/$(CONFIG_XARCH) lib/libk
326 INTERFACES_LIBK := atomic lock_guard auto_ptr std_macros
327 CSRC_LIBK += gcc_lib.c
328 CXXSRC_LIBK += construction.cc
335 PRIVATE_INCDIR += lib/kern/include
337 NOOPT += $(patsubst %.o, %, $(OBJ_LIBKERN))
341 # LIBGZIP subsystem (only for Jdb)
343 ifneq ($(CONFIG_JDB_GZIP),)
346 PRIVATE_INCDIR += lib/gzip
347 CSRC_LIBGZIP := adler32.c crc32.c gzip.c trees.c deflate.c zutil.c
348 NOOPT += $(patsubst %.o, %, $(OBJ_LIBGZIP))
352 # LIBDISASM subsystem (only for Jdb)
354 ifeq ("$(CONFIG_JDB_DISASM)","y")
355 # $(srcdir)/lib/disasm may be removed
356 ifeq ($(wildcard $(srcdir)/lib/disasm),)
357 $(error $(srcdir)/lib/disasm is missing, disable CONFIG_JDB_DISASM)
360 SUBSYSTEMS += LIBDISASM
361 KERNEL_EXTRA_LIBS += $(LIBDISASM)
362 PREPROCESS_PARTS += jdb_disasm
364 LIBDISASM := libdisasm.a
365 VPATH += lib/disasm lib/disasm/elf lib/disasm/include \
366 lib/disasm/include/opcode lib/disasm/opcodes \
367 lib/disasm/libiberty lib/disasm/bfd
368 PRIVATE_INCDIR += lib/disasm lib/disasm/elf lib/disasm/include \
369 lib/disasm/include/opcode lib/disasm/opcodes \
370 lib/disasm/libiberty lib/disasm/bfd
371 PRIVATE_INCDIR += lib/disasm
372 CXXSRC_LIBDISASM := disasm.cc
373 CSRC_LIBDISASM := dis-init.c i386-dis.c dis-buf.c
374 NOOPT += $(patsubst %.o, %, $(OBJ_LIBDISASM))
378 # LIBPERFCTR subsystem (only for Jdb)
380 LIBPERFCTR := libperfctr.a
382 PRIVATE_INCDIR += lib/perfctr
383 CSRC_LIBPERFCTR := event_set_p5.c event_set_p6.c event_set_amd.c \
384 event_set_p4.c event_set_x86.c perfctr.c \
386 NOOPT += $(patsubst %.o, %, $(OBJ_LIBPERFCTR))
389 # LIBREGEX subsystem (only for Jdb)
391 LIBREGEX := libregex.a
393 PRIVATE_INCDIR += lib/regex
394 CSRC_LIBREGEX := alloc.c rx.c
395 NOOPT += $(patsubst %.o, %, $(OBJ_LIBREGEX))
401 VPATH += lib/minilibc/$(CONFIG_XARCH) lib/minilibc
402 PRIVATE_INCDIR += lib/minilibc/$(CONFIG_XARCH)/include lib/minilibc/include
403 CSRC_MINILIBC := atexit.c memccpy.c memcmp.c memmove.c memset.c memcpy.c \
404 memchr.c strchr.c strcmp.c strcpy.c strlen.c strncmp.c \
405 strncpy.c strstr.c __assert_fail.c printf.c __v_printf.c \
406 vprintf.c strtol.c strtoul.c lltostr.c __ltostr.c \
407 putchar.c puts.c getchar.c gets.c sprintf.c \
408 snprintf.c vsnprintf.c vsprintf.c longjmp.c isalnum.c \
409 isalpha.c isascii.c isblank.c iscntrl.c isdigit.c \
410 isgraph.c islower.c isprint.c ispunct.c isspace.c \
411 isupper.c isxdigit.c tolower.c strcspn.c strspn.c panic.c
412 ASSRC_MINILIBC := setjmp.S
414 # do not profile all of MINILIBC, because it is used in the BOOT subsystem
415 NOOPT += $(patsubst %.o, %, $(OBJ_MINILIBC))
417 ifeq ("$(CONFIG_JDB)","y")
419 ifneq ($(CONFIG_JDB_GZIP),)
420 ifneq ($(wildcard $(srcdir)/lib/gzip),)
421 SUBSYSTEMS += LIBGZIP
422 KERNEL_EXTRA_LIBS += $(LIBGZIP)
423 INTERFACES_KERNEL += jdb_gzip
427 ifneq ($(wildcard $(srcdir)/lib/perfctr),)
428 SUBSYSTEMS += LIBPERFCTR
429 KERNEL_EXTRA_LIBS += $(LIBPERFCTR)
430 KERNEL_UNRES_SYMS += -u perfctr_set_cputype
433 ifneq ($(wildcard $(srcdir)/lib/regex),)
434 SUBSYSTEMS += LIBREGEX
435 KERNEL_EXTRA_LIBS += $(LIBREGEX)
436 PREPROCESS_PARTS += jdb_regex
441 MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP)
443 INTERFACES_KERNEL += $(INTERFACES_KERNEL-y)