summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile24
1 files changed, 20 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index 8ea760b..ad38c9a 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,7 @@ VERSION = 0.1.0-alpha
CC = clang
LD = ld.lld
+NM = llvm-nm
OBJCOPY = llvm-objcopy
COMPILER = $(shell $(CC) --version | head -n 1)
@@ -99,20 +100,27 @@ KERNEL_OBJS = $(KERNEL_SRCS:.c=.o)
KERNEL_OBJS := $(KERNEL_OBJS:.S=.o)
KERNEL_BIN := $(KERNEL_TARGET)/kernel.bin
KERNEL_ELF := $(KERNEL_TARGET)/kernel.elf
+KERNEL_IMAGE := $(KERNEL_TARGET)/Image
+
+KASSEMBLE_BIN := misc/kassemble
+KASSEMBLE_SRC := misc/kassemble.c
GENERATED = \
$(KERNEL_OBJS) \
$(KERNEL_ELF) \
$(KERNEL_BIN) \
+ $(KERNEL_IMAGE) \
$(foreach m,$(MODULES),$(m)/$(m).elf) \
$(foreach m,$(MODULES),$(m)/$(m).ko) \
- $(foreach m,$(MODULES),$($(m)_OBJS))
+ $(foreach m,$(MODULES),$($(m)_OBJS)) \
+ $(KASSEMBLE_BIN)
-.PHONY: all kernel clean modules $(MODULES)
+.PHONY: all kernel kassemble clean modules $(MODULES)
$(V).SILENT:
-all: kernel modules
-kernel: $(KERNEL_BIN)
+all: kassemble kernel modules
+kernel: $(KERNEL_IMAGE)
modules: $(MODULES)
+kassemble: $(KASSEMBLE_BIN)
$(MODULES): $(MODULE_OBJECTS)
%.o: %.c
@@ -122,6 +130,10 @@ $(MODULES): $(MODULE_OBJECTS)
@echo " AS $<"
$(CC) $(KERNEL_CFLAGS) -c $< -o $@
+$(KASSEMBLE_BIN): $(KASSEMBLE_SRC)
+ @echo " HOSTCC $<"
+ $(CC) -O2 $< -o $@
+
$(KERNEL_ELF): $(KERNEL_OBJS) $(KERNEL_LD) | $(KERNEL_OUTDIR)/
@echo " LD $@"
$(LD) $(KERNEL_LD_FLAG) $(KERNEL_OBJS) -o $@
@@ -130,6 +142,10 @@ $(KERNEL_BIN): $(KERNEL_ELF) | $(KERNEL_OUTDIR)/
@echo " OBJCOPY $@"
$(OBJCOPY) $(KERNEL_OBJCOPY_FLAG) $(KERNEL_ELF) $(KERNEL_BIN)
+$(KERNEL_IMAGE): $(KERNEL_BIN) | $(KERNEL_OUTDIR)/
+ @echo " KASSEMBLE $@"
+ $(KASSEMBLE_BIN) $< $@ $$($(NM) $(KERNEL_ELF) | awk '/__image_size/{print $$1}')
+
clean:
@echo " CLEAN $(GENERATED)"
$(RM) $(GENERATED)