2022-11-12 21:04:47 +02:00
|
|
|
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
|
|
|
|
|
2022-12-03 18:15:10 +02:00
|
|
|
CFLAGS:=$(CFLAGS) -D__is_kernel -Iinclude -fstack-protector -ffreestanding -Wall -Wextra -Wno-unused-function
|
2022-12-07 02:41:18 +02:00
|
|
|
CPPFLAGS:=$(CPPFLAGS) -fno-rtti -fno-exceptions
|
2022-11-12 21:04:47 +02:00
|
|
|
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)
|
2022-12-03 18:15:10 +02:00
|
|
|
|
|
|
|
BUILDDIR=$(abspath build)
|
2022-11-12 21:04:47 +02:00
|
|
|
|
2022-12-13 00:59:53 +02:00
|
|
|
KERNEL_OBJS= \
|
|
|
|
$(KERNEL_ARCH_OBJS) \
|
|
|
|
kernel/kernel.o \
|
|
|
|
kernel/Keyboard.o \
|
|
|
|
kernel/kmalloc.o \
|
|
|
|
kernel/PIC.o \
|
|
|
|
kernel/PIT.o \
|
|
|
|
kernel/Serial.o \
|
|
|
|
kernel/SSP.o \
|
|
|
|
icxxabi.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 \
|
2022-11-12 21:04:47 +02:00
|
|
|
|
2022-12-03 18:15:10 +02:00
|
|
|
.PHONY: all always clean install install-headers install-kernel
|
2022-11-14 00:27:11 +02:00
|
|
|
.SUFFIXES: .o .cpp .S
|
2022-11-12 21:04:47 +02:00
|
|
|
|
|
|
|
all: banan-os.kernel
|
|
|
|
|
2022-12-03 18:15:10 +02:00
|
|
|
banan-os.kernel: always $(OBJS) $(ARCHDIR)/linker.ld
|
2022-12-07 02:41:18 +02:00
|
|
|
cd $(BUILDDIR) && $(CXX) -T ../$(ARCHDIR)/linker.ld -o banan-os.kernel $(CFLAGS) $(CPPFLAGS) $(LINK_LIST)
|
2022-12-03 18:15:10 +02:00
|
|
|
cd $(BUILDDIR) && grub-file --is-x86-multiboot banan-os.kernel
|
2022-11-12 21:04:47 +02:00
|
|
|
|
|
|
|
$(ARCHDIR)/crtbegin.o $(ARCHDIR)/crtend.o:
|
2022-12-03 18:15:10 +02:00
|
|
|
OBJ=`$(CC) $(CFLAGS) $(LDFLAGS) -print-file-name=$(@F)` && cp "$$OBJ" $(BUILDDIR)/$@
|
2022-12-07 02:41:18 +02:00
|
|
|
|
2022-11-12 21:30:26 +02:00
|
|
|
.cpp.o:
|
2022-12-03 18:15:10 +02:00
|
|
|
$(CXX) -MD -c $< -o $(BUILDDIR)/$@ $(CFLAGS) $(CPPFLAGS)
|
2022-11-12 21:30:26 +02:00
|
|
|
|
2022-11-12 21:04:47 +02:00
|
|
|
.S.o:
|
2022-12-03 18:15:10 +02:00
|
|
|
$(CC) -MD -c $< -o $(BUILDDIR)/$@ $(CFLAGS)
|
2022-11-12 21:04:47 +02:00
|
|
|
|
2022-12-03 18:15:10 +02:00
|
|
|
always:
|
|
|
|
mkdir -p $(BUILDDIR)/arch/i386
|
|
|
|
mkdir -p $(BUILDDIR)/kernel
|
|
|
|
|
2022-11-12 21:04:47 +02:00
|
|
|
clean:
|
2022-12-03 18:15:10 +02:00
|
|
|
rm -rf $(BUILDDIR)
|
|
|
|
|
2022-11-12 21:04:47 +02:00
|
|
|
install: install-headers install-kernel
|
|
|
|
|
|
|
|
install-headers:
|
|
|
|
mkdir -p $(DESTDIR)$(INCLUDEDIR)
|
|
|
|
cp -R --preserve=timestamps include/. $(DESTDIR)$(INCLUDEDIR)/.
|
|
|
|
|
|
|
|
install-kernel: banan-os.kernel
|
|
|
|
mkdir -p $(DESTDIR)$(BOOTDIR)
|
2022-12-03 18:15:10 +02:00
|
|
|
cp $(BUILDDIR)/banan-os.kernel $(DESTDIR)$(BOOTDIR)
|
2022-11-12 21:04:47 +02:00
|
|
|
|
|
|
|
-include $(OBJS:.o=.d)
|