1
0
mirror of https://gitlab.os-k.eu/os-k-team/os-k.git synced 2023-08-25 14:03:10 +02:00
os-k/Makefile

230 lines
9.9 KiB
Makefile
Raw Normal View History

2019-02-06 15:41:24 +01:00
#=----------------------------------------------------------------------------=#
# 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/>. #
#=----------------------------------------------------------------------------=#
2019-04-09 17:16:13 +02:00
.PHONY: all test test32 debug gdb install_mbr clean OS/K
all : OS/K
2019-03-17 22:32:52 +01:00
## VARIABLES ----------------------------------------------------------------- #
#Programs
2019-01-14 23:16:26 +01:00
ASM=nasm
LD=ld
2019-03-17 22:32:52 +01:00
CCNAME=x86_64-elf-gcc
ASMFLAGS=-f elf64
LDFLAGS=-melf_x86_64
2019-03-17 22:32:52 +01:00
COPTIM=-O2
2019-03-18 17:25:44 +01:00
CWARNS=-Wall -Wextra -Werror=implicit-function-declaration
2019-04-06 07:53:58 +02:00
CINCLUDES=-Iinclude
2019-03-18 17:25:44 +01:00
CFLAGS1=-nostdlib -ffreestanding -mcmodel=large -std=gnu11
2019-04-09 17:16:13 +02:00
CFLAGS2= -c -g -mno-red-zone -mno-mmx -mno-sse -mno-sse2
2019-03-18 17:25:44 +01:00
CFLAGS=$(CFLAGS1) $(CFLAGS2)
2019-03-17 22:32:52 +01:00
KCC=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS) $(CINCLUDES) -D_OSK_SOURCE -D_KALEID_KERNEL
2019-01-14 23:16:26 +01:00
#Folders
MBRDIR=boot/grub
2019-01-16 11:01:18 +01:00
LOADERDIR=boot/loader
2019-04-06 07:53:58 +02:00
KALEIDDIR=kaleid
INCLUDEDIR=include
2019-01-14 23:16:26 +01:00
OBJDIR=build/obj
2019-03-18 13:45:26 +01:00
KOBJDIR=build/obj/kaleid
LOBJDIR=build/obj/boot
2019-01-14 23:16:26 +01:00
BINDIR=build/bin
BUILDDIR=build
2019-01-14 23:16:26 +01:00
2019-04-09 17:16:13 +02:00
vpath %.c $(KALEIDDIR)
#Color codes
CL='\033[0;32m'
CL2='\033[1;36m'
CL3='\033[0m'
NC='\033[1;37m'
2019-04-09 17:16:13 +02:00
# Lib C
LibCObj= $(KOBJDIR)/atoi.o $(KOBJDIR)/ctype.o \
2019-03-23 00:07:05 +01:00
$(KOBJDIR)/itoa.o $(KOBJDIR)/mem.o \
$(KOBJDIR)/rand.o $(KOBJDIR)/sprintf.o \
$(KOBJDIR)/status.o $(KOBJDIR)/string.o \
$(KOBJDIR)/strtol.o $(KOBJDIR)/argv.o \
$(KOBJDIR)/prog.o $(KOBJDIR)/atol.o \
$(KOBJDIR)/atou.o $(KOBJDIR)/atoul.o \
$(KOBJDIR)/utoa.o $(KOBJDIR)/ltoa.o \
2019-03-18 13:45:26 +01:00
$(KOBJDIR)/ultoa.o
2019-04-09 17:16:13 +02:00
# Kernel sources
KernSources=libbuf/buf.c libbuf/bput.c \
libbuf/bprint.c kernel/cpu/cpuid.c \
kernel/cpu/idt.c kernel/init/init.c \
kernel/init/table.c kernel/io/cursor.c \
kernel/ke/log.c kernel/io/vga.c \
kernel/ke/panic.c kernel/mm/map.c \
kernel/mm/heap.c kernel/mm/malloc.c \
kernel/mm/gdt.c kernel/ps/sched.c \
KernObj=$(patsubst %.c,$(KOBJDIR)/%.o,$(KernSources))
## MISC MAKEFILE ------------------------------------------------------------- #
./ProjectTree: ./.stylehlp_sh
@cat ./.stylehlp_sh > ./ProjectTree
@echo "\n" >> ./ProjectTree
@tree --dirsfirst >> ./ProjectTree
@echo ${CL2}[$@] ${CL}Generated.${CL3}
$(KOBJDIR):
@mkdir -p $(KOBJDIR)
## Lib C MAKEFILE ------------------------------------------------------------ #
$(KOBJDIR)/atoi.o: $(KALEIDDIR)/libc/atoi.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -D_NEED_ATOI $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/atol.o: $(KALEIDDIR)/libc/atoi.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -D_NEED_ATOL $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/atou.o: $(KALEIDDIR)/libc/atoi.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -D_NEED_ATOU $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/atoul.o: $(KALEIDDIR)/libc/atoi.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -D_NEED_ATOUL $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/itoa.o: $(KALEIDDIR)/libc/itoa.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -D_NEED_ITOA $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/ltoa.o: $(KALEIDDIR)/libc/itoa.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -D_NEED_LTOA $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/utoa.o: $(KALEIDDIR)/libc/itoa.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -D_NEED_UTOA $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/ultoa.o: $(KALEIDDIR)/libc/itoa.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -D_NEED_ULTOA $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/mem.o: $(KALEIDDIR)/libc/mem.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) -fno-strict-aliasing $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/ctype.o: $(KALEIDDIR)/libc/ctype.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-04-06 07:53:58 +02:00
@$(KCC) $< -o $@
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/rand.o: $(KALEIDDIR)/libc/rand.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/sprintf.o: $(KALEIDDIR)/libc/sprintf.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/status.o: $(KALEIDDIR)/libc/status.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/string.o: $(KALEIDDIR)/libc/string.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/strtol.o: $(KALEIDDIR)/libc/strtol.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/argv.o: $(KALEIDDIR)/extras/argv.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-09 17:16:13 +02:00
$(KOBJDIR)/prog.o: $(KALEIDDIR)/extras/prog.c $(INCLUDEDIR)/*/*.h | $(KOBJDIR)
2019-03-17 22:47:21 +01:00
@$(KCC) $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-03-17 22:47:21 +01:00
2019-04-09 17:16:13 +02:00
## KERNEL MAKEFILE ----------------------------------------------------------- #
$(KOBJDIR)/%.o: %.c $(INCLUDEDIR)/*/*.h
@mkdir -p $(shell dirname $@)
2019-03-17 22:47:21 +01:00
@$(KCC) $< -o $@
2019-03-18 13:09:34 +01:00
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
2019-04-06 07:53:58 +02:00
2019-03-17 22:47:21 +01:00
## MAIN MAKEFILE ------------------------------------------------------------- #
2019-03-09 22:29:30 +01:00
2019-03-17 22:32:52 +01:00
test: all
2019-04-01 14:58:01 +02:00
@qemu-system-x86_64 -m 4G -hda $(BUILDDIR)/bin/disk.img \
-d cpu_reset,guest_errors,pcall,int 2> $(BUILDDIR)/qemu.log &
2019-04-09 17:16:13 +02:00
2019-03-17 22:32:52 +01:00
test32: all
@qemu-system-i386 -hda $(BUILDDIR)/bin/disk.img -d cpu_reset,guest_errors,pcall,int 2> $(BUILDDIR)/qemu.log &
2019-03-17 22:32:52 +01:00
debug: all
@qemu-system-x86_64 -m 64M -hda $(BUILDDIR)/bin/disk.img -no-reboot \
-no-shutdown -d cpu_reset,guest_errors,pcall,int 2> $(BUILDDIR)/qemu.log &
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > $(BUILDDIR)/kaleid64_disasm.asm
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > $(BUILDDIR)/kaleid32_disasm.asm
2019-03-29 10:29:05 +01:00
gdb: all
@qemu-system-x86_64 -m 64M -hda $(BUILDDIR)/bin/disk.img -no-reboot \
-no-shutdown -d cpu_reset,guest_errors,pcall,int -s 2> $(BUILDDIR)/qemu.log &
2019-03-29 10:29:05 +01:00
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > kaleid64_disasm.asm
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > kaleid32_disasm.asm
2019-03-29 13:45:24 +01:00
@gdb \
-ex "set arch i386:x86-64:intel" \
-ex "target remote localhost:1234" \
-ex "symbol-file $(BINDIR)/kaleid" \
-ex "break BtStartKern" \
2019-03-17 22:32:52 +01:00
install_mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg
@mkdir -p $(BINDIR)/disk
@echo ${CL2}[$@] ${NC}Installing MBR on image...${CL3}
2019-03-18 22:46:58 +01:00
-@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true
2019-03-17 22:32:52 +01:00
@$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg
@rmdir $(BINDIR)/disk
@echo ${CL2}[$@] ${CL}Success.${CL3}
2019-03-17 22:32:52 +01:00
clean:
2019-03-18 22:46:58 +01:00
-@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true
2019-04-09 17:16:13 +02:00
@rm -Rvf ./ProjectTree $(BUILDDIR)/*.log
@rm -Rvf $(BINDIR)/* $(KernObj) $(LibCObj) $(OBJDIR)/*
2019-03-18 13:45:26 +01:00
@echo ${CL2}[[$@]] ${CL}Cleaned.${CL3}
2019-03-17 22:32:52 +01:00
2019-03-18 13:45:26 +01:00
$(BINDIR)/kaleid: $(LOBJDIR)/kaleid.x86_64
2019-03-17 22:32:52 +01:00
@echo ${CL2}[$@] ${NC}Objcopy...${CL3}
2019-03-18 13:45:26 +01:00
@x86_64-elf-objcopy -I elf64-x86-64 -O elf32-i386 $(LOBJDIR)/kaleid.x86_64 $(BINDIR)/kaleid
2019-03-17 22:32:52 +01:00
@echo ${CL2}[$@] ${CL}Success.${CL3}
2019-04-09 17:16:13 +02:00
$(LOBJDIR)/kaleid.x86_64: $(LibCObj) $(KernObj) $(LOBJDIR)/loader.o
2019-03-17 22:32:52 +01:00
@echo ${CL2}[$@] ${NC}Linking kernel objects...${CL3}
2019-04-09 17:16:13 +02:00
@$(LD) $(LDFLAGS) -T $(BUILDDIR)/kernel.ld \
$(LOBJDIR)/loader.o $(KernObj) $(LibCObj) \
2019-03-18 13:45:26 +01:00
-o $(LOBJDIR)/kaleid.x86_64
2019-03-17 22:32:52 +01:00
@echo ${CL2}[$@] ${CL}Success.${CL3}
2019-03-19 12:24:27 +01:00
$(LOBJDIR)/loader.o: $(LOADERDIR)/loader.asm $(LOADERDIR)/*/*.inc
2019-03-17 22:32:52 +01:00
@echo ${CL2}[$@] ${NC}Making loader...${CL3}
2019-04-09 17:16:13 +02:00
@mkdir -p $(shell dirname $@)
2019-03-18 13:45:26 +01:00
@$(ASM) $(ASMFLAGS) $(LOADERDIR)/loader.asm -o $(LOBJDIR)/loader.o > /dev/null
2019-03-17 22:32:52 +01:00
@echo ${CL2}[$@] ${CL}Success.${CL3}
2019-03-17 22:32:52 +01:00
$(BINDIR)/disk.img: $(MBRDIR)/create_disk.sh
@echo ${CL2}[$@]${NC} Constructing disk image...${CL3}
2019-03-18 22:46:58 +01:00
-@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true
2019-03-17 22:32:52 +01:00
@$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img
@make install_mbr
@echo ${CL2}[$@]${NC} Constructing disk image...${CL3}
2019-03-18 13:45:26 +01:00
OS/K: $(BINDIR)/kaleid $(BINDIR)/disk.img ./ProjectTree
@mkdir -p $(BINDIR)/disk
@echo ${CL2}[[$@]] ${NC}Integrating kernel...${CL3}
2019-03-18 22:46:58 +01:00
-@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true
2019-03-18 13:45:26 +01:00
@$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk
@cp $(BINDIR)/kaleid $(BINDIR)/disk/boot/kaleid
@$(MBRDIR)/umount.sh $(BINDIR)/disk
@echo ${CL2}[[$@]] ${CL}Success.${CL3}
@rmdir $(BINDIR)/disk