# -*- makefile -*- SUBSYSTEMS = JABI ABI DRIVERS KERNEL LIBK LIBAMM CXXLIB \ TCBOFFSET SYMBOLS VERSION GBLCFG MINILIBC ifeq ("$(CONFIG_GSTABS)","y") SUBSYSTEMS += LINES endif PREPROCESS_PARTS += arch $(CONFIG_ABI) 32bit $(CONFIG_XARCH) \ fpu jdb_thread_names iofp \ obj_space_phys abs_syscalls auto_map_kip \ kernel_can_exit PREPROCESS_PARTS-$(CONFIG_MP) += mp PREPROCESS_PARTS-$(CONFIG_LIST_ALLOC_SANITY) += list_alloc_debug PREPROCESS_PARTS-$(CONFIG_JDB) += debug log PREPROCESS_PARTS-$(CONFIG_PERF_CNT) += perf_cnt PREPROCESS_PARTS-$(CONFIG_HANDLE_SEGMENTS) += segments PREPROCESS_PARTS-$(CONFIG_CONTEXT_4K) += context_4k PREPROCESS_PARTS-$(CONFIG_SCHED_FIXED_PRIO) += sched_fixed_prio PREPROCESS_PARTS-$(CONFIG_SCHED_WFQ) += sched_wfq PREPROCESS_PARTS-$(CONFIG_SCHED_FP_WFQ) += sched_fp_wfq PREPROCESS_PARTS += $(PREPROCESS_PARTS-y) # # TYPES subsystem # PRIVATE_INCDIR += types/$(CONFIG_XARCH) types # # ABI Subsystem # ABI := libabi.a VPATH += abi/ia32 abi INTERFACES_ABI := l4_fpage l4_msg_item l4_buf_desc kip l4_types \ l4_error kip_IMPL := kip kip-ia32 kip-debug kip-ia32-debug l4_types_IMPL := l4_types l4_types-debug # # JABI Subsystem # JABI := libjabi.a VPATH += jabi/$(CONFIG_XARCH) jabi INTERFACES_JABI := jdb_ktrace # # DRIVERS subsystem # DRIVERS := libdrivers.a VPATH += drivers/ux drivers/ia32 drivers PRIVATE_INCDIR += drivers/ux drivers/ia32 drivers INTERFACES_DRIVERS := mux_console console filter_console processor \ delayloop mem processor_IMPL := processor processor-ux mem_IMPL := mem mem-ia32 # # KERNEL subsystem # KERNEL := fiasco.image KERNEL_EXTRA := irq0 VPATH += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern VPATH += jdb/ia32 jdb/ia32/32 jdb/ux jdb PRIVATE_INCDIR += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern KERNEL_EXTRA-$(CONFIG_UX_CON)) += ux_con KERNEL_EXTRA-$(CONFIG_UX_NET) += ux_net KERNEL_EXTRA += $(KERNEL_EXTRA-y) # KERNEL modules. # Important: The following list must be roughly sorted according to # link dependencies. The Unit test for a module M links against all # modules that precede M in this list, minus sibling modules (those # modules that _directly_ precede M and that M does not include). INTERFACES_KERNEL := mem_region simpleio kernel_console panic warn \ bitmap buddy_alloc irq_pin pages \ mem_layout per_cpu_data globals loader vhw \ kip_init ipi queue_item queue cpu_mask rcupdate \ boot_info cmdline config jdb_symbol jdb_util \ tb_entry perf_cnt jdb_tbuf x86desc \ emulation pic usermode cpu trampoline cpu_lock \ spin_lock \ region entry_frame continuation \ kmem mapped_alloc mem_unit \ ram_quota kmem_alloc ptab_base per_cpu_data_alloc \ ref_ptr ref_obj \ slab_cache_anon kmem_slab_simple dbg_page_info \ vmem_alloc paging kmem_slab fpu_state fpu \ ready_queue_wfq ready_queue_fp \ sched_context switch_lock timer timeout \ obj_space kobject_dbg kobject l4_buf_iter lock \ mem_space mem_space_sigma0 space vcpu context \ helping_lock \ mp_lock ipc_gate irq_controller \ mapping mapping_tree mappable \ mapdb kobject_mapdb map_util \ hostproc task kernel_task prio_list \ thread_lock timeslice_timeout \ ipc_timeout thread_state \ sender receiver ipc_sender thread kobject_helper \ syscalls \ kernel_thread virq dirq dirq_pic_pin \ banner fpu_alloc irq icu_helper main \ startup irq_chip libc_support \ jdb_dbinfo jdb fb net utcb_init \ jdb_core jdb_module jdb_table \ jdb_thread_list jdb_input jdb_dump jdb_thread \ jdb_lines jdb_tcb jdb_prompt_module jdb_bt \ jdb_mapdb jdb_ptab jdb_kern_info jdb_counters \ glibc_getchar jdb_trace jdb_trace_set \ tb_entry_output jdb_tbuf_init kern_cnt \ jdb_tbuf_output jdb_tbuf_show \ jdb_misc checksum watchdog terminate \ jdb_screen push_console jdb_bp \ jdb_attach_irq sys_call_page \ jdb_timeout gdt factory \ idt tss trap_state jdb_prompt_ext \ jdb_handler_queue jdb_exit_module \ jdb_halt_thread jdb_tetris \ jdb_kern_info_kip jdb_kern_info_region \ jdb_kern_info_kmem_alloc jdb_kern_info_config \ jdb_space jdb_trap_state \ vkey jdb_utcb vlog \ jdb_entry_frame kdb_ke jdb_ipi app_cpu_thread \ jdb_rcupdate jdb_kobject jdb_kobject_names \ jdb_list jdb_ipc_gate jdb_obj_space \ jdb_log jdb_factory jdb_semaphore scheduler \ jdb_scheduler clock jdb_sender_list \ jdb_disasm jdb_regex #ifeq ("$(CONFIG_USER_LOCKS)","y") PREPROCESS_PARTS += ulock INTERFACES_KERNEL += u_semaphore #endif boot_info_IMPL := boot_info boot_info-ia32 boot_info-ux clock_IMPL := clock clock-ia32 config_IMPL := config config-ia32-32 config-ux context_IMPL := context context-ia32 context-ia32-32 context-ux \ context-vcpu continuation_IMPL := continuation-ia32-32-ux cpu_IMPL := cpu cpu-ia32 cpu-ux cpu-32 cpu_lock_IMPL := cpu_lock cpu_lock-generic dirq_IMPL := dirq dirq-ia32-ux dirq_pic_pin_IMPL := dirq_pic_pin dirq_pic_pin-ia32-ux entry_frame_IMPL := entry_frame entry_frame-ia32-ux \ entry_frame-abs-timeout-hack fpu_IMPL := fpu fpu-ia32-ux fpu-ux irq_IMPL := irq irq-ux ipi_IMPL := ipi ipi-ux jdb_IMPL := jdb jdb-ux jdb-ansi jdb-ia32-ux jdb-thread \ jdb-int3 jdb-int3-ia32-ux jdb_tcb_IMPL := jdb_tcb jdb_tcb-ia32-ux jdb_bp_IMPL := jdb_bp-ia32-ux jdb_bp-ux jdb_bt_IMPL := jdb_bt-ia32-ux jdb_entry_frame_IMPL := jdb_entry_frame-ia32 jdb_kern_info_IMPL := jdb_kern_info jdb_kern_info-ux \ jdb_kern_info-ia32-ux jdb_kern_info-ia32-amd64 jdb_misc_IMPL := jdb_misc-ia32-amd64 jdb_ptab_IMPL := jdb_ptab jdb_ptab-ia32-ux-arm jdb_screen_IMPL := jdb_screen jdb_screen-ia32 jdb_trace_set_IMPL := jdb_trace_set jdb_trace_set-ia32-ux kdb_ke_IMPL := kdb_ke kdb_ke-ia32 kernel_thread_IMPL := kernel_thread kernel_thread-std kernel_thread-ux kip_init_IMPL := kip_init-ia32 kmem_IMPL := kmem-ia32 kmem-ux kmem_alloc_IMPL := kmem_alloc kmem_alloc-ia32 main_IMPL := main-ia32-32 main-ux mapping_IMPL := mapping-ia32-32 mapping map_util_IMPL := map_util map_util-mem map_util-objs mem_layout_IMPL := mem_layout mem_layout-ia32 mem_layout-ux mem_space_IMPL := mem_space mem_space-user mem_space-ia32 \ mem_space-ux mem_unit_IMPL := mem_unit-ux obj_space_IMPL := obj_space obj_space-phys paging_IMPL := paging-ia32-32 paging-ia32 paging perf_cnt_IMPL := perf_cnt perf_cnt-ia32 pic_IMPL := pic pic-ux pmem_alloc_IMPL := pmem_alloc pmem_alloc-ia32-ux sched_context_IMPL := sched_context-wfq sched_context-fixed_prio \ sched_context-fp_wfq sched_context space_IMPL := space space-ux sys_call_page_IMPL := sys_call_page sys_call_page-abs-ux task_IMPL := task task-ux tb_entry_IMPL := tb_entry tb_entry-ia32-32 terminate_IMPL := terminate-ux thread_IMPL := thread thread-ia32 thread-ia32-32 thread-ux \ thread-ipc \ thread-pagefault thread-list thread-log \ thread-debug thread-io thread-ulock thread-vcpu timer_IMPL := timer timer-ia32-amd64-ux timer-ux utcb_init_IMPL := utcb_init utcb_init-ux vmem_alloc_IMPL := vmem_alloc vmem_alloc-ia32 vmem_alloc-ux spin_lock_IMPL := spin_lock spin_lock-ia32 CXXSRC_KERNEL := libc_backend_nolock.cc glue_libc_ux.cc ASSRC_KERNEL := entry-ux.S entry.S sighandler.S \ sys_call_page-asm.S ifeq ($(CONFIG_MP),y) ASSRC_KERNEL += tramp-mp.S entry-mp.S endif NOOPT += $(filter jdb%,\ $(foreach in,$(INTERFACES_KERNEL), \ $(if $($(in)_IMPL),$($(in)_IMPL),$(in)))) NOOPT += tb_entry tb_entry_output # # TCBOFFSET subsystem # TCBOFFSET := tcboffset.h CXXSRC_TCBOFFSET := tcboffset.cc dump_tcboffsets.cc # # SYMBOLS subsystem # SYMBOLS := Symbols # # LINES subsystem # LINES := Lines PROG_LINES := genlines # # VERSION subsystem # VERSION := version.h # # GBLCFG subsystem # GBLCFG := gblcfg.o OBJ_KERNEL += gblcfg.o # # CXXLIB Subsystem # CXXLIB := libcxx.a VPATH += lib/cxxlib INTERFACES_CXXLIB := s_cruft paranoia # # LIBK subsystem # LIBK := libk.a VPATH += lib/libk/$(CONFIG_XARCH) lib/libk PRIVATE_INCDIR += lib/libk/$(CONFIG_XARCH) lib/libk INTERFACES_LIBK := atomic lock_guard auto_ptr std_macros dlist # # LIBAMM subsystem # LIBAMM := libamm.a VPATH += lib/amm PRIVATE_INCDIR += lib/amm CSRC_LIBAMM := amm_alloc_entry.c amm_allocate.c amm_deallocate.c \ amm_destroy.c amm_dump.c amm_find_addr.c amm_find_gen.c \ amm_free_entry.c amm_init.c amm_init_gen.c amm_iterate.c \ amm_iterate_gen.c amm_join.c amm_modify.c amm_protect.c \ amm_reserve.c amm_select.c amm_split.c ifneq ($(CONFIG_JDB_GZIP),) ifneq ($(wildcard $(srcdir)/lib/gzip),) SUBSYSTEMS += LIBGZIP KERNEL_EXTRA_LIBS += $(LIBGZIP) INTERFACES_KERNEL += jdb_gzip LIBGZIP := libgzip.a VPATH += lib/gzip PRIVATE_INCDIR += lib/gzip CSRC_LIBGZIP := adler32.c crc32.c gzip.c trees.c deflate.c zutil.c NOOPT += $(patsubst %.o, %, $(OBJ_LIBGZIP)) endif endif # # LIBDISASM subsystem (only for Jdb) # ifeq ("$(CONFIG_JDB_DISASM)","y") # $(srcdir)/lib/disasm may be removed ifeq ($(wildcard $(srcdir)/lib/disasm),) $(error $(srcdir)/lib/disasm is missing, disable CONFIG_JDB_DISASM) endif SUBSYSTEMS += LIBDISASM KERNEL_EXTRA_LIBS += $(LIBDISASM) PREPROCESS_PARTS += jdb_disasm LIBDISASM := libdisasm.a VPATH += lib/disasm lib/disasm/elf lib/disasm/include \ lib/disasm/include/opcode lib/disasm/opcodes \ lib/disasm/libiberty lib/disasm/bfd PRIVATE_INCDIR += lib/disasm lib/disasm/elf lib/disasm/include \ lib/disasm/include/opcode lib/disasm/opcodes \ lib/disasm/libiberty lib/disasm/bfd PRIVATE_INCDIR += lib/disasm CSRC_LIBDISASM := disasm.c dis-init.c i386-dis.c dis-buf.c NOOPT += $(patsubst %.o, %, $(OBJ_LIBDISASM)) endif # # LIBPERFCTR subsystem (only for Jdb) # LIBPERFCTR := libperfctr.a VPATH += lib/perfctr PRIVATE_INCDIR += lib/perfctr CSRC_LIBPERFCTR := event_set_p5.c event_set_p6.c event_set_amd.c \ event_set_p4.c event_set_x86.c perfctr.c \ event_set_centaur.c NOOPT += $(patsubst %.o, %, $(OBJ_LIBPERFCTR)) # # LIBREGEX subsystem (only for Jdb) # LIBREGEX := libregex.a VPATH += lib/regex PRIVATE_INCDIR += lib/regex CSRC_LIBREGEX := alloc.c rx.c NOOPT += $(patsubst %.o, %, $(OBJ_LIBREGEX)) ifneq ($(wildcard $(srcdir)/lib/perfctr),) SUBSYSTEMS += LIBPERFCTR KERNEL_EXTRA_LIBS += $(LIBPERFCTR) KERNEL_UNRES_SYMS += -u perfctr_set_cputype endif ifneq ($(wildcard $(srcdir)/lib/regex),) SUBSYSTEMS += LIBREGEX KERNEL_EXTRA_LIBS += $(LIBREGEX) PREPROCESS_PARTS += jdb_regex endif # # UNITTEST subsystem # # disabled until unittests fixed SUBSYSTEMS += UNITTEST VPATH += test/unit INTERFACES_UNITTEST += mapdb_t map_util_t # Compile all unit tests without -DNDEBUG. NONDEBUG += $(patsubst %.o, %, $(OBJ_UNITTEST)) MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP) # # MINILIBC Subsystem # MINILIBC := libc.a VPATH += lib/minilibc/ia32 lib/minilibc CSRC_MINILIBC := printf.c __v_printf.c \ vprintf.c lltostr.c __ltostr.c \ putchar.c puts.c gets.c sprintf.c \ snprintf.c vsnprintf.c vsprintf.c fprintf.c \ memccpy.c memchr.c memcmp.c memcpy.c memmove.c memset.c \ strcpy.c strlen.c strstr.c \ strcmp.c strcspn.c strncmp.c strspn.c # do not profile all of MINILIBC, because it is used in the BOOT subsystem NOOPT += $(patsubst %.o, %, $(OBJ_MINILIBC))