-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
55 lines (40 loc) · 1.54 KB
/
Copy pathmakefile
File metadata and controls
55 lines (40 loc) · 1.54 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
NASM32 = nasm
GCC32 = i686-elf-gcc -c -m32 -ffreestanding
LD32 = i686-elf-ld -melf_i386 -T ../elf_i386.x -nostdlib -e main -Ttext 0x10200
OBJCOPY32 = i686-elf-objcopy -j .text -j .data -j .rodata -j .bss -S -O binary
OBJECTDIRECTORY = tmp
SOURCEDIRECTORY = src
all: prepare kernel32.bin
prepare:
mkdir -p $(OBJECTDIRECTORY)
$(OBJECTDIRECTORY)/entrypoint.bin: $(SOURCEDIRECTORY)/entrypoint.s
$(NASM32) -f bin -o $@ $<
dep:
@echo === Make Dependency File ===
make -C $(OBJECTDIRECTORY) -f ../makefile kernel32.elf
@echo === Dependency Search Complete ===
execute-internal-build: dep
make -C $(OBJECTDIRECTORY) -f ../makefile kernel32.elf
$(OBJECTDIRECTORY)/kernel32.elf.bin: execute-internal-build
$(OBJCOPY32) $(OBJECTDIRECTORY)/kernel32.elf $@
kernel32.bin: $(OBJECTDIRECTORY)/entrypoint.bin $(OBJECTDIRECTORY)/kernel32.elf.bin
cat $^ > $@
clean:
rm -f *.bin
rm -f $(OBJECTDIRECTORY)/*.*
CENTRYPOINTOBJECTFILE = main.o
CSOURCEFILES = $(wildcard ../$(SOURCEDIRECTORY)/*.c)
ASSEMBLYSOURCEFILES = $(wildcard ../$(SOURCEDIRECTORY)/*.asm)
COBJECTFILES = $(subst main.o, , $(notdir $(patsubst %.c, %.o, $(CSOURCEFILES))))
ASSEMBLYOBJECTFILES = $(notdir $(patsubst %.asm, %.o, $(ASSEMBLYSOURCEFILES)))
%.o: ../$(SOURCEDIRECTORY)/%.c
$(GCC32) -c $<
%.o: ../$(SOURCEDIRECTORY)/%.asm
$(NASM32) -f elf32 $< -o $@
internal-dependency:
$(GCC32) -MM $(CSOURCEFILES) > dependency.dep
kernel32.elf: $(CENTRYPOINTOBJECTFILE) $(COBJECTFILES) $(ASSEMBLYOBJECTFILES)
$(LD32) -o $@ $^
ifeq (dependency.dep, $(wildcard dependency.dep))
include dependency.dep
endif