-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
82 lines (68 loc) · 2.22 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
# Generic Loader for Operating System Software (GLOSS)
# Makefile
.PHONY: all clean install
all:
MAKEFILE += --no-builtin-rules
.SUFFIXES:
# Build Tools
CC := x86_64-elf-gcc-5.3.0
CXX := x86_64-elf-g++-5.3.0
LD := x86_64-elf-ld-2.26
AS := yasm
# Basic Command Line Tools
RM := rm -rf
MKDIR := mkdir -p
TR := tr
FIND := find
# Build Commands
BUILD.o.c = $(CC) $(CPPFLAGS) $(CFLAGS) -c
BUILD.o.cpp = $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
BUILD.o.asm = $(AS) $(ASFLAGS)
OUTPUT.file = -o $@
# Redefine VPATH
vpath
vpath %.c Source
vpath %.cpp Source
vpath %.asm Source
# Object Files (Built From Source Files)
OBJ_C := $(addprefix Build/Objects/,$(patsubst %.c,%.o,$(shell find Source -type f -name '*.c' | sed 's/Source\///g')))
OBJ_CXX := $(addprefix Build/Objects/,$(patsubst %.cpp,%.o,$(shell find Source -type f -name '*.cpp' | sed 's/Source\///g')))
OBJ_ASM := $(addprefix Build/Objects/,$(patsubst %.asm,%.o,$(shell find Source -type f -name '*.asm' | sed 's/Source\///g')))
SRC_INC := $(shell find Source -type f -name '*.inc')
OBJ := $(OBJ_C) $(OBJ_CXX) $(OBJ_ASM)
# Default Rules
Build/Objects/%.o: %.c
@$(MKDIR) $(@D)
@$(BUILD.o.c) $(OUTPUT.file) $<
Build/Objects/%.o: %.cpp
@$(MKDIR) $(@D)
@$(BUILD.o.cpp) $(OUTPUT.file) $<
Build/Objects/%.o: %.asm
@$(MKDIR) $(@D)
@$(BUILD.o.asm) $(OUTPUT.file) $<
# Define Specials
OBJ := $(filter-out Build/Objects/Boot/BootISO9660.o,$(OBJ))
Build/Objects/Boot/BootISO9660.o: $(SRC_INC)
Build/Binaries/BootISO9660.bin: Build/Objects/Boot/BootISO9660.o
@$(MKDIR) $(@D)
@cat $< > $@
#Build/Binaries/Common.bin: Build/Objects/Common.o
# @$(MKDIR) $(@D)
# @cat $< > $@
#Build/Binaries/Gloss.sys: $(OBJ))
# @$(MKDIR) $(@D)
# @$(CC) $(CPPFLAGS) $(CFLAGS) -T link.ld $(OUTPUT.file) $< $(LDFLAGS)
Build/Image/Boot.iso: Build/Binaries/BootISO9660.bin
@$(MKDIR) $(@D)
@$(MKDIR) Build/Structure/ISO/boot
@cp Build/Binaries/BootISO9660.bin Build/Structure/ISO
@mv Build/Structure/ISO/BootISO9660.bin Build/Structure/ISO/boot/bootsect.bin
@xorriso -as mkisofs -R -J -c boot/bootcat.bin -b boot/bootsect.bin -no-emul-boot -boot-load-size 4 $(OUTPUT.file) Build/Structure/ISO
# Main Command
all: Build/Image/Boot.iso
# Clean Command
clean:
@$(RM) Build
# Run Command
run: all
@qemu-system-x86_64 -cdrom Build/Image/Boot.iso