From aa9836f2092df9064c5e88bc4a492068eba852ea Mon Sep 17 00:00:00 2001 From: Gitea Date: Tue, 1 Dec 2020 21:01:03 -0600 Subject: [PATCH] Makefile for kernel --- makefile | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 makefile diff --git a/makefile b/makefile new file mode 100755 index 0000000..c08bac2 --- /dev/null +++ b/makefile @@ -0,0 +1,69 @@ +DEFAULT_HOST!=../default-host.sh +HOST?=DEFAULT_HOST +HOSTARCH!=../target-triplet-to-arch.sh $(HOST) + +CFLAGS?=-O2 -g +CPPFLAGS?= +LDFLAGS?= +LIBS?= + +DESTDIR?= +PREFIX?=/usr/local +EXEC_PREFIX?=$(PREFIX) +BOOTDIR?=$(EXEC_PREFIX)/boot +INCLUDEDIR?=$(PREFIX)/include + +CFLAGS:=$(CFLAGS) -ffreestanding -Wall -Wextra +CPPFLAGS:=$(CPPFLAGS) -D__is_kernel -Iinclude +LDFLAGS:=$(LDFLAGS) +LIBS:=$(LIBS) -nostdlib -lk -lgcc + +ARCHDIR=arch/$(HOSTARCH) + +include $(ARCHDIR)/make.config + +CFLAGS:=$(CFLAGS) $(KERNEL_ARCH_CFLAGS) +CPPFLAGS:=$(CPPFLAGS) $(KERNEL_ARCH_CPPFLAGS) +LDFLAGS:=$(LDFLAGS) $(KERNEL_ARCH_LDFLAGS) +LIBS:=$(LIBS) $(KERNEL_ARCH_LIBS) + +KERNEL_OBJS=$(KERNEL_ARCH_OBJS) kernel/kernel.o + +OBJS=$(ARCHDIR)/crti.o $(ARCHDIR)/crtbegin.o $(KERNEL_OBJS) $(ARCHDIR)/crtend.o $(ARCHDIR)/crtn.o + +LINK_LIST=$(LDFLAGS) $(ARCHDIR)/crti.o $(ARCHDIR)/crtbegin.o $(KERNEL_OBJS) $(LIBS) $(ARCHDIR)/crtend.o $(ARCHDIR)/crtn.o + +.PHONY: all clean install install-headers install-kernel +.SUFFIXES: .o .c .S + +all: fenix.kernel + +fenix.kernel: $(OBJS) $(ARCHDIR)/linker.ld + $(CC) -T $(ARCHDIR)/linker.ld -o $@ $(CFLAGS) $(LINK_LIST) + #grub-file --is-x86-multiboot fenix.kernel + +$(ARCHDIR)/crtbegin.o $(ARCHDIR)/crtend.o: + OBJ=`$(CC) $(CFLAGS) $(LDFLAGS) -print-file-name=$(@F)` && cp "$$OBJ" $@ + +.c.o: + $(CC) -MD -c $< -o $@ -std=c99 $(CFLAGS) $(CPPFLAGS) + +.S.o: + $(CC) -MD -c $< -o $@ $(CFLAGS) $(CPPFLAGS) + +clean: + rm -f fenix.kernel + rm -f $(OBJS) *.o */*.o */*/*.o + rm -f $(OBJS:.o=.d) *.d */*.d */*/*.d + +install: install-headers install-kernel + +install-headers: + mkdir -p $(DESTDIR)$(INCLUDEDIR) + cp -R include/. $(DESTDIR)$(INCLUDEDIR)/. + +install-kernel: fenix.kernel + mkdir -p $(DESTDIR)$(BOOTDIR) + cp fenix.kernel $(DESTDIR)$(BOOTDIR) + +-include $(OBJS:.o=.d)