forked from FedorLap2006/DepthOS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
131 lines (117 loc) · 3.3 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
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
ifeq ($(OS),Windows_NT)
BUILDOS ?= win
else
BUILDOS ?= nix
endif
ARCH?=x86
DEBUG?=on
OSVER?=1.0
OSNAME?=DepthOS
BINCPATH?=/bin
ifeq ($(BUILDOS),win)
CC=$(BINCPATH)/i686-elf-gcc
LD=$(BINCPATH)/i686-elf-ld
else
CC=$(BINCPATH)/gcc
LD=$(BINCPATH)/ld
endif
ASM=nasm -f elf32
CSTD=11
CEMU=-m32
CCFLAGS= -Iinclude -ffreestanding -nostdlib -nostdinc -fno-builtin -fno-exceptions -fno-leading-underscore -fno-pic
CCFLAGS += -W -Wall -Wno-unused-parameter -Wno-type-limits -Wno-parentheses -Wno-unused-variable -Wno-maybe-uninitialized -Wno-return-local-addr -Wno-return-type
ASFLAGS = -m32
ifeq ($(BUILDOS),win)
# LDEMU=-mi386pe
LDEMU=-melf_i386
else
LDEMU=-melf_i386
endif
LDFILE=link.ld
OUTBIN=$(OSNAME)-$(OSVER)
# CSOURCES ?=
# ASMSOURCES ?=
# NASMSOURCES ?=
CSOURCES +=kmain.c
NASMSOURCES +=loader.asm
#CSOURCES += $(shell find . -name "*.c" -type f -print )
#ASMSOURCES += $(shell find . -name "*.s" -type f -print )
#NASMSOURCES += $(shell find . -name "*.asm" -type f -print )
CSOURCES +=$(wildcard */*.c)
ASMSOURCES +=$(wildcard */*.S)
ASMSOURCES +=$(wildcard */*.s)
NASMSOURCES +=$(wildcard */*.asm)
# OBJS=build/*.o
# .PHONY: all clean
CSOURCES+=$(wildcard */$(ARCH)/*.c)
ASMSOURCES+=$(wildcard */$(ARCH)/*.S)
ASMSOURCES+=$(wildcard */$(ARCH)/*.s)
NASMSOURCES+=$(wildcard */$(ARCH)/*.asm)
all: os_info clean build test
os_info:
@echo ---------- build $(OSNAME) ----------
@echo -------- os version is $(OSVER) --------
@echo ---------- build for $(BUILDOS) ----------
@echo
clean:
@rm -f build/*.o
@rm -f build/*.bin
@rm -f $(OSNAME)-*
build: checks kernel img iso
checks:
kernel: $(CSOURCES) $(ASMSOURCES) $(NASMSOURCES) $(LDFILE)
@echo ---------- build kernel -----------
ifeq ($(DEBUG),on)
$(CC) $(CEMU) -std=c$(CSTD) -g -c -DOSVER=\"$(OSVER)\" $(CSOURCES) $(CCFLAGS)
ifeq ($(DEBUG),true)
$(CC) $(CEMU) -std=c$(CSTD) -g -c -DOSVER=\"$(OSVER)\" $(CSOURCES) $(CCFLAGS)
endif
else
$(CC) $(CEMU) -std=c$(CSTD) -c -DOSVER=\"$(OSVER)\" $(CSOURCES) $(CCFLAGS)
endif
@mkdir -p build
@mv *.o build/
$(ASM) $(NASMSOURCES)
$(CC) $(CEMU) -c $(ASMSOURCES)
@mv *.o build/
$(LD) $(LDEMU) -T$(LDFILE) -o build/$(OUTBIN).bin build/*.o --build-id=none
ifeq ($(BUILDOS),win)
objcopy -O elf32-i386 build/$(OUTBIN).bin $(OUTBIN)
else
cp build/$(OUTBIN).bin $(OUTBIN)
endif
img:
iso:
hex_info:
@echo ---------- HEX INFO ----------
@echo loader hex info
hexdump -x build/loader.o
@echo kernel hex info
hexdump -x $(OUTBIN)
elf_info:
@echo ---------- ELF INFO ----------
readelf -l $(OUTBIN)
#dis_asm:
# @echo ---------- DIS ASM ----------
# @echo loader disasm
# ndisasm -b 32 build/loader.o
# @echo kernel disasm
# ndisasm -b 32 $(OUTBIN)
obj_info:
@echo ---------- OBJ INFO ----------
@echo loader obj info
objdump -f -h build/loader.o
@echo kernel obj info
objdump -f -h $(OUTBIN)
info: hex_info obj_info elf_info # dis_asm
test:
@echo
@echo ----------- testing os ------------
@echo
ifeq ($(DEBUG), on)
qemu-system-i386 -M pc-i440fx-2.8 -kernel $(OUTBIN) # -S -s # -nographic
else ifeq ($(DEBUG), true)
qemu-system-i386 -M pc-i440fx-2.8 -kernel $(OUTBIN) # -S -s # -nographic
else
qemu-system-i386 -M pc-i440fx-2.8 -kernel $(OUTBIN) # -d int,pcall,cpu,fpu -D qemu_log.log # -S -s # -nographic
endif