Sync/makefile

101 lines
2.7 KiB
Makefile
Raw Normal View History

DEFAULT_HOST:=i686-elf
2019-04-01 01:18:48 +00:00
HOST?=DEFAULT_HOST
HOSTARCH:=i386
CC:=$(PREFIX)/bin/$(DEFAULT_HOST)-gcc
2019-04-01 01:18:48 +00:00
CFLAGS?= -O0 -g -fno-pie -fno-stack-protector -Wl,--build-id=none
2019-04-01 01:18:48 +00:00
CPPFLAGS?=
LDFLAGS?=
LIBS?=
DESTDIR?=
PREFIX?=/usr/local
EXEC_PREFIX?=$(PREFIX)
BOOTDIR?=$(EXEC_PREFIX)/boot
INCLUDEDIR?=$(PREFIX)/include
2019-06-20 22:32:03 +00:00
CFLAGS:=$(CFLAGS) -ffreestanding -Wall -Wextra -I"../include" -I"../../include"
2019-04-01 01:18:48 +00:00
CPPFLAGS:=$(CPPFLAGS) -D__is_kernel -Iinclude
LDFLAGS:=$(LDFLAGS)
LIBS:=$(LIBS) -nostdlib -lgcc
2019-04-01 01:18:48 +00:00
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/utils.o \
kernel/serial.o \
kernel/interrupts.o \
kernel/descriptor_tables.o \
kernel/kernel.o
2019-04-01 01:18:48 +00:00
OBJS=\
2019-06-20 22:32:03 +00:00
$(KERNEL_OBJS)
2019-04-01 01:18:48 +00:00
LINK_LIST=\
$(LDFLAGS) \
$(KERNEL_OBJS) \
$(LIBS) \
2019-04-01 01:18:48 +00:00
.PHONY: all clean install install-headers install-kernel
.SUFFIXES: .o .c .s
all: BOOTX64.EFI
2019-04-01 01:18:48 +00:00
red.kernel: $(OBJS) $(ARCHDIR)/linker.ld
$(CC) -T $(ARCHDIR)/linker.ld -o $@ $(CFLAGS) $(LINK_LIST)
kernel/interrupts.o:
$(CC) -MD -c kernel/interrupts.c -o $@ -std=gnu11 $(CFLAGS) -mno-red-zone -mgeneral-regs-only $(CPPFLAGS)
2019-04-01 01:18:48 +00:00
.c.o:
$(CC) -MD -c $< -o $@ -std=gnu11 $(CFLAGS) $(CPPFLAGS)
2019-04-01 01:18:48 +00:00
.s.o:
2019-06-20 22:32:03 +00:00
nasm -f elf $< -o $@
2019-04-01 01:18:48 +00:00
clean:
rm -f red.kernel
rm -f $(OBJS) *.o */*.o */*/*.o
2019-04-01 01:18:48 +00:00
rm -f $(OBJS:.o=.d) *.d */*.d */*/*.d
install: install-headers install-kernel gen-iso
install-headers:
mkdir -p $(DESTDIR)$(INCLUDEDIR)
cp -R --preserve=timestamps include/. $(DESTDIR)$(INCLUDEDIR)/.
install-kernel: red.kernel
mkdir -p $(DESTDIR)$(BOOTDIR)
cp red.kernel $(DESTDIR)$(BOOTDIR)
gen-iso:
rm -f red.iso
cp red.kernel iso/boot/kernel.elf
genisoimage -R \
-b boot/grub/stage2_eltorito \
-no-emul-boot \
-A ProjectRED \
-input-charset utf8 \
-quiet \
-boot-info-table \
-o red.iso \
2019-04-01 01:18:48 +00:00
iso
BOOTX64.EFI: arch/uefi/entry.o efi/lib/data.o
$(EFI-CC) -nostdlib -Wl,-dll -shared -Wl,--subsystem,10 -e efi_main -o BOOTX64.EFI arch/uefi/entry.o data.o -lgcc
arch/uefi/entry.o:
$(EFI-CC) -ffreestanding -Iinclude/efi/ -Iinclude/efi/x86_64 -Iinclude/efi/protocol -c -o arch/uefi/entry.o arch/uefi/entry.c
efi/lib/data.o:
$(EFI-CC) -ffreestanding -Iinclude/efi/ -Iinclude/efi/x86_64 -Iinclude/efi/protocol -c -o data.o efi/lib/data.c
2019-04-01 01:18:48 +00:00
-include $(OBJS:.o=.d)