Makefile: added sysroot and improved other parts

Sysroot maybe needed in future when we will need to use other
software
This commit is contained in:
g1n 2022-02-11 18:15:51 +02:00
parent edf0613390
commit 45fc49d08c
Signed by: g1n
GPG Key ID: 8D352193D65D4E2C
2 changed files with 44 additions and 22 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
*~ *~
src/build src/build
src/sysroot
src/isodir

View File

@ -2,6 +2,11 @@ ARCH=i386
CC=i686-elf-gcc CC=i686-elf-gcc
BUILDDIR=build BUILDDIR=build
ISODIR=isodir
ORION_SYSROOT?=sysroot
DESTDIR?=$(ORION_SYSROOT)
BOOTDIR=/boot
INCLUDEDIR=/usr/local/include
ASMFILES=$(wildcard arch/$(ARCH)/*.asm) ASMFILES=$(wildcard arch/$(ARCH)/*.asm)
ASMOBJS=$(patsubst %.asm, $(BUILDDIR)/%.o, $(ASMFILES)) ASMOBJS=$(patsubst %.asm, $(BUILDDIR)/%.o, $(ASMFILES))
@ -12,8 +17,9 @@ COBJS=$(patsubst %.c, $(BUILDDIR)/%.o, $(CFILES))
LIBKFILES=$(wildcard libk/*.c) LIBKFILES=$(wildcard libk/*.c)
LIBKOBJS=$(patsubst %.c, $(BUILDDIR)/%.o, $(LIBKFILES)) LIBKOBJS=$(patsubst %.c, $(BUILDDIR)/%.o, $(LIBKFILES))
INCLUDEFLAGS=-Iinclude -Ilibk/include INCLUDEFLAGS?=
DEBUGFLAGS= INCLUDEFLAGS:=-Iinclude -Ilibk/include
DEBUGFLAGS?=
CFLAGS=-std=c99 -ffreestanding -fstack-protector-all $(INCLUDEFLAGS) $(DEBUGFLAGS) -Wall -Wextra CFLAGS=-std=c99 -ffreestanding -fstack-protector-all $(INCLUDEFLAGS) $(DEBUGFLAGS) -Wall -Wextra
CRTI_OBJ = $(BUILDDIR)/arch/$(ARCH)/crti.o CRTI_OBJ = $(BUILDDIR)/arch/$(ARCH)/crti.o
@ -31,20 +37,21 @@ $(CRTEND_OBJ) \
$(CRTN_OBJ) $(CRTN_OBJ)
DIRS = $(BUILDDIR)/arch/$(ARCH) $(BUILDDIR)/libk DIRS = $(BUILDDIR)/arch/$(ARCH) $(BUILDDIR)/libk
KERNELFILE = $(BUILDDIR)/orion.bin KERNELFILE =orion-$(ARCH).bin
ISOFILE = $(BUILDDIR)/orion.iso ISOFILE =orion-$(ARCH).iso
.PHONY: all clean run run-grub .PHONY: all clean iso install install-headers run run-grub
.SUFFIXES: .o .c .asm .SUFFIXES: .o .c .asm
all: $(DIRS) $(ASMOBJS) $(COBJS) $(LIBKOBJS) $(KERNELFILE) all: $(DIRS) $(ASMOBJS) $(COBJS) $(LIBKOBJS) $(BUILDDIR)/$(KERNELFILE)
$(DIRS): $(DIRS):
mkdir -p $(BUILDDIR)
mkdir -p $(BUILDDIR)/arch/$(ARCH) mkdir -p $(BUILDDIR)/arch/$(ARCH)
mkdir -p $(BUILDDIR)/libk mkdir -p $(BUILDDIR)/libk
$(KERNELFILE): $(BUILDDIR)/$(KERNELFILE): $(OBJFILES)
$(CC) -T linker.ld -o $(KERNELFILE) $(CFLAGS) -nostdlib $(OBJFILES) -lgcc $(CC) -T linker.ld -o $@ $(CFLAGS) $(OBJFILES) -nostdlib -lgcc
$(BUILDDIR)/%.o: %.asm $(BUILDDIR)/%.o: %.asm
nasm -f elf32 $< -o $@ nasm -f elf32 $< -o $@
@ -55,27 +62,40 @@ $(BUILDDIR)/%.o: %.c
$(BUILDDIR)/%.o: libk/%.c $(BUILDDIR)/%.o: libk/%.c
$(CC) -c $< -o $@ $(CFLAGS) -lgcc $(CC) -c $< -o $@ $(CFLAGS) -lgcc
install: all install-headers install-kernel
install-headers:
mkdir -p $(DESTDIR)$(INCLUDEDIR)
cp -R --preserve=timestamps include/. $(DESTDIR)$(INCLUDEDIR)/.
cp -R --preserve=timestamps libk/include/. $(DESTDIR)$(INCLUDEDIR)/.
install-kernel: $(BUILDDIR)/$(KERNELFILE)
mkdir -p $(DESTDIR)$(BOOTDIR)
cp $(BUILDDIR)/$(KERNELFILE) $(DESTDIR)$(BOOTDIR)
clean: clean:
rm -rf $(BUILDDIR)/* rm -rf $(BUILDDIR)
rm -rf $(ISODIR)
rm -rf $(DESTDIR)
run: run: install
qemu-system-$(ARCH) -kernel $(KERNELFILE) -serial stdio -S -s qemu-system-$(ARCH) -kernel $(BUILDDIR)/$(KERNELFILE) -serial stdio -S -s
$(ISOFILE): $(KERNELFILE) $(BUILDDIR)/$(ISOFILE): install
mkdir -p $(BUILDDIR)/isodir mkdir -p $(ISODIR)
mkdir -p $(BUILDDIR)/isodir/boot mkdir -p $(ISODIR)/boot
mkdir -p $(BUILDDIR)/isodir/boot/grub mkdir -p $(ISODIR)/boot/grub
cp $(KERNELFILE) $(BUILDDIR)/isodir/boot/orion.kernel cp $(DESTDIR)$(BOOTDIR)/$(KERNELFILE) $(ISODIR)/boot/$(KERNELFILE)
echo 'menuentry "orion" { ' > $(BUILDDIR)/isodir/boot/grub/grub.cfg echo 'menuentry "orion" { ' > $(ISODIR)/boot/grub/grub.cfg
echo ' multiboot /boot/orion.kernel' >> $(BUILDDIR)/isodir/boot/grub/grub.cfg echo ' multiboot /boot/$(KERNELFILE)' >> $(ISODIR)/boot/grub/grub.cfg
echo '}' >> $(BUILDDIR)/isodir/boot/grub/grub.cfg echo '}' >> $(ISODIR)/boot/grub/grub.cfg
grub-mkrescue -o $(ISOFILE) $(BUILDDIR)/isodir grub-mkrescue -o $(BUILDDIR)/$(ISOFILE) $(ISODIR)
iso: $(ISOFILE) iso: $(BUILDDIR)/$(ISOFILE)
run-grub: iso run-grub: iso
qemu-system-$(ARCH) -cdrom $(BUILDDIR)/orion.iso -serial stdio -S -s qemu-system-$(ARCH) -cdrom $(BUILDDIR)/$(ISOFILE) -serial stdio -S -s