luxos/Makefile
2021-09-14 18:46:50 +03:00

271 lines
11 KiB
Makefile

# User sets these
CC = gcc
ASM = nasm
CURDIR = /media/6C9EE8DF9EE8A336/ctaos
# Other parameters & paths used
LSCRIPT = SysCore/objects/linker.ld
OBJ = Build
CCPARAM = -Wall -O -fstrength-reduce -fomit-frame-pointer -nostdinc -fno-builtin -I./SysCore/include -c
ASMPARAMobj = -f aout
ASMPARAMbin = -f bin
#.PHONY : FORCE
#FORCE :#
# @echo -e "\e[1;4m\e[36mC\e[31mT\e[32mA \e[37mOperating System v0.1\e[0"
# Build final floppy image
ctaos.img : $(OBJ)bootload.bin $(OBJ)stage2.cta $(OBJ)kernel.bin
@echo -e "\e[1;32m[ 99%]\e[0m Making floppy image"
dd bs=512 count=2880 if=/dev/zero of=ctaos.img
mkfs.msdos ctaos.img
dd bs=512 count=1 conv=notrunc if=$(OBJ)bootload.bin of=ctaos.img
sudo mkdir /media/floppy1/
sudo mount -o loop ctaos.img /media/floppy1/
sudo cp $(OBJ)stage2.cta /media/floppy1
sudo cp $(OBJ)kernel.bin /media/floppy1
sudo umount /media/floppy1/
sudo rm -r /media/floppy1/
# Build Bootloader: Stage 1
$(OBJ)bootload.bin : SysBoot/stage1/bootload.asm
echo -e "\e[1;32m[ 4%]\e[0m BOOTLOADER :: stage 1"
@$(ASM) $(ASMPARAMbin) SysBoot/stage1/bootload.asm -o $(OBJ)bootload.bin
# Build Bootloader: Stage 2
$(OBJ)stage2.cta : SysBoot/stage2/stage2.asm \
SysBoot/stage2/a20.inc \
SysBoot/stage2/bootinfo.inc \
SysBoot/stage2/common.inc \
SysBoot/stage2/fat12.inc \
SysBoot/stage2/floppy16.inc \
SysBoot/stage2/gdt.inc \
SysBoot/stage2/getdata.inc \
SysBoot/stage2/memory.inc \
SysBoot/stage2/paging.inc \
SysBoot/stage2/stdio.inc
@echo -e "\e[1;32m[ 8%]\e[0m BOOTLOADER :: stage 2"
@$(ASM) $(ASMPARAMbin) -I./SysBoot/stage2/ -o $(OBJ)stage2.cta SysBoot/stage2/stage2.asm
# Build KERNEL:
$(OBJ)kernel.bin : $(OBJ)/loader.o \
$(OBJ)/main.o \
$(OBJ)/lib-conio.o \
$(OBJ)/lib-ctype.o \
$(OBJ)/mmngr-asm.o \
$(OBJ)/mmngr-phys.o \
$(OBJ)/mmngr-virt.o \
$(OBJ)/mmngr-lib-pde.o \
$(OBJ)/mmngr-lib-pte.o \
$(OBJ)/shell.o \
$(OBJ)/lib-stdlib.o \
$(OBJ)/lib-string.o \
$(OBJ)/lib-system.o \
$(OBJ)/lib-time.o \
$(OBJ)/driver-bsod.o \
$(OBJ)/driver-cpu.o \
$(OBJ)/driver-dma.o \
$(OBJ)/driver-drivers.o \
$(OBJ)/driver-floppy.o \
$(OBJ)/driver-gdt.o \
$(OBJ)/driver-gdt-asm.o \
$(OBJ)/driver-idt.o \
$(OBJ)/driver-idt-asm.o \
$(OBJ)/driver-isrs.o \
$(OBJ)/driver-isrs-asm.o \
$(OBJ)/driver-irq.o \
$(OBJ)/driver-irq-asm.o \
$(OBJ)/driver-keyboard.o \
$(OBJ)/driver-fat.o \
$(OBJ)/driver-pic.o \
$(OBJ)/driver-pit.o \
$(OBJ)/video-vga03h.o
ld -T SysCore/link.ld
# ---------- Kernel components ---------- #
# Build assembly sources:
$(OBJ)/loader.o : SysCore/loader.asm
@ echo -e "\e[1;33m[ 9%]\e[0m Assembly kernel loader"
@$(ASM) $(ASMPARAMobj) -o $(OBJ)/loader.o SysCore/loader.asm
$(OBJ)/driver-gdt-asm.o : SysCore/drivers/cpu/gdt/gdt.asm
@echo -e "\e[1;33m[ 10%]\e[0m Assembly code for GDT"
@$(ASM) $(ASMPARAMobj) -o $(OBJ)/driver-gdt-asm.o SysCore/drivers/cpu/gdt/gdt.asm
$(OBJ)/driver-idt-asm.o : SysCore/drivers/cpu/idt/idt.asm
@echo -e "\e[1;33m[ 11%]\e[0m Assembly code for IDT"
@$(ASM) $(ASMPARAMobj) -o $(OBJ)/driver-idt-asm.o SysCore/drivers/cpu/idt/idt.asm
$(OBJ)/driver-irq-asm.o : SysCore/drivers/cpu/irq/irq.asm
@echo -e "\e[1;33m[ 12%]\e[0m Assembly code for IRQ"
@$(ASM) $(ASMPARAMobj) -o $(OBJ)/driver-irq-asm.o SysCore/drivers/cpu/irq/irq.asm
$(OBJ)/driver-isrs-asm.o : SysCore/drivers/cpu/isrs/isrs.asm
@echo -e "\e[1;33m[ 13%]\e[0m Assembly code for ISRs"
@$(ASM) $(ASMPARAMobj) -o $(OBJ)/driver-isrs-asm.o SysCore/drivers/cpu/isrs/isrs.asm
# Build MAIN function
$(OBJ)/main.o : SysCore/main.c SysCore/include/string.h \
SysCore/include/system.h SysCore/include/conio.h \
SysCore/drivers/drivers.h SysCore/include/time.h \
SysCore/include/bootinfo.h SysCore/memory/mmngr_ph.h \
SysCore/memory/mmngr_vi.h SysCore/video/vga03h.h
@echo -e "\e[1;32m[ 14%]\e[0m MAIN C Function"
@$(CC) $(CCPARAM) -o $(OBJ)/main.o SysCore/main.c
# Build SHELL
$(OBJ)/shell.o : SysCore/shell/shell.c SysCore/shell/apps.h \
SysCore/include/system.h SysCore/include/conio.h \
SysCore/drivers/drivers.h SysCore/include/time.h \
SysCore/memory/mmngr_ph.h SysCore/drivers/keyboard.h \
SysCore/drivers/cpu/cpu.h SysCore/include/drivers/floppy.h \
SysCore/drivers/filesys/fat.h
@echo -e "\e[1;34m[ 15%]\e[0m Shell"
@$(CC) $(CCPARAM) -o $(OBJ)/shell.o SysCore/shell/shell.c
# Build LIBRARIES
$(OBJ)/lib-conio.o : SysCore/lib/conio.c \
SysCore/include/drivers/keyboard.h SysCore/include/stdarg.h \
SysCore/include/conio.h SysCore/include/stdlib.h \
SysCore/include/string.h SysCore/include/ctype.h \
SysCore/memory/mmngr_ph.h
@echo -e "\e[1;34m[ 16%]\e[0m Libraries: conio"
@$(CC) $(CCPARAM) -o $(OBJ)/lib-conio.o SysCore/lib/conio.c
$(OBJ)/lib-ctype.o : SysCore/lib/ctype.c SysCore/include/ctype.h
@echo -e "\e[1;34m[ 17%]\e[0m Libraries: ctype"
@$(CC) $(CCPARAM) -o $(OBJ)/lib-ctype.o SysCore/lib/ctype.c
$(OBJ)/lib-stdlib.o : SysCore/lib/stdlib.c SysCore/include/stdlib.h \
SysCore/include/ctype.h
@echo -e "\e[1;34m[ 18%]\e[0m Libraries: stdlib"
@$(CC) $(CCPARAM) -o $(OBJ)/lib-stdlib.o SysCore/lib/stdlib.c
$(OBJ)/lib-string.o : SysCore/lib/string.c SysCore/include/string.h
@echo -e "\e[1;32m[ 19%]\e[0m Libraries: string"
@$(CC) $(CCPARAM) -o $(OBJ)/lib-string.o SysCore/lib/string.c
$(OBJ)/lib-system.o : SysCore/lib/system.c SysCore/include/system.h
@echo -e "\e[1;34m[ 20%]\e[0m Libraries: system"
@$(CC) $(CCPARAM) -o $(OBJ)/lib-system.o SysCore/lib/system.c
$(OBJ)/lib-time.o : SysCore/lib/time.c SysCore/include/time.h \
SysCore/include/system.h
@echo -e "\e[1;34m[ 21%]\e[0m Libraries: time"
@$(CC) $(CCPARAM) -o $(OBJ)/lib-time.o SysCore/lib/time.c
# Build Memory Manager
$(OBJ)/mmngr-asm.o : SysCore/memory/mmngr.asm
@echo -e "\e[1;36m[ 22%]\e[0m Memory manager assembly code"
@$(ASM) $(ASMPARAMobj) -o $(OBJ)/mmngr-asm.o SysCore/memory/mmngr.asm
$(OBJ)/mmngr-phys.o : SysCore/memory/mmngr_ph.c SysCore/memory/mmngr_ph.h
@echo -e "\e[1;36m[ 22%]\e[0m Physical memory manager"
@$(CC) $(CCPARAM) -o $(OBJ)/mmngr-phys.o SysCore/memory/mmngr_ph.c
$(OBJ)/mmngr-virt.o : SysCore/memory/mmngr_vi.c SysCore/memory/mmngr_vi.h \
SysCore/memory/mmngr_ph.h
@echo -e "\e[1;36m[ 23%]\e[0m Virtual memory manager"
@$(CC) $(CCPARAM) -o $(OBJ)/mmngr-virt.o SysCore/memory/mmngr_vi.c
$(OBJ)/mmngr-lib-pde.o : SysCore/memory/lib/pde.c SysCore/memory/lib/pde.h
@echo -e "\e[1;36m[ 24%]\e[0m Memory manager libraries: PDE"
@$(CC) $(CCPARAM) -o $(OBJ)/mmngr-lib-pde.o SysCore/memory/lib/pde.c
$(OBJ)/mmngr-lib-pte.o : SysCore/memory/lib/pte.c SysCore/memory/lib/pte.h
@echo -e "\e[1;36m[ 25%]\e[0m Memory manager libraries: PTE"
@$(CC) $(CCPARAM) -o $(OBJ)/mmngr-lib-pte.o SysCore/memory/lib/pte.c
# Build drivers
$(OBJ)/driver-drivers.o : SysCore/drivers/drivers.c SysCore/include/system.h \
SysCore/drivers/cpu/cpu.h SysCore/drivers/clock/clock.h \
SysCore/drivers/floppy/floppy.h SysCore/include/drivers/keyboard.h
@echo -e "\e[1;35m[ 26%]\e[0m Driver manager"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-drivers.o SysCore/drivers/drivers.c
$(OBJ)/driver-bsod.o : SysCore/drivers/BSOD.c SysCore/include/system.h \
SysCore/include/conio.h
@echo -e "\e[1;35m[ 27%]\e[0m Kernel panic screen"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-bsod.o SysCore/drivers/BSOD.c
$(OBJ)/driver-cpu.o : SysCore/drivers/cpu/cpu.c SysCore/include/system.h \
SysCore/drivers/cpu/cpu.h SysCore/drivers/cpu/gdt/gdt.h \
SysCore/drivers/cpu/idt/idt.h SysCore/drivers/cpu/irq/irq.h \
SysCore/drivers/cpu/isrs/isrs.h
@echo -e "\e[1;35m[ 28%]\e[0m CPU modules"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-cpu.o SysCore/drivers/cpu/cpu.c
$(OBJ)/driver-gdt.o : SysCore/drivers/cpu/gdt/gdt.c SysCore/drivers/cpu/gdt/gdt.h
@echo -e "\e[1;35m[ 29%]\e[0m Global descriptor table"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-gdt.o SysCore/drivers/cpu/gdt/gdt.c
$(OBJ)/driver-idt.o : SysCore/drivers/cpu/idt/idt.c SysCore/drivers/cpu/idt/idt.h \
SysCore/include/system.h
@echo -e "\e[1;35m[ 30%]\e[0m Interrupt descriptor table"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-idt.o SysCore/drivers/cpu/idt/idt.c
$(OBJ)/driver-isrs.o : SysCore/drivers/cpu/isrs/isrs.c SysCore/drivers/cpu/isrs/isrs.h \
SysCore/drivers/cpu/idt/idt.h SysCore/include/system.h \
SysCore/include/conio.h
@echo -e "\e[1;35m[ 31%]\e[0m Interrupt service routines"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-isrs.o SysCore/drivers/cpu/isrs/isrs.c
$(OBJ)/driver-irq.o : SysCore/drivers/cpu/irq/irq.c SysCore/drivers/cpu/irq/irq.h \
SysCore/include/system.h SysCore/drivers/cpu/idt/idt.h \
SysCore/drivers/cpu/pic/pic.h
@echo -e "\e[1;35m[ 32%]\e[0m Interrupt requests"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-irq.o SysCore/drivers/cpu/irq/irq.c
$(OBJ)/driver-pic.o : SysCore/drivers/cpu/irq/pic.c SysCore/drivers/cpu/irq/pic.h \
SysCore/include/system.h
@echo -e "\e[1;35m[ 33%]\e[0m Programmable interrupt controller"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-pic.o SysCore/drivers/cpu/irq/pic.c
$(OBJ)/driver-pit.o : SysCore/drivers/clock/pit.c SysCore/drivers/clock/clock.h \
SysCore/include/system.h SysCore/include/time.h
@echo -e "\e[1;35m[ 34%]\e[0m Programmable interval timer"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-pit.o SysCore/drivers/clock/pic.c
$(OBJ)/driver-keyboard.o : SysCore/drivers/keyboard/keyboard.c SysCore/include/system.h \
SysCore/include/drivers/keyboard.h
@echo -e "\e[1;35m[ 35%]\e[0m Keyboard"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-pic.o SysCore/drivers/cpu/irq/pic.c
$(OBJ)/driver-dma.o : SysCore/drivers/floppy/dma.c SysCore/drivers/floppy/dma.h \
SysCore/include/system.h
@echo -e "\e[1;35m[ 36%]\e[0m DMA Controller"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-dma.o SysCore/drivers/floppy/dma.c
$(OBJ)/driver-floppy.o : SysCore/drivers/floppy/floppy.c SysCore/drivers/floppy/dma.h \
SysCore/include/system.h SysCore/include/time.h \
SysCore/include/conio.h SysCore/drivers/floppy/storage.h \
SysCore/drivers/floppy/floppy.h
@echo -e "\e[1;35m[ 37%]\e[0m FDC Controller"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-floppy.o SysCore/drivers/floppy/floppy.c
# TODO: add SysCore/drivers/filesys/vfs.h
$(OBJ)/driver-fat.o : SysCore/drivers/filesys/fat.c SysCore/drivers/filesys/fat.h \
SysCore/drivers/floppy/floppy.h SysCore/include/conio.h
@echo -e "\e[1;35m[ 38%]\e[0m File system"
@$(CC) $(CCPARAM) -o $(OBJ)/driver-fat.o SysCore/drivers/floppy/fat.c
# TODO: add vfs.c
# TODO: add colors
$(OBJ)/video-vga03h.o : SysCore/video/vga03h.c SysCore/include/conio.h \
SysCore/include/system.h
@$(CC) $(CCPARAM) -o $(OBJ)/video-vga03h.o SysCore/video/vga03h.c
.PHONY : clean
clean:
- rm ctaos.img
rm $(OBJ)*.*