-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild
executable file
·122 lines (107 loc) · 4.17 KB
/
build
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
set -e
export PATH=/usr/local/cross/bin:usr/local/cross/i586-elf-bin:$PATH
echo Build started.
date
[[ -z "$DEBUG" ]] && DEBUG=false
[[ -z "$VESA" ]] && VESA=true
[[ -z "$TARGET" ]] && TARGET=i686-myos
[[ -z "$DISKTYPE" ]] && DISKTYPE=FAT32
[[ -z "$DISKSIZE" ]] && DISKSIZE=33
export DEFINES="-D$DISKTYPE"
export CFLAGS="-c -g"
export NASMFLAGS="-felf -F dwarf -g"
if [ "$DEBUG" = true ] ; then
DEFINES="$DEFINES -DDEBUG"
else
CFLAGS="$CFLAGS -O2"
NASMFLAGS="$NASMFLAGS -O2"
fi
[[ "$VESA" = true ]] && DEFINES="$DEFINES -DVESA"
CFLAGS="$CFLAGS $DEFINES"
CPPFLAGS="$CFLAGS"
echo "DEBUG = $DEBUG"
echo "VESA = $VESA"
echo "DEFINES = \"$DEFINES\""
echo "CFLAGS = \"$CFLAGS\""
echo "CPPFLAGS = \"$CPPFLAGS\""
echo "NASMFLAGS = \"$NASMFLAGS\""
if [ ! -d bin ] ; then mkdir bin; fi
if [ -e myos.sym ] ; then rm myos.sym; fi
cd bootsect
echo compiling boot sector...
if [ ! -d obj ] ; then mkdir obj; fi
nasm bootsect.asm $DEFINES $NASMFLAGS -o./obj/bootsect
$TARGET-ld -Ttext=0x7C00 --oformat=binary ./obj/bootsect -o../bin/bootsect
$TARGET-objcopy --change-section-address .text=0x7C00 ./obj/bootsect
$TARGET-nm -n ./obj/bootsect>>../myos.sym
cd ../osldr
echo building osldr...
if [ ! -d obj ] ; then mkdir obj; fi
nasm init.asm $DEFINES $NASMFLAGS -o./obj/init.o
nasm isr.asm $DEFINES $NASMFLAGS -o./obj/isr.o
$TARGET-gcc $CFLAGS video.c -o ./obj/video.o
$TARGET-gcc $CFLAGS disk.c -o ./obj/disk.o
$TARGET-gcc $CFLAGS fat.c -o ./obj/fat.o
$TARGET-gcc $CFLAGS elf.c -o ./obj/elf.o
$TARGET-gcc $CFLAGS osldr.c -o ./obj/osldr.o
$TARGET-ld -Tosldr.ld
$TARGET-objcopy --strip-debug ./obj/osldr ./obj/osldr-nodbg
$TARGET-objcopy ./obj/osldr-nodbg ../bin/osldr -O binary
$TARGET-nm -n ./obj/osldr>>../myos.sym
cd ../kernel
echo building kernel...
if [ ! -d obj ] ; then mkdir obj; fi
ln $($TARGET-gcc $CFLAGS -print-file-name=crtbegin.o) ./obj/crtbegin.o 2> /dev/null || true
ln $($TARGET-gcc $CFLAGS -print-file-name=crtend.o) ./obj/crtend.o 2> /dev/null || true
ln $($TARGET-gcc $CFLAGS -print-file-name=libgcc.a) ./obj/libgcc.a 2> /dev/null || true
ln $($TARGET-gcc $CFLAGS -print-file-name=libsupc++.a) ./obj/libsupc++.a 2> /dev/null || true
nasm startup.S $DEFINES $NASMFLAGS -o./obj/startup.o
nasm isr.asm $DEFINES $NASMFLAGS -o./obj/isr.o
$TARGET-as crti.s -o ./obj/crti.o
$TARGET-as crtn.s -o ./obj/crtn.o
$TARGET-gcc $CPPFLAGS VESA.cc -o ./obj/VESA.o
$TARGET-gcc $CPPFLAGS buffer.cc -o ./obj/buffer.o
$TARGET-gcc $CFLAGS clock.c -o ./obj/clock.o
$TARGET-gcc $CPPFLAGS disk.cc -o ./obj/disk.o
$TARGET-gcc $CPPFLAGS drawing.cc -o ./obj/drawing.o
$TARGET-gcc $CPPFLAGS elf.cc -o ./obj/elf.o
$TARGET-gcc $CFLAGS exceptions.c -o ./obj/exceptions.o
$TARGET-gcc $CPPFLAGS fat.cc -o ./obj/fat.o
$TARGET-gcc $CPPFLAGS fpu.cc -o ./obj/fpu.o
$TARGET-gcc $CPPFLAGS fs.cc -o ./obj/fs.o
$TARGET-gcc $CFLAGS interrupt.c -o ./obj/interrupt.o
$TARGET-gcc $CPPFLAGS kcpp.cc -o ./obj/kcpp.o
$TARGET-gcc $CPPFLAGS kernel.cc -o ./obj/kernel.o
$TARGET-gcc $CPPFLAGS keyboard.cc -o ./obj/keyboard.o
$TARGET-gcc $CPPFLAGS memory.cc -o ./obj/memory.o
$TARGET-gcc $CPPFLAGS mouse.cc -o ./obj/mouse.o
$TARGET-gcc $CFLAGS process.c -o ./obj/process.o
$TARGET-gcc $CFLAGS string.c -o ./obj/string.o
$TARGET-gcc $CPPFLAGS syscall.cc -o ./obj/syscall.o
$TARGET-gcc $CFLAGS task.c -o ./obj/task.o
$TARGET-gcc $CPPFLAGS timer.cc -o ./obj/timer.o
$TARGET-gcc $CPPFLAGS video.cc -o ./obj/video.o
$TARGET-ld -shared -Tkernel.ld
$TARGET-ld -shared -Tkernel.ld -o ./obj/kernel -Ttext=0xC0000000
$TARGET-nm -n -D ./obj/kernel>>../myos.sym
$TARGET-objdump ./obj/kernel -t | grep \*UND\*
$TARGET-strip ../bin/kernel
cd ../vesadrvr
echo building vesadrvr.o...
if [ ! -d obj ] ; then mkdir obj; fi
nasm $DEFINES $NASMFLAGS vesadrvr.asm -o./obj/vesa_asm.o
$TARGET-gcc $CFLAGS vesadrvr.c -o ./obj/vesa_c.o
$TARGET-ld -i ./obj/vesa_c.o ./obj/vesa_asm.o -o ../bin/vesadrvr.o
cd ../shell
echo building shell...
if [ ! -d obj ] ; then mkdir obj; fi
nasm $DEFINES $NASMFLAGS crt0.S -o./obj/crt0.o
$TARGET-gcc $CFLAGS shell.c -o ./obj/shell.o
$TARGET-ld ./obj/crt0.o ./obj/shell.o -o../bin/shell
$TARGET-nm -n ../bin/shell>>../myos.sym
cd ../
echo copying files...
cp ./splash.bmp ./bin/splash
cp ./kernel/cursor.bmp ./bin/cursor
cp ./kernel/font.bmp ./bin/font
echo Build Completed.