Made cleaner Makefile (now not need to fix it on every new file)
This commit is contained in:
parent
b4b30fbac6
commit
43d9165486
98
src/Makefile
98
src/Makefile
|
@ -1,66 +1,78 @@
|
|||
CC= i686-elf-gcc
|
||||
ASMFILES = arch/i386/boot.asm
|
||||
CFILES = kernel.c vga.c
|
||||
ARCH=i386
|
||||
CC=i686-elf-gcc
|
||||
|
||||
BUILDDIR=build
|
||||
|
||||
ASMFILES=$(wildcard arch/$(ARCH)/*.asm)
|
||||
ASMOBJS=$(patsubst %.asm, $(BUILDDIR)/%.o, $(ASMFILES))
|
||||
|
||||
CFILES=$(wildcard *.c)
|
||||
COBJS=$(patsubst %.c, $(BUILDDIR)/%.o, $(CFILES))
|
||||
|
||||
LIBKFILES=$(wildcard libk/*.c)
|
||||
LIBKOBJS=$(patsubst %.c, $(BUILDDIR)/%.o, $(LIBKFILES))
|
||||
|
||||
INCLUDEFLAGS=-Iinclude -Ilibk/include
|
||||
DEBUGFLAGS=
|
||||
CFLAGS=-std=c99 -ffreestanding -fstack-protector-all $(INCLUDEFLAGS) $(DEBUGFLAGS) -Wall -Wextra
|
||||
|
||||
CRTI_OBJ = build/crti.o
|
||||
CRTI_OBJ = $(BUILDDIR)/arch/$(ARCH)/crti.o
|
||||
CRTBEGIN_OBJ:=$(shell $(CC) $(CFLAGS) -print-file-name=crtbegin.o)
|
||||
CRTEND_OBJ:=$(shell $(CC) $(CFLAGS) -print-file-name=crtend.o)
|
||||
CRTN_OBJ = build/crtn.o
|
||||
|
||||
LIBKOBJFILES = build/libk/string.o build/libk/stdio.o build/libk/stdlib.o build/libk/stack_protector.o build/libk/asm.o
|
||||
CRTN_OBJ = $(BUILDDIR)/arch/$(ARCH)/crtn.o
|
||||
|
||||
OBJFILES = \
|
||||
$(CRTI_OBJ) \
|
||||
$(CRTBEGIN_OBJ) \
|
||||
build/boot.o \
|
||||
$(LIBKOBJFILES) \
|
||||
build/early_kernel.o \
|
||||
build/kernel.o \
|
||||
build/vga.o \
|
||||
build/idt.o \
|
||||
build/paging.o \
|
||||
$(CRTEND_OBJ) $(CRTN_OBJ)
|
||||
$(BUILDDIR)/arch/$(ARCH)/boot.o \
|
||||
$(LIBKOBJS) \
|
||||
$(COBJS) \
|
||||
$(CRTEND_OBJ) \
|
||||
$(CRTN_OBJ)
|
||||
|
||||
KERNELFILE = build/orion.bin
|
||||
DIRS = $(BUILDDIR)/arch/$(ARCH) $(BUILDDIR)/libk
|
||||
KERNELFILE = $(BUILDDIR)/orion.bin
|
||||
ISOFILE = $(BUILDDIR)/orion.iso
|
||||
|
||||
all:
|
||||
mkdir -p build
|
||||
.PHONY: all makedirs build link run run-grub clean
|
||||
|
||||
all: makedirs build link
|
||||
|
||||
makedirs $(DIRS):
|
||||
mkdir -p build/arch/$(ARCH)
|
||||
mkdir -p build/libk
|
||||
i686-elf-gcc -c libk/string.c -o build/libk/string.o $(CFLAGS)
|
||||
i686-elf-gcc -c libk/stdio.c -o build/libk/stdio.o $(CFLAGS)
|
||||
i686-elf-gcc -c libk/stdlib.c -o build/libk/stdlib.o $(CFLAGS)
|
||||
i686-elf-gcc -c libk/stack_protector.c -o build/libk/stack_protector.o $(CFLAGS)
|
||||
i686-elf-gcc -c libk/asm.c -o build/libk/asm.o $(CFLAGS)
|
||||
|
||||
nasm arch/i386/boot.asm -f elf32 -o build/boot.o
|
||||
nasm arch/i386/crti.asm -f elf32 -o build/crti.o
|
||||
nasm arch/i386/crtn.asm -f elf32 -o build/crtn.o
|
||||
|
||||
i686-elf-gcc -c vga.c -o build/vga.o $(CFLAGS)
|
||||
i686-elf-gcc -c idt.c -o build/idt.o $(CFLAGS)
|
||||
i686-elf-gcc -c paging.c -o build/paging.o $(CFLAGS)
|
||||
i686-elf-gcc -c kernel.c -o build/kernel.o $(CFLAGS)
|
||||
i686-elf-gcc -c early_kernel.c -o build/early_kernel.o $(CFLAGS)
|
||||
build: $(ASMOBJS) $(COBJS) $(LIBKOBJS)
|
||||
|
||||
link:
|
||||
$(CC) -T linker.ld -o $(KERNELFILE) $(CFLAGS) -nostdlib $(OBJFILES) -lgcc
|
||||
|
||||
$(BUILDDIR)/%.o: %.asm
|
||||
nasm -f elf32 $< -o $@
|
||||
|
||||
$(BUILDDIR)/%.o: %.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS) -lgcc
|
||||
|
||||
$(BUILDDIR)/%.o: libk/%.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS) -lgcc
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)/*
|
||||
|
||||
i686-elf-gcc -T linker.ld -o $(KERNELFILE) $(CFLAGS) -nostdlib $(OBJFILES) -lgcc
|
||||
run:
|
||||
qemu-system-i386 -kernel $(KERNELFILE) -serial stdio -S -s
|
||||
qemu-system-$(ARCH) -kernel $(KERNELFILE) -serial stdio -S -s
|
||||
|
||||
run-grub:
|
||||
mkdir -p build/isodir
|
||||
mkdir -p build/isodir/boot
|
||||
mkdir -p build/isodir/boot/grub
|
||||
mkdir -p $(BUILDDIR)/isodir
|
||||
mkdir -p $(BUILDDIR)/isodir/boot
|
||||
mkdir -p $(BUILDDIR)/isodir/boot/grub
|
||||
|
||||
cp build/orion.bin build/isodir/boot/orion.kernel
|
||||
cp $(KERNELFILE) $(BUILDDIR)/isodir/boot/orion.kernel
|
||||
|
||||
echo 'menuentry "orion" { ' > build/isodir/boot/grub/grub.cfg
|
||||
echo ' multiboot /boot/orion.kernel' >> build/isodir/boot/grub/grub.cfg
|
||||
echo '}' >> build/isodir/boot/grub/grub.cfg
|
||||
echo 'menuentry "orion" { ' > $(BUILDDIR)/isodir/boot/grub/grub.cfg
|
||||
echo ' multiboot /boot/orion.kernel' >> $(BUILDDIR)/isodir/boot/grub/grub.cfg
|
||||
echo '}' >> $(BUILDDIR)/isodir/boot/grub/grub.cfg
|
||||
|
||||
grub-mkrescue -o build/orion.iso build/isodir
|
||||
qemu-system-i386 -cdrom build/orion.iso -serial stdio -S -s
|
||||
grub-mkrescue -o $(ISOFILE) $(BUILDDIR)/isodir
|
||||
qemu-system-$(ARCH) -cdrom $(BUILDDIR)/orion.iso -serial stdio -S -s
|
||||
|
||||
|
|
Loading…
Reference in New Issue