-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
138 lines (112 loc) · 3.82 KB
/
Makefile
File metadata and controls
138 lines (112 loc) · 3.82 KB
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# ** por compatibilidad se omiten tildes **
# ==============================================================================
# TRABAJO PRACTICO 3 - System Programming - ORGANIZACION DE COMPUTADOR II - FCEN
# ==============================================================================
MCOPY=mcopy
KERNEL_SRC=kernel.asm
KERNEL_OBJ=kernel.o
KERNEL_BIN=kernel.bin
DEPEND = Makefile \
kernel.asm isr.asm \
imprimir.mac \
defines.h \
gdt.c gdt.h pic.c pic.h idt.c idt.h isr.h tss.c tss.h mmu.c mmu.h \
sched.c sched.h screen.c screen.h \
game.c game.h syscall.h
OBJ=$(KERNEL_OBJ) gdt.o pic.o idt.o isr.o mmu.o sched.o tss.o screen.o game.o #ee_printf.o
DISK_IMG=diskette.img
DISK_IMG_BZ=diskette.img.bz2
CFLAGS=-m32 -g -ggdb -Wall -Werror -O0 \
-fno-zero-initialized-in-bss -fno-stack-protector -ffreestanding
TASKIDLE=idle.tsk
TASKAE=taskAE.ctsk
TASKAM=taskAM.ctsk
TASKBE=taskBE.ctsk
TASKBM=taskBM.ctsk
TASKS=tareas.tsk
TASKSBINS=$(TASKIDLE) $(TASKAE) $(TASKAM) $(TASKBE) $(TASKBM)
CODESIZE=60928 # = 65536 - 0x1200 = 64KB - 0x1200
TASKSSIZE=28672 # = 1 * (4096) + 3 * (4096) + 3 * (4096) = idle + tareas
KERNELSIZE=89600 # = CODESIZE + TASKSSIZE
TASKSTARTADDR=0x40000000
CC=gcc
#CC=clang
NASM=nasm
NASMFLAGS=-felf32
OBJCOPY=objcopy
NM=nm
LD=ld
LDTASKFLAGS=-s -static -m elf_i386 --oformat binary -b elf32-i386 -e task -Ttext $(TASKSTARTADDR)
LDFLAGS=-static -m elf_i386 -b elf32-i386 -e start -Ttext 0x1200
QUIET = @
.PHONY=clean all image tasks defines.h
all: clean tasks image
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $^
%.o: %.asm
$(NASM) $(NASMFLAGS) -o $@ $^
kernel.bin: $(OBJ) $(TASKS)
@echo 'Linkeando kernel...'
$(LD) $(LDFLAGS) -o $@.tmp $(OBJ)
$(NM) $@.tmp | grep -v " U " | awk '{print "0x" $$1 " " $$3}' > kernel.sym
$(OBJCOPY) -S -O binary $@.tmp $@
rm $@.tmp
@echo ''
@echo 'Generando imagen del kernel...'
mv kernel.bin kernel.bin.tmp
dd if=/dev/zero of=kernel.bin bs=1 count=$(KERNELSIZE) conv=notrunc status=noxfer > /dev/null 2>&1
dd if=kernel.bin.tmp of=kernel.bin bs=1 count=$(CODESIZE) conv=notrunc status=noxfer > /dev/null 2>&1
dd if=$(TASKS) of=kernel.bin bs=1 count=$(TASKSSIZE) seek=$(CODESIZE) conv=notrunc status=noxfer > /dev/null 2>&1
rm kernel.bin.tmp
@echo ''
image: kernel.bin $(DEPEND) $(DISK_IMG)
@echo 'Copiando el $(KERNEL_BIN) a la imagen de diskette'
$(MCOPY) -o -i $(DISK_IMG) $(KERNEL_BIN) ::/
@echo ''
$(DISK_IMG): $(DISK_IMG_BZ)
bzip2 -dk $(DISK_IMG_BZ)
idle.tsk: idle.asm
@echo 'Compilando tarea...'
$(NASM) -fbin -o $@ $^
@echo ''
@echo 'Generando imagen de la tarea idle...'
mv idle.tsk idle.tsk.tmp
dd if=/dev/zero bs=1 count=4K of=$@ status=noxfer > /dev/null 2>&1
dd if=$@.tmp bs=1 count=4K seek=0 conv=notrunc of=$@ status=noxfer > /dev/null 2>&1
rm $@.tmp
@echo ''
taskAM.tsko: tareaAM.c
$(CC) $(CFLAGS) -c -o $@ $^
taskAE.tsko: tareaAE.c
$(CC) $(CFLAGS) -c -o $@ $^
taskBM.tsko: tareaBM.c
$(CC) $(CFLAGS) -c -o $@ $^
taskBE.tsko: tareaBE.c
$(CC) $(CFLAGS) -c -o $@ $^
%.ctsk: %.tsko
@echo 'Linkeando tarea...'
$(LD) $(LDTASKFLAGS) -o $@.tmp $^
@echo ''
mv $@.tmp $@
tasks: $(TASKSBINS)
@echo 'Generando imagen de las tareas...'
$(QUIET) dd if=/dev/zero bs=1 count=$(TASKSSIZE) of=$(TASKS) status=noxfer > /dev/null 2>&1
$(QUIET) dd if=$(TASKAE) bs=1 count=4K of=$(TASKS) seek=0K status=noxfer > /dev/null 2>&1
$(QUIET) dd if=$(TASKAM) bs=1 count=4K of=$(TASKS) seek=4K status=noxfer > /dev/null 2>&1
$(QUIET) dd if=$(TASKBE) bs=1 count=4K of=$(TASKS) seek=8K status=noxfer > /dev/null 2>&1
$(QUIET) dd if=$(TASKBM) bs=1 count=4K of=$(TASKS) seek=12K status=noxfer > /dev/null 2>&1
$(QUIET) dd if=$(TASKIDLE) bs=1 count=4K of=$(TASKS) seek=24K status=noxfer > /dev/null 2>&1
@echo ''
clean:
@echo 'Limpiando todo...'
rm -f *.o
rm -f *.bin
rm -f *.tmp
rm -f *.ctsko
rm -f kernel.sym
rm -f *.ctsk
rm -f *.tsko
rm -f *.tsk
rm -f $(DISK_IMG)
rm -rf *~
@echo ''