-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
110 lines (100 loc) · 3.86 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
SRCDIR = src
BUILDDIR = bin
SCRIPTSDIR = Scripts
BUILDTYPE ?= Debug
CXX = g++
AS = nasm
AR = ar
OBJCPY = objcopy
VALGRIND = valgrind
PYTHON = python3
MKDIR = $(PYTHON) $(SCRIPTSDIR)/MakeDirectory.py
rwildcard = $(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d))
CXXFLAGS = -Wall -Wextra -Werror -I $(SRCDIR)/Lib -I $(SRCDIR)/Platform
ASFLAGS = -Werror -f elf64 -I $(SRCDIR) -I $(SRCDIR)/Lib -I $(SRCDIR)/Platform
ARFLAGS = -rcs
OBJCPYFLAGS = -O elf64-x86-64 -B i386 -I binary
VALGRINDFLAGS = -s --leak-check=full --show-leak-kinds=all
ASLFLAGS = -oa
ifeq ($(BUILDTYPE), Debug)
ASFLAGS += -g -O0 -DDebug
CXXFLAGS += -g -O0 -DDebug
else
CXXFLAGS += -O2
endif
HEADERS = $(call rwildcard,$(SRCDIR),*.hpp)
HEADERS += $(call rwildcard,$(SRCDIR)/Platform,*.cpp)
HEADERS += $(SRCDIR)/Lib/MathLib.hpp
BUILDSYSDEPS = $(call rwildcard,$(SRCDIR)/BuildSystem,*.cpp)
SRCXX = $(call rwildcard,$(SRCDIR)/Lib,*.cpp)
SRCPSF = $(call rwildcard,$(SRCDIR)/Lib,*.psf)
OBJS = $(patsubst $(SRCDIR)/Lib/%.psf, $(BUILDDIR)/Lib/%.o, $(SRCPSF))
$(BUILDDIR)/libExtras.a: $(OBJS)
@$(MKDIR) $(@D)
@$(AR) $(ARFLAGS) $@ $^
@echo "==> Created: $@"
$(BUILDDIR)/libMath.a: $(BUILDDIR)/Lib/LibStub.o
@$(MKDIR) $(@D)
@$(AR) $(ARFLAGS) $@ $<
@echo "==> Created: $@"
$(BUILDDIR)/Lib/LibStub.o: $(SRCDIR)/LibStub/Main.cpp $(HEADERS)
@$(MKDIR) $(@D)
@$(CXX) $(CXXFLAGS) -c $< -o $@
@echo "==> Created: $@"
$(BUILDDIR)/Lib/%.o: $(SRCDIR)/Lib/%.psf Makefile
@$(MKDIR) $(@D)
@$(OBJCPY) $(OBJCPYFLAGS) $< $@
@echo "==> Created: $@"
$(SRCDIR)/Lib/MathLib.hpp: $(SCRIPTSDIR)/MakeIncludes.py $(SRCXX) Makefile
@$(MKDIR) $(@D)
@$(PYTHON) $< $(patsubst $(SRCDIR)/Lib/%.cpp, %.cpp, $(SRCXX)) $@
@echo "==> Created: $@"
$(BUILDDIR)/TmpBuild.out: $(BUILDSYSDEPS) $(HEADERS) $(BUILDDIR)/libExtras.a $(BUILDDIR)/libMath.a
@$(MKDIR) $(@D)
@$(CXX) $(CXXFLAGS) $(BUILDSYSDEPS) -o $@ -L $(BUILDDIR) -l Extras -l Math
@echo "==> Created: $@"
$(BUILDDIR)/Build.mk: $(BUILDDIR)/TmpBuild.out Build.txt
@$(MKDIR) $(@D)
@./$^ $@
@echo "==> Created: $@"
MATHPROGRAMS ?= $(call rwildcard,$(SRCDIR)/TestPrograms/Math,*.txt)
CRYPTMSG ?= $(SRCDIR)/TestPrograms/Cryptography/CaesarCipher.txt
MLITERS ?= 20000
SERVERPORT ?= 8080
INTERPRETERPROGRAM ?= $(SRCDIR)/TestPrograms/Interpreter/Main.txt
CHEMPROGRAM ?= $(SRCDIR)/TestPrograms/Chemistry/All.txt
DISKSIZE ?= 4480
DISKOUTPUT ?= $(BUILDDIR)/Disk.img
DISKTYPE ?= MBR
DISKARGS = -diskSize $(DISKSIZE) -diskType $(DISKTYPE) -output $(DISKOUTPUT)
CARBONS ?= 6
ANIMATIONFILE ?= $(SRCDIR)/TestPrograms/Math/Trigonometry/Sine.txt
POLYNOMIAL ?= $(SRCDIR)/TestPrograms/Math/Polynomial.txt
IMGCONVINPUTTYPE ?= TGA
IMGCONVINPUT ?= $(SRCDIR)/TestPrograms/RPG/Emoji.tga
IMGCONVOUTPUTTYPE ?= P6
IMGCONVOUTPUT ?= $(BUILDDIR)/ImageConverter.ppm
IMGCONVARGS = -inputType $(IMGCONVINPUTTYPE) -input $(IMGCONVINPUT) -outputType $(IMGCONVOUTPUTTYPE) -output $(IMGCONVOUTPUT)
ELFPROGRAM ?= $(BUILDDIR)/ELFParser.out
ELFARGS = -program $(ELFPROGRAM)
4DPROGRAM ?= $(SRCDIR)/TestPrograms/4D/Tesseract.txt
4DARGS ?= -program $(4DPROGRAM)
DBOUTPUT ?= $(BUILDDIR)/DB.bin
DBARGS = -program $(DBOUTPUT)
IMGPROCINPUT ?= $(SRCDIR)/TestPrograms/Cards/Prototype.tga
IMGPROCARGS = -input $(IMGPROCINPUT)
HEADERTREEINPUT ?= $(SRCDIR)/Lib/Host.hpp
OSROOT ?= $(SRCDIR)/TestPrograms/OS
OSCXX = x86_64-elf-$(CXX)
OSCXXFLAGS = $(CXXFLAGS) -DFreestanding -ffreestanding -mno-red-zone -fno-exceptions -fno-rtti -fno-omit-frame-pointer -fstack-protector-all
OSLINKER = $(SRCDIR)/OS/Linker.ld
OSLDFLAGS = $(OSCXXFLAGS) -T $(OSLINKER) -Bsymbolic -nostdlib -Xlinker -Map=$(BUILDDIR)/Kernel.map
OSQEMUCMD = qemu-system-x86_64 -usb -smp 1 -M q35 -m 4096 -rtc base=localtime -cdrom $(BUILDDIR)/OS.img -drive file=$(BUILDDIR)/FAT.img,format=raw,media=disk -boot d
clean:
@$(MKDIR) $(BUILDDIR)
@rm -rf $(BUILDDIR)/*
@touch $(SRCDIR)/Lib/MathLib.hpp
@rm $(SRCDIR)/Lib/MathLib.hpp
@echo "==> Deleted compiled files"
.PHONY: clean
include $(BUILDDIR)/Build.mk