-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmakefile
More file actions
141 lines (107 loc) · 4.08 KB
/
makefile
File metadata and controls
141 lines (107 loc) · 4.08 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
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
132
133
134
135
136
137
138
139
140
141
# Makefile for Graph-Based Routing System Simulation
SHELL := /bin/bash
CXX = g++
# --- Flags ---
WARNINGFLAGS = -Wall -Wextra -Wpedantic -Wconversion -Werror
CXXFLAGS = -std=c++17 $(WARNINGFLAGS) -DPROGRESS_BAR
# Release Flags
OPTIMFLAGS = -O3 -march=native
# Debug Flags
DEBUGFLAGS = -g -O0
SANITIZEFLAGS = -fsanitize=address -fsanitize=undefined
SANITIZE_LDFLAGS = -lasan -lubsan
# --- Phase 1 Definitions ---
INCLUDES1 = -IPhase-1/inc
DEFINES1 = -DPHASE_1
# Source files inside the phase folder
SRC1 = $(wildcard Phase-1/src/*.cpp)
# Object files for the library (stored next to source)
OBJS1_OPT = $(SRC1:.cpp=.opt.o)
OBJS1_DBG = $(SRC1:.cpp=.dbg.o)
# Unique driver object for Phase 1 to prevent conflicts
DRIVER1_OPT = driver.p1.opt.o
DRIVER1_DBG = driver.p1.dbg.o
# --- Phase 2 Definitions ---
INCLUDES2 = -IPhase-2/inc
DEFINES2 = -DPHASE_2
SRC2 = $(wildcard Phase-2/src/*.cpp)
OBJS2_OPT = $(SRC2:.cpp=.opt.o)
OBJS2_DBG = $(SRC2:.cpp=.dbg.o)
DRIVER2_OPT = driver.p2.opt.o
DRIVER2_DBG = driver.p2.dbg.o
# --- Phase 3 Definitions ---
INCLUDES3 = -IPhase-3/inc
DEFINES3 = -DPHASE_3
SRC3 = $(wildcard Phase-3/src/*.cpp)
OBJS3_OPT = $(SRC3:.cpp=.opt.o)
OBJS3_DBG = $(SRC3:.cpp=.dbg.o)
DRIVER3_OPT = driver.p3.opt.o
DRIVER3_DBG = driver.p3.dbg.o
# --- Target Executables ---
EXEC1 = phase1
EXEC2 = phase2
EXEC3 = phase3
DEBUG_EXEC1 = phase1-debug
DEBUG_EXEC2 = phase2-debug
DEBUG_EXEC3 = phase3-debug
# --- Top Level Rules ---
all: $(EXEC1) $(EXEC2) $(EXEC3)
debug: $(DEBUG_EXEC1) $(DEBUG_EXEC2) $(DEBUG_EXEC3)
# --- Phase 1 Build Rules ---
# Link Phase 1 Optimized
$(EXEC1): $(DRIVER1_OPT) $(OBJS1_OPT)
$(CXX) $(OPTIMFLAGS) -o $@ $^
# Link Phase 1 Debug
$(DEBUG_EXEC1): $(DRIVER1_DBG) $(OBJS1_DBG)
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) -o $@ $^ $(SANITIZE_LDFLAGS)
# Compile Driver for Phase 1
$(DRIVER1_OPT): driver.cpp
$(CXX) $(CXXFLAGS) $(OPTIMFLAGS) $(INCLUDES1) $(DEFINES1) -c $< -o $@
$(DRIVER1_DBG): driver.cpp
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) $(INCLUDES1) $(DEFINES1) -c $< -o $@
# Compile Phase 1 Library Sources
Phase-1/src/%.opt.o: Phase-1/src/%.cpp
$(CXX) $(CXXFLAGS) $(OPTIMFLAGS) $(INCLUDES1) $(DEFINES1) -c $< -o $@
Phase-1/src/%.dbg.o: Phase-1/src/%.cpp
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) $(INCLUDES1) $(DEFINES1) -c $< -o $@
# --- Phase 2 Build Rules ---
# Link Phase 2 Optimized
$(EXEC2): $(DRIVER2_OPT) $(OBJS2_OPT)
$(CXX) $(OPTIMFLAGS) -o $@ $^
# Link Phase 2 Debug
$(DEBUG_EXEC2): $(DRIVER2_DBG) $(OBJS2_DBG)
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) -o $@ $^ $(SANITIZE_LDFLAGS)
# Compile Driver for Phase 2
$(DRIVER2_OPT): driver.cpp
$(CXX) $(CXXFLAGS) $(OPTIMFLAGS) $(INCLUDES2) $(DEFINES2) -c $< -o $@
$(DRIVER2_DBG): driver.cpp
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) $(INCLUDES2) $(DEFINES2) -c $< -o $@
# Compile Phase 2 Library Sources
Phase-2/src/%.opt.o: Phase-2/src/%.cpp
$(CXX) $(CXXFLAGS) $(OPTIMFLAGS) $(INCLUDES2) $(DEFINES2) -c $< -o $@
Phase-2/src/%.dbg.o: Phase-2/src/%.cpp
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) $(INCLUDES2) $(DEFINES2) -c $< -o $@
# --- Phase 3 Build Rules ---
# Link Phase 3 Optimized
$(EXEC3): $(DRIVER3_OPT) $(OBJS3_OPT)
$(CXX) $(OPTIMFLAGS) -o $@ $^
# Link Phase 3 Debug
$(DEBUG_EXEC3): $(DRIVER3_DBG) $(OBJS3_DBG)
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) -o $@ $^ $(SANITIZE_LDFLAGS)
# Compile Driver for Phase 3
$(DRIVER3_OPT): driver.cpp
$(CXX) $(CXXFLAGS) $(OPTIMFLAGS) $(INCLUDES3) $(DEFINES3) -c $< -o $@
$(DRIVER3_DBG): driver.cpp
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) $(INCLUDES3) $(DEFINES3) -c $< -o $@
# Compile Phase 3 Library Sources
Phase-3/src/%.opt.o: Phase-3/src/%.cpp
$(CXX) $(CXXFLAGS) $(OPTIMFLAGS) $(INCLUDES3) $(DEFINES3) -c $< -o $@
Phase-3/src/%.dbg.o: Phase-3/src/%.cpp
$(CXX) $(CXXFLAGS) $(DEBUGFLAGS) $(SANITIZEFLAGS) $(INCLUDES3) $(DEFINES3) -c $< -o $@
# --- Cleanup ---
clean:
rm -f $(EXEC1) $(EXEC2) $(EXEC3)
rm -f $(DEBUG_EXEC1) $(DEBUG_EXEC2) $(DEBUG_EXEC3)
rm -f *.o *.opt.o *.dbg.o
rm -f Phase-1/src/*.o Phase-2/src/*.o Phase-3/src/*.o
.PHONY: all debug clean