123 lines
5.5 KiB
Makefile
123 lines
5.5 KiB
Makefile
#=----------------------------------------------------------------------------=#
|
|
# GNU GPL OS/K #
|
|
# #
|
|
# Desc: Project Makefile #
|
|
# #
|
|
# #
|
|
# Copyright © 2018-2019 The OS/K Team #
|
|
# #
|
|
# This file is part of OS/K. #
|
|
# #
|
|
# OS/K is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# any later version. #
|
|
# #
|
|
# OS/K is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY# without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with OS/K. If not, see <https://www.gnu.org/licenses/>. #
|
|
#=----------------------------------------------------------------------------=#
|
|
|
|
.PHONY: all
|
|
|
|
#Programs
|
|
ASM=nasm
|
|
LD=ld
|
|
ASMFLAGS=-f elf64
|
|
LDFLAGS= -melf_x86_64
|
|
|
|
#Folders
|
|
MBRDIR=boot/grub
|
|
LOADERDIR=boot/loader
|
|
OBJDIR=build/obj
|
|
BINDIR=build/bin
|
|
|
|
# Object to link (temp)
|
|
l_objects=./build/obj/kaleid/crtlib/memory.o ./build/obj/kaleid/crtlib/rand.o ./build/obj/kaleid/crtlib/string.o ./build/obj/kaleid/crtlib/ultoa.o ./build/obj/kaleid/crtlib/strtol.o ./build/obj/kaleid/crtlib/utoa.o ./build/obj/kaleid/crtlib/status.o ./build/obj/kaleid/crtlib/atoul.o ./build/obj/kaleid/crtlib/atol.o ./build/obj/kaleid/crtlib/itoa.o ./build/obj/kaleid/crtlib/ltoa.o ./build/obj/kaleid/crtlib/atou.o ./build/obj/kaleid/crtlib/arith.o ./build/obj/kaleid/crtlib/atoi.o ./build/obj/kaleid/extras/prog.o ./build/obj/kaleid/extras/argv.o ./build/obj/kaleid/kernel/init/table.o ./build/obj/kaleid/kernel/init/init.o ./build/obj/kaleid/kernel/io/vga.o ./build/obj/kaleid/kernel/io/cursor.o ./build/obj/kaleid/kernel/io/term.o ./build/obj/kaleid/kernel/ke/panic.o ./build/obj/boot/loader.o
|
|
|
|
#Color codes
|
|
CL='\033[0;32m'
|
|
CL2='\033[1;36m'
|
|
CL3='\033[0m'
|
|
NC='\033[1;37m'
|
|
|
|
kernel:
|
|
cpp ./Makefile.in > build/Makefile.out
|
|
python build/idttool.py
|
|
make kernel -f build/Makefile.out.2
|
|
rm build/Makefile.out build/Makefile.out.2
|
|
|
|
kernel-asm:
|
|
cpp -D_TO_ASM ./Makefile.in > build/Makefile.out
|
|
python build/idttool.py
|
|
make kernel -f build/Makefile.out.2
|
|
rm build/Makefile.out build/Makefile.out.2
|
|
|
|
tests:
|
|
cpp -D_TESTS ./Makefile.in > build/Makefile.out
|
|
python build/idttool.py
|
|
make tests -f build/Makefile.out.2
|
|
rm build/Makefile.out build/Makefile.out.2
|
|
|
|
boot.mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg
|
|
@mkdir -p $(BINDIR)/disk
|
|
@echo ${CL2}[boot.mbr]${NC} Installing MBR on image...${CL3}
|
|
@$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg
|
|
@echo ${CL2}[boot.mbr]${CL} OK${CL3}
|
|
@rmdir $(BINDIR)/disk
|
|
|
|
boot.loader.asm: $(LOADERDIR)/loader.asm
|
|
@echo ${CL2}[boot.loader.asm]${NC} Making loader...${CL3}
|
|
@$(ASM) $(ASMFLAGS) $(LOADERDIR)/loader.asm -o $(OBJDIR)/boot/loader.o > /dev/null
|
|
@echo ${CL2}[boot.loader.asm]${CL} OK${CL3}
|
|
|
|
loader: boot.loader.asm link copykernel
|
|
|
|
copykernel:
|
|
@mkdir -p $(BINDIR)/disk
|
|
@echo ${CL2}[disk]${NC} Integrating kernel...${CL3}
|
|
@$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk
|
|
@cp $(BINDIR)/kaleid $(BINDIR)/disk/boot/kaleid
|
|
@$(MBRDIR)/umount.sh $(BINDIR)/disk
|
|
@echo ${CL2}[disk]${CL} OK${CL3}
|
|
@rmdir $(BINDIR)/disk
|
|
|
|
make_disk:
|
|
@echo ${CL2}[make_disk]${NC} Constructing disk image...${CL3}
|
|
@$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img
|
|
@echo ${CL2}[make_disk]${CL} OK${CL3}
|
|
|
|
test: kernel loader
|
|
@qemu-system-x86_64 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -enable-kvm 2> qemu.log &
|
|
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm
|
|
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm
|
|
|
|
|
|
test32: kernel loader
|
|
@qemu-system-i386 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -enable-kvm 2> qemu.log &
|
|
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm
|
|
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm
|
|
|
|
debug: kernel loader
|
|
@qemu-system-x86_64 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -s -S -enable-kvm 2> qemu.log &
|
|
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm
|
|
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm
|
|
|
|
boot: make_disk boot.mbr
|
|
@echo ${CL2}[[boot]]${CL} Terminated without error.${CL3}
|
|
|
|
all: boot kernel loader
|
|
@echo ${CL2}[[all]]${CL} Terminated without error.${CL3}
|
|
|
|
link:
|
|
@$(LD) $(LDFLAGS) -T build/kernel.ld $(l_objects) -o $(OBJDIR)/boot/kaleid.x86_64
|
|
@x86_64-elf-objcopy -I elf64-x86-64 -O elf32-i386 $(OBJDIR)/boot/kaleid.x86_64 $(BINDIR)/kaleid
|
|
|
|
clean:
|
|
@rm -Rf $(BINDIR)/*
|
|
@rm -Rf $(OBJDIR)/*/*/*/*.o
|