-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
103 lines (88 loc) · 3.18 KB
/
Copy pathMakefile
File metadata and controls
103 lines (88 loc) · 3.18 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
INCLUDES= -I./src/kernel -I./src
FLAGS= -g -ffreestanding -falign-jumps -falign-functions -falign-labels -falign-loops -fstrength-reduce -fomit-frame-pointer -finline-functions -Wno-unused-function -fno-builtin -Werror -Wno-unused-label -Wno-cpp -Wno-unused-parameter -nostdlib -nostartfiles -nodefaultlibs -Wall -O0 -Iinc
BUILD_DIR=./build
SRC_DIR=./src
BIN_DIR=./bin
BINARIES=./bin/boot/boot.asm.bin ./bin/kernel.bin
C_FILES=$(shell find ${SRC_DIR} -name "*.c")
ASM_FILES=$(shell find ${SRC_DIR} -name "*.asm")
OBJS=$(patsubst ${SRC_DIR}/%.asm,${BUILD_DIR}/%.asm.o,${ASM_FILES}) $(patsubst ${SRC_DIR}/%.c,${BUILD_DIR}/%.c.o,${C_FILES})
OBJ_FILES=$(filter-out ${BUILD_DIR}/boot/boot.asm.o,${OBJS}) # boot.asm is used for boot binary and used differently
export PREFIX := $(HOME)/opt/cross
export TARGET := i686-elf
export PATH := $(PREFIX)/bin:$(PATH)
.PHONY:all
all: ./bin/os.bin
./bin/os.bin: ${BINARIES} programs
@echo "## $@ start"
rm -rf ./bin/os.bin
dd if=./bin/boot/boot.asm.bin >> ./bin/os.bin
dd if=./bin/kernel.bin >> ./bin/os.bin
dd if=/dev/zero bs=1048576 count=16 >> ./bin/os.bin
# TODO: Create /mnt/ dir!
sudo mount -t vfat ./bin/os.bin /mnt/d
# Copy a file over
sudo cp hello.txt /mnt/d
sudo cp ./programs/blank/blank.elf /mnt/d
sudo cp ./programs/shell/shell.elf /mnt/d
sudo cp ./programs/keyboard/keyboard.elf /mnt/d
sudo cp ./programs/ls/ls.elf /mnt/d
sudo cp -r ./src /mnt/d/src
sudo ls -la /mnt/d
sudo ls -la /mnt/d/src
sudo umount /mnt/d
@echo "## $@ finished"
./bin/kernel.bin: ${OBJ_FILES}
@echo "$@ start"
i686-elf-ld -g -relocatable ${OBJ_FILES} -o ${BUILD_DIR}/kernelfull.o
i686-elf-gcc ${FLAGS} -T ./src/linker.ld -o ${BIN_DIR}/kernel.bin -ffreestanding -O0 -nostdlib ${BUILD_DIR}/kernelfull.o
@echo "$@ finished"
${BIN_DIR}/%.asm.bin: ${SRC_DIR}/%.asm ${BIN_DIR}/%.dir
@echo "## $@ start"
nasm -f bin $< -o $@
@echo "## $@ finished"
${BUILD_DIR}/%.asm.o: ${SRC_DIR}/%.asm ${BUILD_DIR}/%.dir
@echo "## $@ start"
nasm -f elf -g $< -o $@
@echo "## $@ finished"
${BUILD_DIR}/%.c.o: ${SRC_DIR}/%.c ${BUILD_DIR}/%.dir
@echo "## $@ start"
i686-elf-gcc ${INCLUDES} -I$(dir $<) ${FLAGS} -std=gnu99 -c $< -o $@
@echo "## $@ finished"
# TODO: Extra include of -I./src/fs
./build/fs/fat/fat16.c.o: ./src/fs/fat/fat16.c ./build/fs/fat/fat16.dir
@echo "$@ start"
i686-elf-gcc ${INCLUDES} -I./src/fs -I./src/fs/fat ${FLAGS} -std=gnu99 -c ./src/fs/fat/fat16.c -o ./build/fs/fat/fat16.c.o
@echo "$@ finished"
.PHONY:programs
programs:
cd ./programs/stdlib && $(MAKE) all
cd ./programs/blank && $(MAKE) all
cd ./programs/shell && $(MAKE) all
cd ./programs/keyboard && $(MAKE) all
cd ./programs/ls && $(MAKE) all
.PHONY:programs_clean
programs_clean:
cd ./programs/stdlib && $(MAKE) clean
cd ./programs/blank && $(MAKE) clean
cd ./programs/shell && $(MAKE) clean
cd ./programs/keyboard && $(MAKE) clean
cd ./programs/ls && $(MAKE) clean
.PHONY:clean
clean: programs_clean
@echo "$@ start"
rm -rf ./bin
rm -rf ${FILES}
rm -rf ${BUILD_DIR}
@echo "$@ finished"
.PHONY:show
show:
@echo C_FILES: ${C_FILES}
@echo ASM_FILES: ${ASM_FILES}
@echo OBJ_FILES: ${OBJ_FILES}
@echo BINARIES: ${BINARIES}
.PHONY:%.dir
%.dir:
@echo "## $@ start"
mkdir -p $(dir $@)
@echo "## $@ finished"