-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
187 lines (145 loc) · 5.34 KB
/
Makefile
File metadata and controls
187 lines (145 loc) · 5.34 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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# ============================================================
# Makefile usage summary
#
# Build all executables:
# make
#
# Build individual executables:
# make 2x2 # build 2x2 validation program
# make burnin # build burn-in simulation
# make hist # build histogram simulation
# make temps # build temperatures simulation
#
# Run programs (built automatically if needed):
# make run-2x2 # run 2x2 validation
# make run-burnin # run burn-in simulation
# make run-hist # run histogram simulation
# make run-temps # run temperatures simulation
# make run-temps_zoom # run timing test for parallelisation analysis
#
# Cleanup:
# make clean
#
# Full rebuild:
# make rebuild
# ============================================================
# --- Compiler and flags ---
CXX = g++
CXXFLAGS = -O3 -march=native -std=c++17 -I include -Wall -Wextra -fopenmp
LDFLAGS = -fopenmp
LIBS = -larmadillo
# --- Directories ---
SRC_DIR = src
INC_DIR = include
BUILD_DIR = build
EXE_DIR = $(BUILD_DIR)/exe
OUT_DIR = output
# --- Common source files ---
COMMON_SRC = $(SRC_DIR)/Ising.cpp \
$(SRC_DIR)/simulations.cpp \
$(SRC_DIR)/utils.cpp
COMMON_OBJ = $(COMMON_SRC:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.o)
# --- Executables ---
EXE_VALIDATE = $(EXE_DIR)/validate_2x2
EXE_BURNIN = $(EXE_DIR)/burnin
EXE_HIST = $(EXE_DIR)/histogram
EXE_TEMPS = $(EXE_DIR)/temperatures
EXE_TEMPS_ZOOM = $(EXE_DIR)/temperatures_zoom
EXE_TIMING = $(EXE_DIR)/timing_test
# --- Default: build everything ---
all: $(EXE_VALIDATE) $(EXE_BURNIN) $(EXE_HIST) $(EXE_TEMPS) $(EXE_TEMPS_ZOOM) $(EXE_TIMING)
@echo "\n All executables built successfully in $(EXE_DIR)/\n"
# --------------------------------------------------------------------
# Build individual executables
# --------------------------------------------------------------------
# Build only the 2x2 validation executable
2x2: $(EXE_VALIDATE)
@echo " Built 2x2 validation executable."
$(EXE_VALIDATE): $(COMMON_OBJ) $(BUILD_DIR)/main_2x2.o
mkdir -p $(EXE_DIR)
$(CXX) $(COMMON_OBJ) $(BUILD_DIR)/main_2x2.o -o $@ $(LDFLAGS) $(LIBS)
@echo "Built: $@"
# Build only burn-in executable
burnin: $(EXE_BURNIN)
@echo " Built burn-in executable."
$(EXE_BURNIN): $(COMMON_OBJ) $(BUILD_DIR)/main_burn_in.o
mkdir -p $(EXE_DIR)
$(CXX) $(COMMON_OBJ) $(BUILD_DIR)/main_burn_in.o -o $@ $(LDFLAGS) $(LIBS)
@echo "Built: $@"
# Build only histogram executable
hist: $(EXE_HIST)
@echo " Built histogram executable."
$(EXE_HIST): $(COMMON_OBJ) $(BUILD_DIR)/main_histogram.o
mkdir -p $(EXE_DIR)
$(CXX) $(COMMON_OBJ) $(BUILD_DIR)/main_histogram.o -o $@ $(LDFLAGS) $(LIBS)
@echo "Built: $@"
# Build only temperatures executable
temps: $(EXE_TEMPS)
@echo " Built temperatures executable."
$(EXE_TEMPS): $(COMMON_OBJ) $(BUILD_DIR)/main_temperatures.o
mkdir -p $(EXE_DIR)
$(CXX) $(COMMON_OBJ) $(BUILD_DIR)/main_temperatures.o -o $@ $(LDFLAGS) $(LIBS)
@echo "Built: $@"
# Build only temperatures_zoom executable
temps_zoom: $(EXE_TEMPS_ZOOM)
@echo " Built temperatures_zoom executable."
$(EXE_TEMPS_ZOOM): $(COMMON_OBJ) $(BUILD_DIR)/main_temperatures_zoomed.o
mkdir -p $(EXE_DIR)
$(CXX) $(COMMON_OBJ) $(BUILD_DIR)/main_temperatures_zoomed.o -o $@ $(LDFLAGS) $(LIBS)
@echo "Built: $@"
# Build ony timing_test executable
timing: $(EXE_TIMING)
@echo " Built timing_test executable."
$(EXE_TIMING): $(COMMON_OBJ) $(BUILD_DIR)/main_timing_test.o
mkdir -p $(EXE_DIR)
$(CXX) $(COMMON_OBJ) $(BUILD_DIR)/main_timing_test.o -o $@ $(LDFLAGS) $(LIBS)
@echo "Built: $@"
# --- Generic rule for compiling .cpp into .o ---
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp
mkdir -p $(BUILD_DIR)
$(CXX) $(CXXFLAGS) -c $< -o $@
# --------------------------------------------------------------------
# Run commands
# --------------------------------------------------------------------
run-2x2: $(EXE_VALIDATE)
mkdir -p $(OUT_DIR)
@echo "\n▶ Running 2x2 validation...\n"
./$(EXE_VALIDATE)
@echo "\n Output written to $(OUT_DIR)/\n"
run-burnin: $(EXE_BURNIN)
mkdir -p $(OUT_DIR)
@echo "\n▶ Running burn-in simulation...\n"
./$(EXE_BURNIN)
@echo "\n Burn-in output written to $(OUT_DIR)/\n"
run-hist: $(EXE_HIST)
mkdir -p $(OUT_DIR)
@echo "\n▶ Running histogram simulation...\n"
./$(EXE_HIST)
@echo "\n Histogram output written to $(OUT_DIR)/\n"
run-temps: $(EXE_TEMPS)
mkdir -p $(OUT_DIR)
@echo "\n▶ Running temperatures simulation...\n"
./$(EXE_TEMPS)
@echo "\n Temperatures output written to $(OUT_DIR)/\n"
run-temps_zoom: $(EXE_TEMPS_ZOOM)
mkdir -p $(OUT_DIR)
@echo "\n▶ Running zoomed temperatures simulation...\n"
./$(EXE_TEMPS_ZOOM)
@echo "\n Zoomed temperatures output written to $(OUT_DIR)/\n"
run-timing: $(EXE_TIMING)
mkdir -p $(OUT_DIR)
@echo "\n▶ Running timing test...\n"
./$(EXE_TIMING)
@echo "\n Timing test output written to $(OUT_DIR)/\n"
# --------------------------------------------------------------------
# Cleanup
# --------------------------------------------------------------------
clean:
rm -rf $(BUILD_DIR) $(OUT_DIR)
@echo "🧹 Cleaned build and output directories.\n"
rebuild: clean all
.PHONY: all clean rebuild \
2x2 burnin hist temps \
run-2x2 run-burnin run-hist \
temps_zoom run-temps_zoom \
timing run-timing