# -*- makefile -*- ############################################################################### include $(srcdir)/Modules.generic SUBSYSTEMS := ABI KERNEL LIBK DRIVERS MINILIBC \ CXXLIB VERSION JABI TCBOFFSET CRT0 PREPROCESS_PARTS += arch $(CONFIG_ABI) 32bit $(CONFIG_XARCH) \ h3800 noncont_mem \ abs_syscalls PREPROCESS_PARTS-$(CONFIG_SERIAL) += serial PREPROCESS_PARTS-$(CONFIG_MP) += mp PREPROCESS_PARTS-$(CONFIG_FPU) += fpu PREPROCESS_PARTS-$(CONFIG_LIST_ALLOC_SANITY) += list_alloc_debug PREPROCESS_PARTS-$(CONFIG_JDB) += debug jdb log PREPROCESS_PARTS-$(CONFIG_PERF_CNT) += perf_cnt PREPROCESS_PARTS-$(CONFIG_ARM_CACHE_L2CXX0) += outer_cache outer_cache_l2cxx0 PREPROCESS_PARTS-$(CONFIG_ARM_920T) += armv5 arm920t vcache PREPROCESS_PARTS-$(CONFIG_ARM_926) += armv5 926 vcache PREPROCESS_PARTS-$(CONFIG_ARM_V6PLUS) += armv6plus PREPROCESS_PARTS-$(CONFIG_ARM_V6) += armv6 PREPROCESS_PARTS-$(CONFIG_ARM_V7) += armv7 PREPROCESS_PARTS-$(CONFIG_ARM_1136) += arm1136 PREPROCESS_PARTS-$(CONFIG_ARM_1176) += arm1176 PREPROCESS_PARTS-$(CONFIG_ARM_MPCORE) += mpcore PREPROCESS_PARTS-$(CONFIG_ARM_CORTEX_A8) += armca8 PREPROCESS_PARTS-$(CONFIG_ARM_CORTEX_A9) += armca9 PREPROCESS_PARTS-$(CONFIG_ARM_TZ) += tz PREPROCESS_PARTS-$(CONFIG_ARM_1176_CACHE_ALIAS_FIX) += arm1176_cache_alias_fix 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) OBJ_SPACE-y = phys OBJ_SPACE- = virt OBJ_SPACE = $(OBJ_SPACE-$(CONFIG_DISABLE_VIRT_OBJ_SPACE)) ifeq ("$(CONFIG_ARM_1176)@$(CONFIG_ARM_1176_CACHE_ALIAS_FIX)","y@") OBJ_SPACE_TYPE = phys else OBJ_SPACE_TYPE = $(if $(CONFIG_ARM_V6PLUS),$(OBJ_SPACE),phys) endif PREPROCESS_PARTS += obj_space_$(OBJ_SPACE_TYPE) # # TYPES subsystem # PRIVATE_INCDIR += types/$(CONFIG_XARCH) types VPATH_LIBUART := $(srcdir)/lib/uart $(srcdir)/lib/uart/arm PRIVATE_INCDIR += lib/uart # # DRIVERS Subsystem # DRIVERS := libdrivers.a libgluedriverslibc.a VPATH += drivers/$(CONFIG_XARCH) drivers PRIVATE_INCDIR += drivers/$(CONFIG_XARCH) drivers INTERFACES_DRIVERS := sa1100 mux_console console uart filter_console \ h3xxx io mem mmu reset processor delayloop io_IMPL := io io-arm mmu_IMPL := mmu mmu-arm mem_IMPL := mem mem-arm uart_IMPL := uart reset_IMPL := processor_IMPL := processor processor-arm CXXSRC_DRIVERS := glue_libc.cc NOOPT += $(patsubst %.o, %, $(OBJ_DRIVERS)) ALWAYS_INLINE += mem # # 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 panic.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 strspn.c \ strcspn.c tolower.c raise.c aeabi.c ASSRC_MINILIBC := setjmp.S NOOPT += $(patsubst %.o, %, $(OBJ_MINILIBC)) # # 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 # # JABI Subsystem # JABI := libjabi.a VPATH += jabi/$(CONFIG_XARCH) jabi INTERFACES_JABI := jdb_ktrace # # ABI Subsystem # ABI := libabi.a VPATH += abi/$(CONFIG_XARCH) abi INTERFACES_ABI := kip l4_types l4_fpage l4_msg_item \ l4_buf_desc l4_error l4_types_IMPL := l4_types l4_types-debug # x0!=32Bit UIDs kip_IMPL := kip kip-debug kip-arm # # KERNEL subsystem # KERNEL := fiasco KERNEL_EXTRA := Symbols VPATH += kern/$(CONFIG_XARCH) kern VPATH += jdb/arm jdb PRIVATE_INCDIR += kern/$(CONFIG_XARCH) kern INTERFACES_KERNEL += __main mem_op pagetable kmem_space boot_uart_init \ irq_chip_generic bootstrap kern_lib_page \ jdb_extensions outer_cache utcb_support PREPROCESS_PARTS += ulock INTERFACES_KERNEL += u_semaphore INTERFACES_KERNEL-$(CONFIG_SERIAL) += uart_console INTERFACES_KERNEL-$(CONFIG_ARM_TZ) += vm INTERFACES_KERNEL += $(INTERFACES_KERNEL-y) boot_info_IMPL := boot_info boot_info-arch bootstrap_IMPL := bootstrap clock_IMPL := clock config_IMPL := config config-arm context_IMPL := context context-arm context-vcpu continuation_IMPL := continuation-arm cpu_IMPL := cpu cpu-arm cpu_lock_IMPL := cpu_lock cpu_lock-generic entry_frame_IMPL := entry_frame entry_frame-arm \ entry_frame-abs-timeout-hack dirq_IMPL := dirq dirq-arm fpu_IMPL := fpu fpu-arm ipi_IMPL := ipi ipi-arm kdb_ke_IMPL := kdb_ke kdb_ke-arm kernel_task_IMPL := kernel_task kernel_task-arm kernel_thread_IMPL := kernel_thread kernel_thread-std kernel_thread-arm kernel_uart_IMPL := kernel_uart map_util_IMPL := map_util map_util-mem map_util-objs mapping_IMPL := mapping-arm mapping mem_layout_IMPL := mem_layout mem_layout-arm mem_layout-noncont mem_space_IMPL := mem_space mem_space-arm mem_space-user kmem_alloc_IMPL := kmem_alloc kmem_alloc-arm obj_space_IMPL := obj_space obj_space-$(OBJ_SPACE_TYPE) outer_cache_IMPL := outer_cache outer_cache-l2cxx0 pagetable_IMPL := pagetable pagetable-arch paging_IMPL := paging-arm paging perf_cnt_IMPL := perf_cnt perf_cnt-arm pic_IMPL := pic pic-arm sched_context_IMPL := sched_context-wfq sched_context-fixed_prio \ sched_context-fp_wfq sched_context space_IMPL := space space-arm spin_lock_IMPL := spin_lock spin_lock-arm startup_IMPL := startup startup-arm sys_call_page_IMPL := sys_call_page sys_call_page-arm task_IMPL := task task-arm thread_IMPL := thread thread-arm \ thread-jdb thread-ipc \ thread-pagefault thread-log \ thread-ulock thread-vcpu timer_IMPL := timer timer-arm utcb_support_IMPL := utcb_support utcb_support-arm vmem_alloc_IMPL := vmem_alloc vmem_alloc-arch tb_entry_IMPL := tb_entry tb_entry-arm ifeq ("$(CONFIG_JDB)","y") JDB := jdb_compound.o SUBSYSTEMS += JDB INTERFACES_JDB := jdb_handler_queue jdb_module jdb_pic \ jdb jdb_core jdb_prompt_ext jdb_list \ jdb_prompt_module jdb_exit_module jdb_kern_info \ jdb_tcb jdb_screen jdb_thread_list jdb_input \ jdb_symbol jdb_lines push_console \ jdb_timeout jdb_dump jdb_ptab \ jdb_attach_irq jdb_table \ jdb_kern_info_kmem_alloc \ jdb_kern_info_kip jdb_mapdb kern_cnt \ jdb_trace_set jdb_entry_frame \ jdb_kobject jdb_kobject_names \ jdb_util jdb_space jdb_utcb \ jdb_trap_state jdb_ipi jdb_rcupdate \ jdb_ipc_gate jdb_obj_space jdb_log jdb_factory \ jdb_semaphore jdb_thread jdb_scheduler jdb_sender_list\ jdb_perf jdb_vm jdb_regex jdb_disasm jdb_bp \ jdb_tbuf_output jdb_tbuf_show tb_entry_output INTERFACES_KERNEL += jdb_tbuf jdb_tbuf_init tb_entry jdb_trace jdb_IMPL := jdb jdb-arm jdb-ansi jdb-thread jdb_kern_info_IMPL := jdb_kern_info jdb_kern_info-arm \ jdb_kern_info-bench jdb_kern_info-bench-arm \ jdb_kern_info-cpu-arm jdb_dump_entry_frame_IMPL:= jdb_dump_entry_frame-arm jdb_tcb_IMPL := jdb_tcb jdb_tcb-arm jdb_ptab_IMPL := jdb_ptab jdb_ptab-ia32-ux-arm jdb_ptab-arm jdb_entry_frame_IMPL := jdb_entry_frame-arm jdb_trace_set_IMPL := jdb_trace_set jdb_trace_set-arm jdb_bp := jdb_bp thread_IMPL += thread-debug ifneq ($(CONFIG_JDB_GZIP),) ifneq ($(wildcard $(srcdir)/lib/gzip),) SUBSYSTEMS += LIBGZIP KERNEL_EXTRA_LIBS += $(LIBGZIP) INTERFACES_KERNEL += jdb_gzip endif endif INTERFACES_JDB += $(INTERFACES_JDB-y) endif CXXSRC_KERNEL := kernel_panic.cc libc_backend_lock.cc ASSRC_KERNEL := ivt.S $(if $(CONFIG_MP),tramp-mp.S) CPPFLAGS += $(if $(CONFIG_MP),-DMPCORE_PHYS_BASE=$(MPCORE_PHYS_BASE)) NOOPT += $(filter jdb%,\ $(foreach in,$(INTERFACES_KERNEL), \ $(if $($(in)_IMPL),$($(in)_IMPL),$(in)))) NOOPT += tb_entry tb_entry_output #INTERFACES_KERNEL = boot_info __main mapdb region \ # space_context space space_index space_index_util \ # stack kmem kmem_alloc slab_cache_anon kmem_slab_simple kmem_slab \ # switch_lock thread_lock helping_lock kernel_lock timer \ # thread_state sched context threadid thread_regs sender receiver \ # thread kernel_thread thread_util \ # map_util irq dirq virq console paranoia globals \ # checksum main config # # CRT0 subsystem # CRT0 := crt0.o ASSRC_CRT0 := crt0.S # # 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 profile uuencode gmon unistd panic auto_ptr INTERFACES_LIBK := std_macros atomic lock_guard auto_ptr dlist atomic_IMPL := atomic atomic-arm-up 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 arm-dis.c dis-init.c dis-buf.c safe-ctype.c NOOPT += $(patsubst %.o, %, $(OBJ_LIBDISASM)) endif # # VERSION subsystem # VERSION := version.h TCBOFFSET := tcboffset.h CXXSRC_TCBOFFSET := tcboffset.cc dump_tcboffsets.cc BSP_NAME := $(patsubst "%",%,$(CONFIG_BSP_NAME)) MODULES_FILE_BSP := $(srcdir)/kern/arm/bsp/$(BSP_NAME)/Modules ifeq ($(wildcard $(MODULES_FILE_BSP)),) $(error No BSP name defined or no BSP Modules file available) endif include $(MODULES_FILE_BSP) VPATH += kern/arm/bsp/$(BSP_NAME) kern/arm/bsp ifeq ("$(filter LIBUART, $(SUBSYSTEMS))","LIBUART") LIBUART := uart/libuart.a endif ifneq ($(CONFIG_MP),) ifeq ($(MPCORE_PHYS_BASE),) $(error $(MODULES_FILE_BSP) needs to set MPCORE_PHYS_BASE variable) endif endif MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP)