Lock depth checking allows panicy prints
[akaros.git] / kern / src / Makefrag
index 30f7a08..76d9b1e 100644 (file)
@@ -6,6 +6,11 @@
 
 KERN_SRC_DIR = $(KERN_DIR)/src
 OBJDIRS += $(KERN_SRC_DIR)
+KERN_CPIO = initramfs.cpio
+KERN_CPIO_OBJ = $(KERN_CPIO).o
+ifneq ($(EXT2_BDEV),)
+EXT2_BDEV_OBJ_FULL = $(OBJDIR)/$(KERN_DIR)/$(shell basename $(EXT2_BDEV)).o
+endif
 
 # entry.S must be first, so that it's the first code in the text segment!!!
 #
@@ -15,37 +20,53 @@ KERN_SRCFILES := $(KERN_ARCH_SRCFILES) \
                  $(KERN_SRC_DIR)/init.c \
                  $(KERN_SRC_DIR)/monitor.c \
                  $(KERN_SRC_DIR)/printf.c \
+                 $(KERN_SRC_DIR)/sched.c \
                  $(KERN_SRC_DIR)/printfmt.c \
                  $(KERN_SRC_DIR)/smp.c \
                  $(KERN_SRC_DIR)/multiboot.c \
                  $(KERN_SRC_DIR)/readline.c \
                  $(KERN_SRC_DIR)/string.c \
                  $(KERN_SRC_DIR)/atomic.c \
-                 $(KERN_SRC_DIR)/workqueue.c \
+                 $(KERN_SRC_DIR)/colored_caches.c \
+                 $(KERN_SRC_DIR)/page_alloc.c \
                  $(KERN_SRC_DIR)/pmap.c \
                  $(KERN_SRC_DIR)/env.c \
                  $(KERN_SRC_DIR)/manager.c \
                  $(KERN_SRC_DIR)/syscall.c \
-                 $(KERN_SRC_DIR)/timer.c \
+                 $(KERN_SRC_DIR)/time.c \
+                 $(KERN_SRC_DIR)/kfs.c \
+                 $(KERN_SRC_DIR)/process.c \
                  $(KERN_SRC_DIR)/kmalloc.c \
-                 $(KERN_SRC_DIR)/testing.c
+                 $(KERN_SRC_DIR)/hashtable.c \
+                 $(KERN_SRC_DIR)/schedule.c \
+                 $(KERN_SRC_DIR)/mm.c \
+                 $(KERN_SRC_DIR)/slab.c \
+                 $(KERN_SRC_DIR)/elf.c \
+                 $(KERN_SRC_DIR)/frontend.c \
+                 $(KERN_SRC_DIR)/vfs.c \
+                 $(KERN_SRC_DIR)/radix.c \
+                 $(KERN_SRC_DIR)/umem.c \
+                 $(KERN_SRC_DIR)/devfs.c \
+                 $(KERN_SRC_DIR)/blockdev.c \
+                 $(KERN_SRC_DIR)/ext2fs.c \
+                 $(KERN_SRC_DIR)/testing.c \
+                 $(KERN_SRC_DIR)/pagemap.c \
+                 $(KERN_SRC_DIR)/kthread.c \
+                 $(KERN_SRC_DIR)/eth_audio.c \
+                 $(KERN_SRC_DIR)/net.c \
+                 $(KERN_SRC_DIR)/event.c \
+                 $(KERN_SRC_DIR)/alarm.c \
+                 $(KERN_SRC_DIR)/kdebug.c \
+                 $(KERN_SRC_DIR)/ucq.c \
+                 $(KERN_SRC_DIR)/console.c \
+                 $(KERN_SRC_DIR)/trap.c \
+                 $(KERN_SRC_DIR)/arsc.c
 
 # Only build files if they exist.
 KERN_SRCFILES := $(wildcard $(KERN_SRCFILES))
 
-KERN_APPFILES := \
-                    $(USER_APPS_ROSLIB_DIR)/proctests \
-                    $(USER_APPS_ROSLIB_DIR)/fptest \
-                    $(USER_APPS_ROSLIB_DIR)/null \
-                    $(USER_APPS_ROSLIB_DIR)/hello \
-                    $(USER_APPS_ROSLIB_DIR)/measurements \
-#                    $(USER_APPS_PARLIB_DIR)/matrix \
-#                    $(USER_APPS_PARLIB_DIR)/draw_nanwan \
-#                    $(USER_APPS_PARLIB_DIR)/open_read \
-#                    $(USER_APPS_PARLIB_DIR)/hello
-
 KERN_LDFLAGS   := $(KERN_LDFLAGS) -L$(OBJDIR)/$(KERN_DIR) \
-                  -T $(ARCH_DIR)/$(TARGET_ARCH)/kernel.ld
+                  -T $(KERN_ARCH_SRC_DIR)/kernel.ld
 
 KERN_OBJFILES  := $(patsubst $(KERN_DIR)/%.c, \
                              $(OBJDIR)/$(KERN_DIR)/%.o, \
@@ -54,14 +75,37 @@ KERN_OBJFILES  := $(patsubst $(KERN_DIR)/%.S, \
                              $(OBJDIR)/$(KERN_DIR)/%.o, \
                              $(KERN_OBJFILES))
 
-KERN_APPFILES  := $(patsubst %, $(OBJDIR)/%, $(KERN_APPFILES))
-
-KERN_LDDEPENDS := $(KERN_OBJFILES) $(KERN_APPFILES) $(ARCH_DIR)/$(TARGET_ARCH)/kernel.ld \
-                  $(OBJDIR)/$(KERN_DIR)/libivykern.a
+KERN_LDDEPENDS := $(KERN_OBJFILES) $(ARCH_DIR)/$(TARGET_ARCH)/kernel.ld \
+                  $(OBJDIR)/$(KERN_DIR)/libivykern.a \
+                  $(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO_OBJ) \
+                  $(EXT2_BDEV_OBJ_FULL)
 
 KERN_LDLIBS    := -livykern
 
-KERN_GCC_LIB   := $(GCC_LIB)
+KERN_GCC_LIB   ?= $(GCC_LIB)
+
+KERN_INITRAMFS_FILES := $(shell mkdir -p $(INITRAMFS_PATHS); find $(INITRAMFS_PATHS))
+
+$(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO) initramfs: $(KERN_INITRAMFS_FILES)
+       @echo Building initramfs:
+       @if [ "$(INITRAMFS_BIN)" != "" ]; then \
+        sh $(INITRAMFS_BIN); \
+    fi
+       $(V)for i in $(INITRAMFS_PATHS); do cd $$i; \
+        echo Adding $$i to initramfs...; \
+        find -L . | cpio --quiet -oH newc > \
+             $(TOP_DIR)/$(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO); \
+        cd $$OLDPWD; \
+    done;
+
+LD_EMULATION := $(shell $(OBJDUMP) -i | grep -v BFD | grep ^[a-z] | head -n1)
+LD_ARCH := $(shell $(OBJDUMP) -i | grep -v BFD | grep "^  [a-z]" | head -n1)
+
+$(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO_OBJ): $(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO)
+       $(V)$(OBJCOPY) -I binary -B $(LD_ARCH) -O $(LD_EMULATION) $^ $@
+
+$(EXT2_BDEV_OBJ_FULL): $(EXT2_BDEV)
+       $(V)$(OBJCOPY) -I binary -B $(LD_ARCH) -O $(LD_EMULATION) $^ $@
 
 $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_DIR)/%.c
        @echo + cc [KERN] $<
@@ -71,21 +115,15 @@ $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_DIR)/%.c
 $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_DIR)/%.S
        @echo + as [KERN] $<
        @mkdir -p $(@D)
-       $(V)$(CC) $(KERN_CFLAGS) -c -o $@ $<
+       $(V)$(CC) $(KERN_CFLAGS) -D__ASSEMBLER__ -c -o $@ $<
 
 $(OBJDIR)/$(KERN_DIR)/kernel: $(KERN_LDDEPENDS)
        @echo + ld [KERN] $@
        $(V)$(LD) -o $@ $(KERN_LDFLAGS) $(KERN_OBJFILES) $(KERN_LDLIBS) \
-                       $(KERN_GCC_LIB) -b binary $(KERN_APPFILES)
+                       $(KERN_GCC_LIB) $(OBJDIR)/$(KERN_DIR)/$(KERN_CPIO_OBJ) \
+                       $(EXT2_BDEV_OBJ_FULL)
        $(V)$(OBJDUMP) -S $@ > $@.asm
        $(V)$(NM) -n $@ > $@.sym
 
-#$(OBJDIR)/$(KERN_DIR)/bochs.img: $(OBJDIR)/$(KERN_DIR)/kernel $(OBJDIR)/$(KERN_DIR)/boot
-#      @echo + mk [KERN] $@
-#      $(V)dd if=/dev/zero of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ count=10080 2>/dev/null
-#      $(V)dd if=$(OBJDIR)/$(KERN_DIR)/boot of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ conv=notrunc 2>/dev/null
-#      $(V)dd if=$(OBJDIR)/$(KERN_DIR)/kernel of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ seek=1 conv=notrunc 2>/dev/null
-#      $(V)mv $(OBJDIR)/kern/bochs.img~ $(OBJDIR)/kern/bochs.img
-
 all: $(OBJDIR)/$(KERN_DIR)/kernel