# -*- makefile -*- SUBSYSTEMS = JABI ABI DRIVERS KERNEL CRT0 BOOT LIBK LIBAMM \ CHECKSUM CXXLIB MINILIBC LIBKERN TCBOFFSET SYMBOLS VERSION GBLCFG ifeq ("$(CONFIG_GSTABS)","y") SUBSYSTEMS += LINES endif PREPROCESS_PARTS += arch $(CONFIG_ABI) 32bit iofp \ $(CONFIG_XARCH) apic abs-timeout-hack \ i8259 pc i8254 fpu \ abs_syscalls auto_map_kip OBJ_SPACE-y = phys OBJ_SPACE- = virt OBJ_SPACE = $(OBJ_SPACE-$(CONFIG_DISABLE_VIRT_OBJ_SPACE)) PREPROCESS_PARTS += obj_space_$(OBJ_SPACE) PREPROCESS_PARTS-$(CONFIG_MP) += mp PREPROCESS_PARTS-$(CONFIG_LIST_ALLOC_SANITY) += list_alloc_debug PREPROCESS_PARTS-$(CONFIG_JDB) += debug log PREPROCESS_PARTS-$(CONFIG_PROFILE) += profile PREPROCESS_PARTS-$(CONFIG_SCHED_PIT) += pit_timer PREPROCESS_PARTS-$(CONFIG_SCHED_RTC) += rtc_timer PREPROCESS_PARTS-$(CONFIG_SCHED_APIC) += apic_timer PREPROCESS_PARTS-$(CONFIG_SCHED_HPET) += hpet_timer PREPROCESS_PARTS-$(CONFIG_SERIAL) += serial 16550 PREPROCESS_PARTS-$(CONFIG_WATCHDOG) += watchdog PREPROCESS_PARTS-$(CONFIG_PERF_CNT) += perf_cnt PREPROCESS_PARTS-$(CONFIG_IO_PROT) += io PREPROCESS_PARTS-$(CONFIG_CPU_VIRT) += svm vmx 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-$(CONFIG_HANDLE_SEGMENTS) += segments PREPROCESS_PARTS-$(CONFIG_IO_PROT_IOPL_3) += iopl3 PREPROCESS_PARTS += $(PREPROCESS_PARTS-y) # # TYPES subsystem # PRIVATE_INCDIR += types/$(CONFIG_XARCH) types # # ABI Subsystem # ABI := libabi.a VPATH += abi/$(CONFIG_XARCH) abi INTERFACES_ABI := l4_fpage l4_msg_item l4_buf_desc kip l4_types \ l4_error virt kip_IMPL := kip kip-debug kip-ia32 kip-ia32-debug l4_types_IMPL := l4_types l4_types-debug virt_IMPL := virt-ia32-amd64 # # JABI Subsystem # JABI := libjabi.a VPATH += jabi/$(CONFIG_XARCH) jabi INTERFACES_JABI := jdb_ktrace # # DRIVERS subsystem # DRIVERS := libdrivers.a libgluedriverslibc.a VPATH += drivers/$(CONFIG_XARCH) drivers PRIVATE_INCDIR += drivers/$(CONFIG_XARCH) drivers INTERFACES_DRIVERS := mux_console console keyb io pci vga_console reset \ processor delayloop mem ifeq ("$(CONFIG_SERIAL)","y") INTERFACES_DRIVERS += filter_console uart endif reset_IMPL := reset-ia32 uart_IMPL := uart uart-16550 CXXSRC_DRIVERS := glue_libc.cc NOOPT += $(patsubst %.o, %, $(OBJ_DRIVERS)) keyb_IMPL := keyb keyb-pc io_IMPL := io io-ia32 mem_IMPL := mem mem-ia32 processor_IMPL := processor processor-ia32 # # KERNEL subsystem # KERNEL := fiasco.image VPATH += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern PRIVATE_INCDIR += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern INTERFACES_KERNEL := cpu_mask rcupdate pages kobject_mapdb \ mem_region per_cpu_data startup boot_info cmdline \ __main queue queue_item l4_buf_iter irq_pin \ bitmap acpi io_apic mapping spin_lock \ mapping_tree mappable dbg_page_info \ mapdb region pic dirq_pic_pin dirq_io_apic \ kobject_dbg kobject ready_queue_wfq ready_queue_fp \ obj_space ptab_base io_space_sigma0 irq_msi \ io_space ram_quota ref_ptr ref_obj \ mem_space mem_space_sigma0 space vlog \ kmem kmem_alloc slab_cache_anon mem_layout \ kmem_slab_simple kmem_slab switch_lock kip_init \ thread_lock helping_lock cpu_lock timer timeout \ ipc_timeout timeslice_timeout \ per_cpu_data_alloc vcpu kobject_helper icu_helper \ thread_state context mp_lock sender receiver \ mem_unit factory lock ipc_sender \ thread syscalls kernel_thread map_util irq banner \ warn app_cpu_thread \ dirq globals apic watchdog kernel_uart pit \ checksum main config mapped_alloc \ vmem_alloc paging fpu fpu_state fpu_alloc cpu \ entry_frame kernel_console boot_console profile \ ipc_gate task kernel_task irq_controller \ irq_chip terminate continuation \ sched_context utcb_init \ perf_cnt x86desc gdt idt tss trap_state \ buddy_alloc vkey kdb_ke prio_list ipi timer_irq \ scheduler clock vm_factory \ sys_call_page INTERFACES_KERNEL-$(CONFIG_CPU_VIRT) += svm vmx vm vm_svm vm_vmx PREPROCESS_PARTS += ulock INTERFACES_KERNEL += u_semaphore apic_IMPL := apic-ia32 apic-ia32-mp boot_console_IMPL := boot_console-ia32-amd64 boot_info_IMPL := boot_info boot_info-ia32 clock_IMPL := clock clock-ia32 config_IMPL := config config-ia32-32 config-ia32 context_IMPL := context context-ia32 context-ia32-32 context-vcpu continuation_IMPL := continuation-ia32-32 cpu_IMPL := cpu cpu-ia32 cpu-32 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-ia32 ipi_IMPL := ipi ipi-ia32 kdb_ke_IMPL := kdb_ke kdb_ke-ia32 kernel_thread_IMPL := kernel_thread kernel_thread-std kernel_thread-ia32 kernel_uart_IMPL := kernel_uart kernel_uart-16550 kip_init_IMPL := kip_init-ia32 kmem_IMPL := kmem-ia32 kmem-ia32-32 kmem_alloc_IMPL := kmem_alloc kmem_alloc-ia32 main_IMPL := main-ia32-32 main-ia32 mapping_IMPL := mapping-ia32-32 mapping map_util_IMPL := map_util map_util-mem map_util-io map_util-objs mem_layout_IMPL := mem_layout mem_layout-ia32 mem_layout-ia32-32 mem_space_IMPL := mem_space mem_space-user mem_space-ia32 mem_unit_IMPL := mem_unit-ia32 obj_space_IMPL := obj_space obj_space-$(OBJ_SPACE) paging_IMPL := paging-ia32-32 paging-ia32 paging perf_cnt_IMPL := perf_cnt perf_cnt-ia32 pic_IMPL := pic pic-i8259 pit_IMPL := pit-i8254 pmem_alloc_IMPL := pmem_alloc pmem_alloc-ia32-ux rtc_IMPL := rtc-ia32 sched_context_IMPL := sched_context-wfq sched_context-fixed_prio \ sched_context-fp_wfq sched_context space_IMPL := space space-ia32 spin_lock_IMPL := spin_lock spin_lock-ia32 startup_IMPL := startup startup-ia32 sys_call_page_IMPL := sys_call_page sys_call_page-abs-ia32 task_IMPL := task task-ia32-amd64 tb_entry_IMPL := tb_entry tb_entry-ia32-32 timer_IMPL := timer timer-ia32-amd64-ux thread_IMPL := thread thread-ia32 thread-ia32-32 \ thread-ipc \ thread-list \ thread-pagefault thread-log \ thread-debug thread-dbf thread-ulock thread-vcpu utcb_init_IMPL := utcb_init utcb_init-ia32 vmem_alloc_IMPL := vmem_alloc vmem_alloc-ia32 vm_factory_IMPL := vm_factory vm_factory-ia32 watchdog_IMPL := watchdog watchdog-ia32 INTERFACES_KERNEL-$(CONFIG_SERIAL) += uart_console ifeq ("$(CONFIG_PROFILE)","y") cpu_lock_IMPL := cpu_lock cpu_lock-pic else cpu_lock_IMPL := cpu_lock cpu_lock-generic endif ifeq ("$(CONFIG_SCHED_PIT)","y") timer_IMPL += timer-pit endif ifeq ("$(CONFIG_SCHED_RTC)","y") timer_IMPL += timer-rtc INTERFACES_KERNEL += rtc endif ifeq ("$(CONFIG_SCHED_APIC)","y") timer_IMPL += timer-apic endif ifeq ("$(CONFIG_SCHED_HPET)","y") timer_IMPL += timer-hpet INTERFACES_KERNEL += hpet endif ifeq ("$(CONFIG_IO_PROT)","y") space_IMPL += space-io thread_IMPL += thread-io endif ifeq ("$(CONFIG_JDB)","y") VPATH += jdb/ia32/32 jdb/ia32 jdb INTERFACES_KERNEL += jdb jdb_util jdb_prompt_ext jdb_symbol jdb_lines \ jdb_dbinfo jdb_bp \ jdb_tbuf jdb_module jdb_core jdb_io_ports \ jdb_kern_info jdb_prompt_module jdb_tbuf_output \ jdb_input jdb_dump jdb_ptab jdb_misc jdb_mapdb \ jdb_tcb jdb_attach_irq jdb_tbuf_init jdb_trace \ jdb_trace_set jdb_counters jdb_table kern_cnt \ tb_entry tb_entry_output jdb_exit_module \ jdb_tbuf_show jdb_console_buffer virq \ jdb_list jdb_screen push_console jdb_timeout \ jdb_handler_queue jdb_halt_thread \ jdb_kern_info_kmem_alloc jdb_kern_info_region \ jdb_kern_info_kip jdb_kern_info_config \ loadcnt jdb_utcb jdb_thread_list \ jdb_entry_frame jdb_kobject jdb_space jdb_io_apic \ jdb_trap_state jdb_ipi jdb_kobject_names \ jdb_rcupdate jdb_bt jdb_ipc_gate jdb_obj_space \ jdb_log jdb_factory jdb_semaphore jdb_iomap \ jdb_thread jdb_scheduler jdb_sender_list \ jdb_regex jdb_disasm apic_IMPL += apic-debug jdb_IMPL := jdb jdb-ia32-amd64 jdb-ansi jdb-ia32-ux jdb-thread \ jdb-int3-ia32-amd64 jdb-int3-ia32-ux jdb_bp_IMPL := jdb_bp-ia32-ux jdb_bp-ia32-amd64 jdb_bp-ia32 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-ia32-amd64 \ jdb_kern_info-ia32-ux jdb_kern_info-apic \ jdb_kern_info-pci jdb_kern_info-bench \ jdb_kern_info-bench-ia32-32 \ jdb_kern_info-dr jdb_kern_info-mtrr 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_tcb_IMPL := jdb_tcb jdb_tcb-ia32-ux jdb_trace_set_IMPL := jdb_trace_set jdb_trace_set-ia32-ux INTERFACES_KERNEL-$(CONFIG_JDB_MISC) += jdb_tetris endif CXXSRC_KERNEL := kernel_panic.cc libc_backend_lock.cc ASSRC_KERNEL := entry.S entry-native.S sys_call_page-asm.S ASSRC_KERNEL-$(CONFIG_MP) += tramp-mp.S entry-mp.S ASSRC_KERNEL-$(CONFIG_CPU_VIRT) += vm_svm_asm.S vm_vmx_asm.S ASSRC_KERNEL += $(ASSRC_KERNEL-y) NOOPT += $(filter jdb%,\ $(foreach in,$(INTERFACES_KERNEL), \ $(if $($(in)_IMPL),$($(in)_IMPL),$(in)))) NOOPT += tb_entry_output $(tb_entry_IMPL) $(perf_cnt_IMPL) \ kern_cnt loadcnt $(apic_IMPL) $(watchdog_IMPL) kdb \ $(kernel_uart_IMPL) push_console virq thread-dbf \ trap_state ### When testing with test threads, uncomment the following: # # VPATH += kern-test # PRIVATE_INCDIR += kern-test # # INTERFACES_KERNEL += generic_test_thread test_thread node cpu \ # back_trace cpu_guard types # # node_IMPL := node node-up # cpu_IMPL := cpu cpu-perf cpu-perfp4 # config_IMPL := config config-test # # kernel_thread_IMPL := $(filter-out kernel_thread-std,$(kernel_thread_IMPL)) \ # kernel_thread-test # # Replace this definition with your own test thread. # test_thread_IMPL := test_thread-test26 # ### End of test-thread section # # CRT0 subsystem # CRT0 := crt0.o ASSRC_CRT0 := crt0.S # # BOOT subsystem # BOOT := main VPATH += boot/$(CONFIG_XARCH) boot PRIVATE_INCDIR += boot boot/ia32 CXXSRC_BOOT := boot_libc_glue.cc bootstrap.cc boot_cpu.cc \ direct_cons_putchar.cc ASSRC_BOOT := boot.S boot_idt.S NOOPT += $(patsubst %.o, %, $(OBJ_BOOT)) # # TCBOFFSET subsystem # TCBOFFSET := tcboffset.h CXXSRC_TCBOFFSET := tcboffset.cc dump_tcboffsets.cc # # SYMBOLS subsystem # SYMBOLS := Symbols # # LINES subsystem # LINES := Lines PROG_LINES := genlines # # CHECKSUM subsystem # CHECKSUM := checksum CXXSRC_CHECKSUM := genchecksum.cc # # VERSION subsystem # VERSION := version.h # # GBLCFG subsystem # GBLCFG := gblcfg.o OBJ_KERNEL += gblcfg.o # # CXXLIB Subsystem # CXXLIB := libcxx.a VPATH += lib/cxxlib INTERFACES_CXXLIB := paranoia s_cruft # # 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 ifeq ("$(CONFIG_PROFILE)","y") INTERFACES_LIBK += gmon unistd endif CSRC_LIBK += gcc_lib.c NOPROFILE += profile gmon # # LIBKERN Subsystem # LIBKERN := libkern.a VPATH += lib/kern PRIVATE_INCDIR += lib/kern/include CSRC_LIBKERN := NOOPT += $(patsubst %.o, %, $(OBJ_LIBKERN)) # # 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 # # LIBGZIP subsystem (only for Jdb) # ifneq ($(CONFIG_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 # # 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)) # # MINILIBC Subsystem # MINILIBC := libc.a VPATH += lib/minilibc/$(CONFIG_XARCH) lib/minilibc PRIVATE_INCDIR += lib/minilibc/$(CONFIG_XARCH)/include lib/minilibc/include CSRC_MINILIBC := atexit.c memccpy.c memcmp.c memmove.c memset.c memcpy.c \ memchr.c strchr.c strcmp.c strcpy.c strlen.c strncmp.c \ strncpy.c strstr.c __assert_fail.c printf.c __v_printf.c \ vprintf.c strtol.c strtoul.c lltostr.c __ltostr.c \ putchar.c puts.c getchar.c gets.c construction.c sprintf.c \ snprintf.c vsnprintf.c vsprintf.c longjmp.c isalnum.c \ isalpha.c isascii.c isblank.c iscntrl.c isdigit.c \ isgraph.c islower.c isprint.c ispunct.c isspace.c \ isupper.c isxdigit.c tolower.c strcspn.c strspn.c panic.c ASSRC_MINILIBC := setjmp.S # do not profile all of MINILIBC, because it is used in the BOOT subsystem NOOPT += $(patsubst %.o, %, $(OBJ_MINILIBC)) ifeq ("$(CONFIG_JDB)","y") ifneq ($(CONFIG_JDB_GZIP),) ifneq ($(wildcard $(srcdir)/lib/gzip),) SUBSYSTEMS += LIBGZIP KERNEL_EXTRA_LIBS += $(LIBGZIP) INTERFACES_KERNEL += jdb_gzip endif endif 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 endif MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP) INTERFACES_KERNEL += $(INTERFACES_KERNEL-y)