-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
129 lines (101 loc) · 4.86 KB
/
Copy pathmakefile
File metadata and controls
129 lines (101 loc) · 4.86 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
CXX = g++
CXXFLAGS = -std=c++17 -Wall -Wextra -Iinclude
SRCDIR = src
OBJDIR = obj
# Source files (only B-tree related files)
SOURCES = src/Btree.cpp src/main.cpp src/page_manager.cpp src/page_cache.cpp src/writer_queue.cpp src/wal.cpp src/job_scheduler.cpp src/checkpoint_manager.cpp src/version_manager.cpp src/health_monitor.cpp
OBJECTS = $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
# Demo source files
DEMO_SOURCES = src/Btree.cpp src/content_hash_demo.cpp src/page_manager.cpp src/page_cache.cpp src/writer_queue.cpp src/wal.cpp src/job_scheduler.cpp src/checkpoint_manager.cpp src/version_manager.cpp src/health_monitor.cpp
DEMO_OBJECTS = $(DEMO_SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
# Content addressable demo
ADDRESSABLE_SOURCES = src/Btree.cpp src/content_addressable_demo.cpp src/page_manager.cpp src/page_cache.cpp src/writer_queue.cpp src/wal.cpp src/job_scheduler.cpp src/checkpoint_manager.cpp src/version_manager.cpp src/health_monitor.cpp
ADDRESSABLE_OBJECTS = $(ADDRESSABLE_SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
# Deduplication demo
DEDUP_SOURCES = src/Btree.cpp src/deduplication_demo.cpp src/page_manager.cpp src/page_cache.cpp src/writer_queue.cpp src/wal.cpp src/job_scheduler.cpp src/checkpoint_manager.cpp src/version_manager.cpp src/health_monitor.cpp
DEDUP_OBJECTS = $(DEDUP_SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
# Cache performance demo
CACHE_PERF_SOURCES = src/Btree.cpp src/cache_performance_demo.cpp src/page_manager.cpp src/page_cache.cpp src/writer_queue.cpp src/wal.cpp src/job_scheduler.cpp src/checkpoint_manager.cpp src/version_manager.cpp src/health_monitor.cpp
CACHE_PERF_OBJECTS = $(CACHE_PERF_SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
# Job scheduler demo
JOB_SCHED_SOURCES = src/Btree.cpp src/job_scheduler_demo.cpp src/page_manager.cpp src/page_cache.cpp src/writer_queue.cpp src/wal.cpp src/job_scheduler.cpp src/checkpoint_manager.cpp src/version_manager.cpp src/health_monitor.cpp
JOB_SCHED_OBJECTS = $(JOB_SCHED_SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
# MVCC and Health demo
MVCC_HEALTH_SOURCES = src/mvcc_health_demo.cpp src/page_manager.cpp src/version_manager.cpp src/health_monitor.cpp src/job_scheduler.cpp
MVCC_HEALTH_OBJECTS = $(MVCC_HEALTH_SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
# Target executables
TARGET = btree_test
DEMO_TARGET = content_hash_demo
ADDRESSABLE_TARGET = content_addressable_demo
DEDUP_TARGET = deduplication_demo
CACHE_PERF_TARGET = cache_performance_demo
JOB_SCHED_TARGET = job_scheduler_demo
MVCC_HEALTH_TARGET = mvcc_health_demo
# Default target
all: $(TARGET) $(DEMO_TARGET) $(ADDRESSABLE_TARGET) $(DEDUP_TARGET) $(CACHE_PERF_TARGET) $(JOB_SCHED_TARGET) $(MVCC_HEALTH_TARGET)
# Create object directory if it doesn't exist
$(OBJDIR):
mkdir -p $(OBJDIR)
# Compile object files
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp | $(OBJDIR)
$(CXX) $(CXXFLAGS) -c $< -o $@
# Link main executable
$(TARGET): $(OBJECTS)
$(CXX) $(OBJECTS) -o $(TARGET)
# Link demo executable
$(DEMO_TARGET): $(DEMO_OBJECTS)
$(CXX) $(DEMO_OBJECTS) -o $(DEMO_TARGET)
# Link addressable demo executable
$(ADDRESSABLE_TARGET): $(ADDRESSABLE_OBJECTS)
$(CXX) $(ADDRESSABLE_OBJECTS) -o $(ADDRESSABLE_TARGET)
# Link deduplication demo executable
$(DEDUP_TARGET): $(DEDUP_OBJECTS)
$(CXX) $(DEDUP_OBJECTS) -o $(DEDUP_TARGET)
# Link cache performance demo executable
$(CACHE_PERF_TARGET): $(CACHE_PERF_OBJECTS)
$(CXX) $(CACHE_PERF_OBJECTS) -o $(CACHE_PERF_TARGET)
# Link job scheduler demo executable
$(JOB_SCHED_TARGET): $(JOB_SCHED_OBJECTS)
$(CXX) $(JOB_SCHED_OBJECTS) -o $(JOB_SCHED_TARGET)
# Link MVCC and health demo executable
$(MVCC_HEALTH_TARGET): $(MVCC_HEALTH_OBJECTS)
$(CXX) $(MVCC_HEALTH_OBJECTS) -o $(MVCC_HEALTH_TARGET)
# Clean build files
clean:
rm -rf $(OBJDIR) $(TARGET) $(DEMO_TARGET) $(ADDRESSABLE_TARGET) $(DEDUP_TARGET) $(CACHE_PERF_TARGET) $(JOB_SCHED_TARGET) $(MVCC_HEALTH_TARGET)
# Run the test
run: $(TARGET)
./$(TARGET)
# Run the demo
demo: $(DEMO_TARGET)
./$(DEMO_TARGET)
# Run the addressable demo
addressable: $(ADDRESSABLE_TARGET)
./$(ADDRESSABLE_TARGET)
# Run the deduplication demo
dedup: $(DEDUP_TARGET)
./$(DEDUP_TARGET)
# Run the cache performance demo
cache_perf: $(CACHE_PERF_TARGET)
./$(CACHE_PERF_TARGET)
# Run the job scheduler demo
job_sched: $(JOB_SCHED_TARGET)
./$(JOB_SCHED_TARGET)
# Run the MVCC and health demo
mvcc_health: $(MVCC_HEALTH_TARGET)
./$(MVCC_HEALTH_TARGET)
# Run all tests (for CI/CD compatibility)
tests: $(TARGET) $(DEMO_TARGET) $(ADDRESSABLE_TARGET) $(DEDUP_TARGET)
@echo "=== Running Content Hash Demo ==="
./$(DEMO_TARGET)
@echo ""
@echo "=== Running Content Addressable Demo ==="
./$(ADDRESSABLE_TARGET)
@echo ""
@echo "=== Running Deduplication Demo ==="
./$(DEDUP_TARGET)
@echo ""
@echo "=== Testing Basic B-tree Operations ==="
@echo -e "insert 1 apple\ninsert 2 banana\nsearch 1\nsearch 2\nquit" | ./$(TARGET) > /dev/null
@echo "All tests passed!"
.PHONY: all clean run demo addressable dedup cache_perf job_sched mvcc_health tests