3 SUBSYSTEMS = JABI ABI DRIVERS KERNEL CRT0 BOOT LIBK LIBAMM \
4 CHECKSUM CXXLIB MINILIBC LIBKERN TCBOFFSET SYMBOLS VERSION GBLCFG
6 ifeq ("$(CONFIG_GSTABS)","y")
10 PREPROCESS_PARTS += arch $(CONFIG_ABI) 32bit iofp \
11 $(CONFIG_XARCH) apic abs-timeout-hack \
13 abs_syscalls auto_map_kip
17 OBJ_SPACE = $(OBJ_SPACE-$(CONFIG_DISABLE_VIRT_OBJ_SPACE))
19 PREPROCESS_PARTS += obj_space_$(OBJ_SPACE)
21 PREPROCESS_PARTS-$(CONFIG_MP) += mp
22 PREPROCESS_PARTS-$(CONFIG_LIST_ALLOC_SANITY) += list_alloc_debug
23 PREPROCESS_PARTS-$(CONFIG_JDB) += debug log
24 PREPROCESS_PARTS-$(CONFIG_PROFILE) += profile
25 PREPROCESS_PARTS-$(CONFIG_SCHED_PIT) += pit_timer
26 PREPROCESS_PARTS-$(CONFIG_SCHED_RTC) += rtc_timer
27 PREPROCESS_PARTS-$(CONFIG_SCHED_APIC) += apic_timer
28 PREPROCESS_PARTS-$(CONFIG_SCHED_HPET) += hpet_timer
29 PREPROCESS_PARTS-$(CONFIG_SERIAL) += serial 16550
30 PREPROCESS_PARTS-$(CONFIG_WATCHDOG) += watchdog
31 PREPROCESS_PARTS-$(CONFIG_PERF_CNT) += perf_cnt
32 PREPROCESS_PARTS-$(CONFIG_IO_PROT) += io
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
37 PREPROCESS_PARTS-$(CONFIG_HANDLE_SEGMENTS) += segments
38 PREPROCESS_PARTS-$(CONFIG_IO_PROT_IOPL_3) += iopl3
40 PREPROCESS_PARTS += $(PREPROCESS_PARTS-y)
45 PRIVATE_INCDIR += types/$(CONFIG_XARCH) types
51 VPATH += abi/$(CONFIG_XARCH) abi
52 INTERFACES_ABI := l4_fpage l4_msg_item l4_buf_desc kip l4_types \
55 kip_IMPL := kip kip-debug kip-ia32 kip-ia32-debug
56 l4_types_IMPL := l4_types l4_types-debug
57 virt_IMPL := virt-ia32-amd64
63 VPATH += jabi/$(CONFIG_XARCH) jabi
64 INTERFACES_JABI := jdb_ktrace
69 DRIVERS := libdrivers.a libgluedriverslibc.a
70 VPATH += drivers/$(CONFIG_XARCH) drivers
71 PRIVATE_INCDIR += drivers/$(CONFIG_XARCH) drivers
72 INTERFACES_DRIVERS := mux_console console keyb io pci vga_console reset \
73 processor delayloop mem
74 ifeq ("$(CONFIG_SERIAL)","y")
75 INTERFACES_DRIVERS += filter_console uart
77 reset_IMPL := reset-ia32
78 uart_IMPL := uart uart-16550
79 CXXSRC_DRIVERS := glue_libc.cc
80 NOOPT += $(patsubst %.o, %, $(OBJ_DRIVERS))
82 keyb_IMPL := keyb keyb-pc
84 mem_IMPL := mem mem-ia32
85 processor_IMPL := processor processor-ia32
90 KERNEL := fiasco.image
91 VPATH += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern
92 PRIVATE_INCDIR += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern
94 INTERFACES_KERNEL := cpu_mask rcupdate pages kobject_mapdb \
95 mem_region per_cpu_data startup boot_info cmdline \
96 __main queue queue_item l4_buf_iter irq_pin \
97 bitmap acpi io_apic mapping spin_lock \
98 mapping_tree mappable dbg_page_info \
99 mapdb region pic dirq_pic_pin dirq_io_apic \
100 kobject_dbg kobject ready_queue_wfq ready_queue_fp \
101 obj_space ptab_base io_space_sigma0 irq_msi \
102 io_space ram_quota ref_ptr ref_obj \
103 mem_space mem_space_sigma0 space vlog \
104 kmem kmem_alloc slab_cache_anon mem_layout \
105 kmem_slab_simple kmem_slab switch_lock kip_init \
106 thread_lock helping_lock cpu_lock timer timeout \
107 ipc_timeout timeslice_timeout \
108 per_cpu_data_alloc vcpu kobject_helper icu_helper \
109 thread_state context mp_lock sender receiver \
110 mem_unit factory lock ipc_sender \
111 thread syscalls kernel_thread map_util irq banner \
112 warn app_cpu_thread \
113 dirq globals apic watchdog kernel_uart pit \
114 checksum main config mapped_alloc \
115 vmem_alloc paging fpu fpu_state fpu_alloc cpu \
116 entry_frame kernel_console boot_console profile \
117 ipc_gate task kernel_task irq_controller \
118 irq_chip terminate continuation \
119 sched_context utcb_init \
120 perf_cnt x86desc gdt idt tss trap_state \
121 buddy_alloc vkey kdb_ke prio_list ipi timer_irq \
122 scheduler clock vm_factory \
125 INTERFACES_KERNEL-$(CONFIG_CPU_VIRT) += svm vmx vm vm_svm vm_vmx
127 PREPROCESS_PARTS += ulock
128 INTERFACES_KERNEL += u_semaphore
131 apic_IMPL := apic-ia32 apic-ia32-mp
132 boot_console_IMPL := boot_console-ia32-amd64
133 boot_info_IMPL := boot_info boot_info-ia32
134 clock_IMPL := clock clock-ia32
135 config_IMPL := config config-ia32-32 config-ia32
136 context_IMPL := context context-ia32 context-ia32-32 context-vcpu
137 continuation_IMPL := continuation-ia32-32
138 cpu_IMPL := cpu cpu-ia32 cpu-32
139 dirq_IMPL := dirq dirq-ia32-ux
140 dirq_pic_pin_IMPL := dirq_pic_pin dirq_pic_pin-ia32-ux
141 entry_frame_IMPL := entry_frame entry_frame-ia32-ux \
142 entry_frame-abs-timeout-hack
143 fpu_IMPL := fpu fpu-ia32-ux fpu-ia32
144 ipi_IMPL := ipi ipi-ia32
145 kdb_ke_IMPL := kdb_ke kdb_ke-ia32
146 kernel_thread_IMPL := kernel_thread kernel_thread-std kernel_thread-ia32
147 kernel_uart_IMPL := kernel_uart kernel_uart-16550
148 kip_init_IMPL := kip_init-ia32
149 kmem_IMPL := kmem-ia32 kmem-ia32-32
150 kmem_alloc_IMPL := kmem_alloc kmem_alloc-ia32
151 main_IMPL := main-ia32-32 main-ia32
152 mapping_IMPL := mapping-ia32-32 mapping
153 map_util_IMPL := map_util map_util-mem map_util-io map_util-objs
154 mem_layout_IMPL := mem_layout mem_layout-ia32 mem_layout-ia32-32
155 mem_space_IMPL := mem_space mem_space-user mem_space-ia32
156 mem_unit_IMPL := mem_unit-ia32
157 obj_space_IMPL := obj_space obj_space-$(OBJ_SPACE)
158 paging_IMPL := paging-ia32-32 paging-ia32 paging
159 perf_cnt_IMPL := perf_cnt perf_cnt-ia32
160 pic_IMPL := pic pic-i8259
161 pit_IMPL := pit-i8254
162 pmem_alloc_IMPL := pmem_alloc pmem_alloc-ia32-ux
164 sched_context_IMPL := sched_context-wfq sched_context-fixed_prio \
165 sched_context-fp_wfq sched_context
166 space_IMPL := space space-ia32
167 spin_lock_IMPL := spin_lock spin_lock-ia32
168 startup_IMPL := startup startup-ia32
169 sys_call_page_IMPL := sys_call_page sys_call_page-abs-ia32
170 task_IMPL := task task-ia32-amd64
171 tb_entry_IMPL := tb_entry tb_entry-ia32-32
172 timer_IMPL := timer timer-ia32-amd64-ux
173 thread_IMPL := thread thread-ia32 thread-ia32-32 \
176 thread-pagefault thread-log \
177 thread-debug thread-dbf thread-ulock thread-vcpu
178 utcb_init_IMPL := utcb_init utcb_init-ia32
179 vmem_alloc_IMPL := vmem_alloc vmem_alloc-ia32
180 vm_factory_IMPL := vm_factory vm_factory-ia32
181 watchdog_IMPL := watchdog watchdog-ia32
183 INTERFACES_KERNEL-$(CONFIG_SERIAL) += uart_console
185 ifeq ("$(CONFIG_PROFILE)","y")
186 cpu_lock_IMPL := cpu_lock cpu_lock-pic
188 cpu_lock_IMPL := cpu_lock cpu_lock-generic
191 ifeq ("$(CONFIG_SCHED_PIT)","y")
192 timer_IMPL += timer-pit
194 ifeq ("$(CONFIG_SCHED_RTC)","y")
195 timer_IMPL += timer-rtc
196 INTERFACES_KERNEL += rtc
198 ifeq ("$(CONFIG_SCHED_APIC)","y")
199 timer_IMPL += timer-apic
201 ifeq ("$(CONFIG_SCHED_HPET)","y")
202 timer_IMPL += timer-hpet
203 INTERFACES_KERNEL += hpet
207 ifeq ("$(CONFIG_IO_PROT)","y")
208 space_IMPL += space-io
209 thread_IMPL += thread-io
212 ifeq ("$(CONFIG_JDB)","y")
213 VPATH += jdb/ia32/32 jdb/ia32 jdb
214 INTERFACES_KERNEL += jdb jdb_util jdb_prompt_ext jdb_symbol jdb_lines \
216 jdb_tbuf jdb_module jdb_core jdb_io_ports \
217 jdb_kern_info jdb_prompt_module jdb_tbuf_output \
218 jdb_input jdb_dump jdb_ptab jdb_misc jdb_mapdb \
219 jdb_tcb jdb_attach_irq jdb_tbuf_init jdb_trace \
220 jdb_trace_set jdb_counters jdb_table kern_cnt \
221 tb_entry tb_entry_output jdb_exit_module \
222 jdb_tbuf_show jdb_console_buffer virq \
223 jdb_list jdb_screen push_console jdb_timeout \
224 jdb_handler_queue jdb_halt_thread \
225 jdb_kern_info_kmem_alloc jdb_kern_info_region \
226 jdb_kern_info_kip jdb_kern_info_config \
227 loadcnt jdb_utcb jdb_thread_list \
228 jdb_entry_frame jdb_kobject jdb_space jdb_io_apic \
229 jdb_trap_state jdb_ipi jdb_kobject_names \
230 jdb_rcupdate jdb_bt jdb_ipc_gate jdb_obj_space \
231 jdb_log jdb_factory jdb_semaphore jdb_iomap \
232 jdb_thread jdb_scheduler jdb_sender_list \
235 apic_IMPL += apic-debug
236 jdb_IMPL := jdb jdb-ia32-amd64 jdb-ansi jdb-ia32-ux jdb-thread \
237 jdb-int3-ia32-amd64 jdb-int3-ia32-ux
238 jdb_bp_IMPL := jdb_bp-ia32-ux jdb_bp-ia32-amd64 jdb_bp-ia32
239 jdb_bt_IMPL := jdb_bt-ia32-ux
240 jdb_entry_frame_IMPL := jdb_entry_frame-ia32
241 jdb_kern_info_IMPL := jdb_kern_info jdb_kern_info-ia32-amd64 \
242 jdb_kern_info-ia32-ux jdb_kern_info-apic \
243 jdb_kern_info-pci jdb_kern_info-bench \
244 jdb_kern_info-bench-ia32-32 \
245 jdb_kern_info-dr jdb_kern_info-mtrr
246 jdb_misc_IMPL := jdb_misc-ia32-amd64
247 jdb_ptab_IMPL := jdb_ptab jdb_ptab-ia32-ux-arm
248 jdb_screen_IMPL := jdb_screen jdb_screen-ia32
249 jdb_tcb_IMPL := jdb_tcb jdb_tcb-ia32-ux
250 jdb_trace_set_IMPL := jdb_trace_set jdb_trace_set-ia32-ux
252 INTERFACES_KERNEL-$(CONFIG_JDB_MISC) += jdb_tetris
256 CXXSRC_KERNEL := kernel_panic.cc libc_backend_lock.cc
257 ASSRC_KERNEL := entry.S entry-native.S sys_call_page-asm.S
259 ASSRC_KERNEL-$(CONFIG_MP) += tramp-mp.S entry-mp.S
260 ASSRC_KERNEL-$(CONFIG_CPU_VIRT) += vm_svm_asm.S vm_vmx_asm.S
261 ASSRC_KERNEL += $(ASSRC_KERNEL-y)
263 NOOPT += $(filter jdb%,\
264 $(foreach in,$(INTERFACES_KERNEL), \
265 $(if $($(in)_IMPL),$($(in)_IMPL),$(in))))
266 NOOPT += tb_entry_output $(tb_entry_IMPL) $(perf_cnt_IMPL) \
267 kern_cnt loadcnt $(apic_IMPL) $(watchdog_IMPL) kdb \
268 $(kernel_uart_IMPL) push_console virq thread-dbf \
271 ### When testing with test threads, uncomment the following:
274 # PRIVATE_INCDIR += kern-test
276 # INTERFACES_KERNEL += generic_test_thread test_thread node cpu \
277 # back_trace cpu_guard types
279 # node_IMPL := node node-up
280 # cpu_IMPL := cpu cpu-perf cpu-perfp4
281 # config_IMPL := config config-test
283 # kernel_thread_IMPL := $(filter-out kernel_thread-std,$(kernel_thread_IMPL)) \
286 # Replace this definition with your own test thread.
287 # test_thread_IMPL := test_thread-test26
289 ### End of test-thread section
301 VPATH += boot/$(CONFIG_XARCH) boot
302 PRIVATE_INCDIR += boot boot/ia32
303 CXXSRC_BOOT := boot_libc_glue.cc bootstrap.cc boot_cpu.cc \
304 direct_cons_putchar.cc
305 ASSRC_BOOT := boot.S boot_idt.S
306 NOOPT += $(patsubst %.o, %, $(OBJ_BOOT))
309 # TCBOFFSET subsystem
311 TCBOFFSET := tcboffset.h
312 CXXSRC_TCBOFFSET := tcboffset.cc dump_tcboffsets.cc
323 PROG_LINES := genlines
329 CXXSRC_CHECKSUM := genchecksum.cc
340 OBJ_KERNEL += gblcfg.o
348 INTERFACES_CXXLIB := paranoia s_cruft
354 VPATH += lib/libk/$(CONFIG_XARCH) lib/libk
355 PRIVATE_INCDIR += lib/libk/$(CONFIG_XARCH) lib/libk
356 INTERFACES_LIBK := atomic lock_guard auto_ptr std_macros dlist
357 ifeq ("$(CONFIG_PROFILE)","y")
358 INTERFACES_LIBK += gmon unistd
360 CSRC_LIBK += gcc_lib.c
362 NOPROFILE += profile gmon
369 PRIVATE_INCDIR += lib/kern/include
371 NOOPT += $(patsubst %.o, %, $(OBJ_LIBKERN))
378 PRIVATE_INCDIR += lib/amm
379 CSRC_LIBAMM := amm_alloc_entry.c amm_allocate.c amm_deallocate.c \
380 amm_destroy.c amm_dump.c amm_find_addr.c amm_find_gen.c \
381 amm_free_entry.c amm_init.c amm_init_gen.c amm_iterate.c \
382 amm_iterate_gen.c amm_join.c amm_modify.c amm_protect.c \
383 amm_reserve.c amm_select.c amm_split.c
386 # LIBGZIP subsystem (only for Jdb)
388 ifneq ($(CONFIG_JDB_GZIP),)
391 PRIVATE_INCDIR += lib/gzip
392 CSRC_LIBGZIP := adler32.c crc32.c gzip.c trees.c deflate.c zutil.c
393 NOOPT += $(patsubst %.o, %, $(OBJ_LIBGZIP))
397 # LIBDISASM subsystem (only for Jdb)
399 ifeq ("$(CONFIG_JDB_DISASM)","y")
400 # $(srcdir)/lib/disasm may be removed
401 ifeq ($(wildcard $(srcdir)/lib/disasm),)
402 $(error $(srcdir)/lib/disasm is missing, disable CONFIG_JDB_DISASM)
405 SUBSYSTEMS += LIBDISASM
406 KERNEL_EXTRA_LIBS += $(LIBDISASM)
407 PREPROCESS_PARTS += jdb_disasm
409 LIBDISASM := libdisasm.a
410 VPATH += lib/disasm lib/disasm/elf lib/disasm/include \
411 lib/disasm/include/opcode lib/disasm/opcodes \
412 lib/disasm/libiberty lib/disasm/bfd
413 PRIVATE_INCDIR += lib/disasm lib/disasm/elf lib/disasm/include \
414 lib/disasm/include/opcode lib/disasm/opcodes \
415 lib/disasm/libiberty lib/disasm/bfd
416 PRIVATE_INCDIR += lib/disasm
417 CSRC_LIBDISASM := disasm.c dis-init.c i386-dis.c dis-buf.c
418 NOOPT += $(patsubst %.o, %, $(OBJ_LIBDISASM))
422 # LIBPERFCTR subsystem (only for Jdb)
424 LIBPERFCTR := libperfctr.a
426 PRIVATE_INCDIR += lib/perfctr
427 CSRC_LIBPERFCTR := event_set_p5.c event_set_p6.c event_set_amd.c \
428 event_set_p4.c event_set_x86.c perfctr.c \
430 NOOPT += $(patsubst %.o, %, $(OBJ_LIBPERFCTR))
433 # LIBREGEX subsystem (only for Jdb)
435 LIBREGEX := libregex.a
437 PRIVATE_INCDIR += lib/regex
438 CSRC_LIBREGEX := alloc.c rx.c
439 NOOPT += $(patsubst %.o, %, $(OBJ_LIBREGEX))
445 VPATH += lib/minilibc/$(CONFIG_XARCH) lib/minilibc
446 PRIVATE_INCDIR += lib/minilibc/$(CONFIG_XARCH)/include lib/minilibc/include
447 CSRC_MINILIBC := atexit.c memccpy.c memcmp.c memmove.c memset.c memcpy.c \
448 memchr.c strchr.c strcmp.c strcpy.c strlen.c strncmp.c \
449 strncpy.c strstr.c __assert_fail.c printf.c __v_printf.c \
450 vprintf.c strtol.c strtoul.c lltostr.c __ltostr.c \
451 putchar.c puts.c getchar.c gets.c construction.c sprintf.c \
452 snprintf.c vsnprintf.c vsprintf.c longjmp.c isalnum.c \
453 isalpha.c isascii.c isblank.c iscntrl.c isdigit.c \
454 isgraph.c islower.c isprint.c ispunct.c isspace.c \
455 isupper.c isxdigit.c tolower.c strcspn.c strspn.c panic.c
456 ASSRC_MINILIBC := setjmp.S
458 # do not profile all of MINILIBC, because it is used in the BOOT subsystem
459 NOOPT += $(patsubst %.o, %, $(OBJ_MINILIBC))
461 ifeq ("$(CONFIG_JDB)","y")
463 ifneq ($(CONFIG_JDB_GZIP),)
464 ifneq ($(wildcard $(srcdir)/lib/gzip),)
465 SUBSYSTEMS += LIBGZIP
466 KERNEL_EXTRA_LIBS += $(LIBGZIP)
467 INTERFACES_KERNEL += jdb_gzip
471 ifneq ($(wildcard $(srcdir)/lib/perfctr),)
472 SUBSYSTEMS += LIBPERFCTR
473 KERNEL_EXTRA_LIBS += $(LIBPERFCTR)
474 KERNEL_UNRES_SYMS += -u perfctr_set_cputype
477 ifneq ($(wildcard $(srcdir)/lib/regex),)
478 SUBSYSTEMS += LIBREGEX
479 KERNEL_EXTRA_LIBS += $(LIBREGEX)
480 PREPROCESS_PARTS += jdb_regex
485 MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP)
487 INTERFACES_KERNEL += $(INTERFACES_KERNEL-y)