-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
80 lines (59 loc) · 1.51 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
TARGET_EXEC = dcc
CC = clang++
SRC = $(wildcard src/*.cpp) $(wildcard src/**/*.cpp) $(wildcard src/**/**/*.cpp) $(wildcard src/**/**/**/*.cpp)
TEST = $(wildcard test/tests/*.c)
TESTOBJ = $(TEST:.c=.S)
OBJ = $(SRC:.cpp=.o)
ASM = $(SRC:.cpp=.S)
BIN = bin
TESTDIR = test
INC_DIR_SRC = -Isrc
INC_DIR_LIB =
DEBUGFLAGS = $(INC_DIR_SRC) $(INC_DIR_LIB) -Wall -g
RELEASEFLAGS = $(INC_DIR_SRC) $(INC_DIR_LIB) -O2
ASMFLAGS = $(INC_DIR_SRC) $(INC_DIR_LIBS) -Wall
LDFLAGS = $(LIBS) -lm -fuse-ld=mold
.PHONY: all libs clean test
all:
$(MAKE) -j8 bld
$(MAKE) link
dirs:
mkdir -p ./$(BIN)
link: $(OBJ)
$(CC) -o $(BIN)/$(TARGET_EXEC) $^ $(LDFLAGS)
bld:
$(MAKE) clean
$(MAKE) dirs
$(MAKE) obj
obj: $(OBJ)
asm: cleanassembly $(ASM)
%.o: %.cpp
$(CC) -std=c++20 -o $@ -c $< $(DEBUGFLAGS)
%.S: %.cpp
@echo 'Building file: $<'
@echo 'Invoking: GCC C++ Compiler'
@echo 'Building ASM'
$(CC) -std=c++20 -S -O -o $@ -c $< $(ASMFLAGS)
@echo 'Finished building: $<'
@echo ' '
%.S: %.c
./$(BIN)/$(TARGET_EXEC) $< $@
build: dirs link
run:
./$(BIN)/$(TARGET_EXEC) test.c test.S
dltest:
rm -rf $(TESTOBJ)
test: all
$(CC) -std=c++2a -o $(TESTDIR)/testbuild $(TESTDIR)/tmain.cpp
./$(TESTDIR)/testbuild
test1: run
testasm:
$(CC) -o $(TESTDIR)/test.o -c test.S
clang -o $(TESTDIR)/main.o -c $(TESTDIR)/main.c
$(CC) -o $(TESTDIR)/test $(TESTDIR)/main.o $(TESTDIR)/test.o
./$(TESTDIR)/test
clean:
clear
rm -rf $(BIN) $(OBJ)
cleanassembly:
rm -rf $(ASM)