-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy pathMakefile
86 lines (75 loc) · 2.29 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
82
83
84
85
OBJ=.obj
SRC = ./kernel
SRC_ASM = ./asm
SRC_LIB = ./lib
INCLUDE = ./include
COPY_ME = /boot
#
# Setting up Compiler
# ---------------------------------------------------------
CC=gcc
AS=nasm
LD=ld
#
# Debug compilation option
# ---------------------------------------------------------
OPT_C= -m32 -O -Wall -nostdlib -nostartfiles -nodefaultlibs -Wimplicit-function-declaration
OPT_ASM=-s -f elf -w+orphan-labels -o
#
# Release compilation option
#--------------------------------------------------------
#
# link option
#--------------------------------------------------------
OPT_LD=-T link.ld --build-id=none -m elf_i386 -Map map.txt
#
# Main Targets
#--------------------------------------------------------
all: ${OBJ} kernel.bin
default: ${OBJ} install
build-iso: kernel.bin
cp -rf kernel.bin isofiles/boot/kernel.bin
grub-mkrescue -o os.iso isofiles
run-iso:
qemu-system-i386 -cdrom os.iso
run-bin:
qemu-system-i386 -kernel kernel.bin
clean:
rm -rf .obj/*
rm -rf kernel.bin
rm -rf isofiles/boot/kernel.bin
rm -rf os.iso
${OBJ}:
mkdir .obj
#
# Compilation directive
#--------------------------------------------------------
kernel.bin: ${OBJ}/start.o \
${OBJ}/main.o \
${OBJ}/keyboard.o \
${OBJ}/resume.o \
${OBJ}/video.o
${LD} ${OPT_LD} -o kernel.bin ${OBJ}/start.o \
${OBJ}/video.o \
${OBJ}/keyboard.o \
${OBJ}/resume.o \
${OBJ}/main.o
#--------------------------------------------------------
${OBJ}/start.o: ${SRC_ASM}/start.asm
${AS} ${OPT_ASM} ${OBJ}/start.o ${SRC_ASM}/start.asm
#--------------------------------------------------------
${OBJ}/video.o: ${SRC_LIB}/video.c \
${INCLUDE}/video.h
${CC} ${OPT_C} -c -o ${OBJ}/video.o -I${INCLUDE} ${SRC_LIB}/video.c
#--------------------------------------------------------
${OBJ}/resume.o: ${SRC_LIB}/resume.c \
${INCLUDE}/resume.h
${CC} ${OPT_C} -c -o ${OBJ}/resume.o -I${INCLUDE} ${SRC_LIB}/resume.c
#--------------------------------------------------------
${OBJ}/keyboard.o: ${SRC_LIB}/keyboard.c \
${INCLUDE}/keyboard.h
${CC} ${OPT_C} -c -o ${OBJ}/keyboard.o -I${INCLUDE} ${SRC_LIB}/keyboard.c
#--------------------------------------------------------
${OBJ}/main.o: ${SRC}/main.c \
${INCLUDE}/video.h
${CC} ${OPT_C} -c -o ${OBJ}/main.o -I${INCLUDE} ${SRC}/main.c