-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMakefile
81 lines (65 loc) · 2.27 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# Compilador C
CC=gcc
# Aqui sao nossas regras de compilacao de todos os arquivos .C
CFLAGS=-Iinclude -Iarch/include -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -m32 -c
# Montador Asssembly
AS=nasm
# Regras de montagem do codigo asm
ASFLAGS=-f elf32 -o
# Linker
LD=ld
# Regras do vinculador
LDFLAGS=-m elf_i386 -T arch/x86/boot/link.ld
all: clean compilar gerar_disco_grub gerar_iso
compilar:
mkdir -p bin/ obj/
@echo "Montando assembly do lancador (start.asm)..."
$(AS) $(ASFLAGS) start.o arch/x86/boot/start.asm
@echo "Montando assembly do carregador da GDT(gdt.asm)..."
$(AS) $(ASFLAGS) load_gdt.o arch/x86/gdt.asm
@echo "Compilando 'lib' especifica..."
$(CC) $(CFLAGS) lib/string.c
@echo "Compilando código da arquitetura(archMain.c)..."
$(CC) $(CFLAGS) arch/x86/io.c
$(CC) $(CFLAGS) arch/x86/video.c
$(CC) $(CFLAGS) arch/x86/gdt.c
$(CC) $(CFLAGS) arch/x86/boot/archMain.c
@echo "Compilando testes(test/test.c)..."
$(CC) $(CFLAGS) test/test.c
@echo "Compilando principal (kernel.c)..."
$(CC) $(CFLAGS) kernel/kernel.c
@echo "Movendo objetos..."
mv -v start.o string.o io.o video.o gdt.o load_gdt.o test.o archMain.o kernel.o obj/
@echo "Linkando Kernel em bin/..."
$(LD) $(LDFLAGS) -o bin/kernel.bin obj/start.o obj/kernel.o obj/archMain.o obj/test.o obj/load_gdt.o obj/gdt.o obj/io.o obj/video.o obj/string.o
gerar_disco_grub:
@echo "Gerando disco de boot com GRUB..."
@echo "Caso ocorra problemas de permissao, rode como root."
@echo ""
cp grub/grub.img bin/aguilaOS.img
@echo "Criando ponto de montagem para imagem..."
mkdir -p /tmp/aguilaOS
@echo "Montando grub..."
sudo mount -t auto bin/aguilaOS.img /tmp/aguilaOS/
@echo "Limpando..."
sudo rm -fv /tmp/aguilaOS/kernel.bin
@echo "Copiando kernel para imagem..."
sudo cp -v bin/kernel.bin /tmp/aguilaOS/
@echo "Desmontando e fixando dados..."
sudo umount /tmp/aguilaOS/
@echo "Limpando..."
sudo rm -rfv /tmp/aguilaOS/
@echo ""
@echo ""
@echo ""
@echo "Tudo pronto! Sua imagem de disquete esta em bin/"
gerar_iso:
@echo "Gerando ISO..."
genisoimage -quiet -V 'AGUILAOS' -input-charset iso8859-1 -o aguilaOS.iso -b aguilaOS.img -hide aguilaOS.img bin/
clean:
@echo "Limpando..."
rm -fv *.o *.bin
rm -fv lib/*.o
rm -fv obj/*.o
rm -fv bin/*.bin
rm -fv bin/*.img