1
1
CXX ?= clang++
2
- CXX_FLAGS = -std=c++20
3
- WARN_FLAGS = -Wall -Wextra -pedantic
4
- OPT_FLAGS = -O3 -march=native
5
- LINK_FLAGS = -flto
6
- ASAN_FLAGS = -g -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address # From https://clang.llvm.org/docs/AddressSanitizer.html
7
- UBSAN_FLAGS = -g -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=undefined # From https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
8
-
2
+ CXX_FLAGS := -std=c++20
3
+ WARN_FLAGS := -Wall -Wextra -Wpedantic
4
+ DEBUG_FLAGS := -O1 -g
5
+ RELEASE_FLAGS := -O3 -march=native
6
+ LINK_OPT_FLAGS := -flto
7
+ ASAN_FLAGS := -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address # From https://clang.llvm.org/docs/AddressSanitizer.html
8
+ DEBUG_ASAN_FLAGS := $(DEBUG_FLAGS ) $(ASAN_FLAGS )
9
+ RELEASE_ASAN_FLAGS := -g $(RELEASE_FLAGS ) $(ASAN_FLAGS )
10
+ UBSAN_FLAGS := -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=undefined # From https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
11
+ DEBUG_UBSAN_FLAGS := $(DEBUG_FLAGS ) $(UBSAN_FLAGS )
12
+ RELEASE_UBSAN_FLAGS := -g $(RELEASE_FLAGS ) $(UBSAN_FLAGS )
13
+
14
+ I_FLAGS := -I ./include
9
15
SHA3_INC_DIR = ./sha3/include
10
16
SUBTLE_INC_DIR = ./subtle/include
11
- DUDECT_INC_DIR = ./dudect/src
12
- I_FLAGS = -I ./include
13
17
DEP_IFLAGS = -I $(SHA3_INC_DIR ) -I $(SUBTLE_INC_DIR )
14
- DUDECT_DEP_IFLAGS = $(DEP_IFLAGS ) -I $(DUDECT_INC_DIR )
15
18
16
- SRC_DIR = include
19
+ SRC_DIR : = include
17
20
ML_KEM_SOURCES := $(shell find $(SRC_DIR ) -name '* .hpp')
18
- BUILD_DIR = build
19
- DUDECT_BUILD_DIR = $(BUILD_DIR ) /dudect
20
- ASAN_BUILD_DIR = $(BUILD_DIR ) /asan
21
- UBSAN_BUILD_DIR = $(BUILD_DIR ) /ubsan
22
-
23
- TEST_DIR = tests
24
- DUDECT_TEST_DIR = $(TEST_DIR ) /dudect
21
+ BUILD_DIR := build
22
+ TEST_BUILD_DIR := $(BUILD_DIR ) /test
23
+ BENCHMARK_BUILD_DIR := $(BUILD_DIR ) /benchmark
24
+ ASAN_BUILD_DIR := $(BUILD_DIR ) /asan
25
+ DEBUG_ASAN_BUILD_DIR := $(ASAN_BUILD_DIR ) /debug
26
+ RELEASE_ASAN_BUILD_DIR := $(ASAN_BUILD_DIR ) /release
27
+ UBSAN_BUILD_DIR := $(BUILD_DIR ) /ubsan
28
+ DEBUG_UBSAN_BUILD_DIR := $(UBSAN_BUILD_DIR ) /debug
29
+ RELEASE_UBSAN_BUILD_DIR := $(UBSAN_BUILD_DIR ) /release
30
+
31
+ TEST_DIR := tests
25
32
TEST_SOURCES := $(wildcard $(TEST_DIR ) /* .cpp)
26
33
TEST_HEADERS := $(wildcard $(TEST_DIR ) /* .hpp)
27
- DUDECT_TEST_SOURCES := $(wildcard $(DUDECT_TEST_DIR ) /* .cpp)
28
- TEST_OBJECTS := $(addprefix $(BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(TEST_SOURCES ) ) ) )
29
- ASAN_TEST_OBJECTS := $(addprefix $(ASAN_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(TEST_SOURCES ) ) ) )
30
- UBSAN_TEST_OBJECTS := $(addprefix $(UBSAN_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(TEST_SOURCES ) ) ) )
31
- TEST_LINK_FLAGS = -lgtest -lgtest_main
32
- TEST_BINARY = $(BUILD_DIR ) /test.out
33
- DUDECT_TEST_BINARIES := $(addprefix $(DUDECT_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .out,$(DUDECT_TEST_SOURCES ) ) ) )
34
- ASAN_TEST_BINARY = $(ASAN_BUILD_DIR ) /test.out
35
- UBSAN_TEST_BINARY = $(UBSAN_BUILD_DIR ) /test.out
36
- GTEST_PARALLEL = ./gtest-parallel/gtest-parallel
37
-
38
- BENCHMARK_DIR = benchmarks
34
+ TEST_OBJECTS := $(addprefix $(TEST_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(TEST_SOURCES ) ) ) )
35
+ TEST_BINARY := $(TEST_BUILD_DIR ) /test.out
36
+ TEST_LINK_FLAGS := -lgtest -lgtest_main
37
+ GTEST_PARALLEL := ./gtest-parallel/gtest-parallel
38
+ DEBUG_ASAN_TEST_OBJECTS := $(addprefix $(DEBUG_ASAN_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(TEST_SOURCES ) ) ) )
39
+ RELEASE_ASAN_TEST_OBJECTS := $(addprefix $(RELEASE_ASAN_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(TEST_SOURCES ) ) ) )
40
+ DEBUG_ASAN_TEST_BINARY := $(DEBUG_ASAN_BUILD_DIR ) /test.out
41
+ RELEASE_ASAN_TEST_BINARY := $(RELEASE_ASAN_BUILD_DIR ) /test.out
42
+ DEBUG_UBSAN_TEST_OBJECTS := $(addprefix $(DEBUG_UBSAN_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(TEST_SOURCES ) ) ) )
43
+ RELEASE_UBSAN_TEST_OBJECTS := $(addprefix $(RELEASE_UBSAN_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(TEST_SOURCES ) ) ) )
44
+ DEBUG_UBSAN_TEST_BINARY := $(DEBUG_UBSAN_BUILD_DIR ) /test.out
45
+ RELEASE_UBSAN_TEST_BINARY := $(RELEASE_UBSAN_BUILD_DIR ) /test.out
46
+
47
+ BENCHMARK_DIR := benchmarks
39
48
BENCHMARK_SOURCES := $(wildcard $(BENCHMARK_DIR ) /* .cpp)
40
49
BENCHMARK_HEADERS := $(wildcard $(BENCHMARK_DIR ) /* .hpp)
41
- BENCHMARK_OBJECTS := $(addprefix $(BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(BENCHMARK_SOURCES ) ) ) )
42
- BENCHMARK_LINK_FLAGS = -lbenchmark -lbenchmark_main -lpthread
43
- BENCHMARK_BINARY = $(BUILD_DIR ) /bench.out
44
- PERF_LINK_FLAGS = -lbenchmark -lbenchmark_main -lpfm -lpthread
45
- PERF_BINARY = $(BUILD_DIR ) /perf.out
50
+ BENCHMARK_OBJECTS := $(addprefix $(BENCHMARK_BUILD_DIR ) /, $(notdir $(patsubst % .cpp,% .o,$(BENCHMARK_SOURCES ) ) ) )
51
+ BENCHMARK_LINK_FLAGS := -lbenchmark -lbenchmark_main -lpthread
52
+ BENCHMARK_BINARY := $(BENCHMARK_BUILD_DIR ) /bench.out
53
+ PERF_LINK_FLAGS := -lbenchmark -lbenchmark_main -lpfm -lpthread
54
+ PERF_BINARY := $(BENCHMARK_BUILD_DIR ) /perf.out
55
+ BENCHMARK_OUT_FILE := bench_result_on_$(shell uname -s) _$(shell uname -r) _$(shell uname -m) _with_$(CXX ) _$(shell $(CXX ) -dumpversion) .json
46
56
47
57
all : test
48
58
49
- $(DUDECT_BUILD_DIR ) :
59
+ $(DEBUG_ASAN_BUILD_DIR ) :
50
60
mkdir -p $@
51
61
52
- $(ASAN_BUILD_DIR ) :
62
+ $(RELEASE_ASAN_BUILD_DIR ) :
53
63
mkdir -p $@
54
64
55
- $(UBSAN_BUILD_DIR ) :
65
+ $(DEBUG_UBSAN_BUILD_DIR ) :
56
66
mkdir -p $@
57
67
58
- $(BUILD_DIR ) :
68
+ $(RELEASE_UBSAN_BUILD_DIR ) :
59
69
mkdir -p $@
60
70
61
- $(SHA3_INC_DIR ) :
62
- git submodule update --init sha3
71
+ $(TEST_BUILD_DIR ) :
72
+ mkdir -p $@
63
73
64
- $(DUDECT_INC_DIR ) : $( SHA3_INC_DIR )
65
- git submodule update --init dudect
74
+ $(BENCHMARK_BUILD_DIR ) :
75
+ mkdir -p $@
66
76
67
- $(SUBTLE_INC_DIR ) : $( DUDECT_INC_DIR )
77
+ $(SUBTLE_INC_DIR ) :
68
78
git submodule update --init subtle
69
79
70
- $(GTEST_PARALLEL ) : $(SUBTLE_INC_DIR )
80
+ $(SHA3_INC_DIR ) : $(SUBTLE_INC_DIR )
81
+ git submodule update --init sha3
82
+
83
+ $(GTEST_PARALLEL ) : $(SHA3_INC_DIR )
71
84
git submodule update --init gtest-parallel
72
85
73
- $(BUILD_DIR ) /% .o : $(TEST_DIR ) /% .cpp $(BUILD_DIR ) $(SHA3_INC_DIR ) $(SUBTLE_INC_DIR )
74
- $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(OPT_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
86
+ $(TEST_BUILD_DIR ) /% .o : $(TEST_DIR ) /% .cpp $(TEST_BUILD_DIR ) $(SHA3_INC_DIR ) $( ASCON_INC_DIR ) $(SUBTLE_INC_DIR )
87
+ $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(RELEASE_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
75
88
76
- $(ASAN_BUILD_DIR ) /% .o : $(TEST_DIR ) /% .cpp $(ASAN_BUILD_DIR ) $(SHA3_INC_DIR ) $(SUBTLE_INC_DIR )
77
- $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(ASAN_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
89
+ $(DEBUG_ASAN_BUILD_DIR ) /% .o : $(TEST_DIR ) /% .cpp $(DEBUG_ASAN_BUILD_DIR ) $(SHA3_INC_DIR ) $( ASCON_INC_DIR ) $(SUBTLE_INC_DIR )
90
+ $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(DEBUG_ASAN_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
78
91
79
- $(UBSAN_BUILD_DIR ) /% .o : $(TEST_DIR ) /% .cpp $(UBSAN_BUILD_DIR ) $(SHA3_INC_DIR ) $(SUBTLE_INC_DIR )
80
- $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(UBSAN_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
92
+ $(RELEASE_ASAN_BUILD_DIR ) /% .o : $(TEST_DIR ) /% .cpp $(RELEASE_ASAN_BUILD_DIR ) $(SHA3_INC_DIR ) $(ASCON_INC_DIR ) $(SUBTLE_INC_DIR )
93
+ $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(RELEASE_ASAN_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
94
+
95
+ $(DEBUG_UBSAN_BUILD_DIR ) /% .o : $(TEST_DIR ) /% .cpp $(DEBUG_UBSAN_BUILD_DIR ) $(SHA3_INC_DIR ) $(ASCON_INC_DIR ) $(SUBTLE_INC_DIR )
96
+ $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(DEBUG_UBSAN_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
97
+
98
+ $(RELEASE_UBSAN_BUILD_DIR ) /% .o : $(TEST_DIR ) /% .cpp $(RELEASE_UBSAN_BUILD_DIR ) $(SHA3_INC_DIR ) $(ASCON_INC_DIR ) $(SUBTLE_INC_DIR )
99
+ $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(RELEASE_UBSAN_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
81
100
82
101
$(TEST_BINARY ) : $(TEST_OBJECTS )
83
- $(CXX ) $(OPT_FLAGS ) $(LINK_FLAGS ) $^ $(TEST_LINK_FLAGS ) -o $@
102
+ $(CXX ) $(RELEASE_FLAGS ) $(LINK_OPT_FLAGS ) $^ $(TEST_LINK_FLAGS ) -o $@
103
+
104
+ $(DEBUG_ASAN_TEST_BINARY ) : $(DEBUG_ASAN_TEST_OBJECTS )
105
+ $(CXX ) $(DEBUG_ASAN_FLAGS ) $^ $(TEST_LINK_FLAGS ) -o $@
84
106
85
- $(DUDECT_BUILD_DIR ) / % .out : $(DUDECT_TEST_DIR ) / % .cpp $( DUDECT_BUILD_DIR ) $( SHA3_INC_DIR ) $( SUBTLE_INC_DIR ) $( DUDECT_INC_DIR )
86
- $(CXX ) $(CXX_FLAGS ) $( WARN_FLAGS ) $(OPT_FLAGS ) $( I_FLAGS ) $( DUDECT_DEP_IFLAGS ) -lm $( LINK_FLAGS ) $< -o $@
107
+ $(RELEASE_ASAN_TEST_BINARY ) : $(RELEASE_ASAN_TEST_OBJECTS )
108
+ $(CXX ) $(RELEASE_ASAN_FLAGS ) $^ $(TEST_LINK_FLAGS ) -o $@
87
109
88
- $(ASAN_TEST_BINARY ) : $(ASAN_TEST_OBJECTS )
89
- $(CXX ) $(ASAN_FLAGS ) $^ $(TEST_LINK_FLAGS ) -o $@
110
+ $(DEBUG_UBSAN_TEST_BINARY ) : $(DEBUG_UBSAN_TEST_OBJECTS )
111
+ $(CXX ) $(DEBUG_UBSAN_FLAGS ) $^ $(TEST_LINK_FLAGS ) -o $@
90
112
91
- $(UBSAN_TEST_BINARY ) : $(UBSAN_TEST_OBJECTS )
92
- $(CXX ) $(UBSAN_FLAGS ) $^ $(TEST_LINK_FLAGS ) -o $@
113
+ $(RELEASE_UBSAN_TEST_BINARY ) : $(RELEASE_UBSAN_TEST_OBJECTS )
114
+ $(CXX ) $(RELEASE_UBSAN_FLAGS ) $^ $(TEST_LINK_FLAGS ) -o $@
93
115
94
116
test : $(TEST_BINARY ) $(GTEST_PARALLEL )
95
117
$(GTEST_PARALLEL ) $< --print_test_times
96
118
97
- dudect_test_build : $(DUDECT_TEST_BINARIES )
119
+ debug_asan_test : $(DEBUG_ASAN_TEST_BINARY ) $(GTEST_PARALLEL )
120
+ $(GTEST_PARALLEL ) $< --print_test_times
121
+
122
+ release_asan_test : $(RELEASE_ASAN_TEST_BINARY ) $(GTEST_PARALLEL )
123
+ $(GTEST_PARALLEL ) $< --print_test_times
98
124
99
- asan_test : $(ASAN_TEST_BINARY ) $(GTEST_PARALLEL )
125
+ debug_ubsan_test : $(DEBUG_UBSAN_TEST_BINARY ) $(GTEST_PARALLEL )
100
126
$(GTEST_PARALLEL ) $< --print_test_times
101
127
102
- ubsan_test : $(UBSAN_TEST_BINARY ) $(GTEST_PARALLEL )
128
+ release_ubsan_test : $(RELEASE_UBSAN_TEST_BINARY ) $(GTEST_PARALLEL )
103
129
$(GTEST_PARALLEL ) $< --print_test_times
104
130
105
- $(BUILD_DIR ) /% .o : $(BENCHMARK_DIR ) /% .cpp $(BUILD_DIR ) $(SHA3_INC_DIR ) $(SUBTLE_INC_DIR )
106
- $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(OPT_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
131
+ $(BENCHMARK_BUILD_DIR ) /% .o : $(BENCHMARK_DIR ) /% .cpp $(BENCHMARK_BUILD_DIR ) $(SHA3_INC_DIR ) $( ASCON_INC_DIR ) $(SUBTLE_INC_DIR )
132
+ $(CXX ) $(CXX_FLAGS ) $(WARN_FLAGS ) $(RELEASE_FLAGS ) $(I_FLAGS ) $(DEP_IFLAGS ) -c $< -o $@
107
133
108
134
$(BENCHMARK_BINARY ) : $(BENCHMARK_OBJECTS )
109
- $(CXX ) $(OPT_FLAGS ) $(LINK_FLAGS ) $^ $(BENCHMARK_LINK_FLAGS ) -o $@
135
+ $(CXX ) $(RELEASE_FLAGS ) $(LINK_OPT_FLAGS ) $^ $(BENCHMARK_LINK_FLAGS ) -o $@
110
136
111
137
benchmark : $(BENCHMARK_BINARY )
112
138
# Must *not* build google-benchmark with libPFM
113
139
./$< --benchmark_time_unit=us --benchmark_min_warmup_time=.5 --benchmark_enable_random_interleaving=true --benchmark_repetitions=10 --benchmark_min_time=0.1s --benchmark_display_aggregates_only=true --benchmark_counters_tabular=true
114
140
115
141
$(PERF_BINARY ) : $(BENCHMARK_OBJECTS )
116
- $(CXX ) $(OPT_FLAGS ) $(LINK_FLAGS ) $^ $(PERF_LINK_FLAGS ) -o $@
142
+ $(CXX ) $(RELEASE_FLAGS ) $(LINK_OPT_FLAGS ) $^ $(PERF_LINK_FLAGS ) -o $@
117
143
118
144
perf : $(PERF_BINARY )
119
145
# Must build google-benchmark with libPFM, follow https://gist.github.com/itzmeanjan/05dc3e946f635d00c5e0b21aae6203a7
@@ -124,5 +150,5 @@ perf: $(PERF_BINARY)
124
150
clean :
125
151
rm -rf $(BUILD_DIR )
126
152
127
- format : $(ML_KEM_SOURCES ) $(TEST_SOURCES ) $(TEST_HEADERS ) $(DUDECT_TEST_SOURCES ) $( BENCHMARK_SOURCES ) $(BENCHMARK_HEADERS )
153
+ format : $(ML_KEM_SOURCES ) $(TEST_SOURCES ) $(TEST_HEADERS ) $(BENCHMARK_SOURCES ) $(BENCHMARK_HEADERS )
128
154
clang-format -i $^
0 commit comments