33
44FIPS202_SRCS = $(wildcard mlkem/src/fips202/* .c)
55ifeq ($(OPT ) ,1)
6- FIPS202_SRCS += $(wildcard mlkem/src/fips202/native/aarch64/src/*.S) $(wildcard mlkem/src/fips202/native/aarch64/src/*.c) $(wildcard mlkem/src/fips202/native/x86_64/src/*.c) $(wildcard mlkem/src/fips202/native/x86_64/src/*.S) $(wildcard mlkem/src/fips202/native/armv81m/src/*.[csS])
6+ FIPS202_SRCS += $(wildcard mlkem/src/fips202/native/aarch64/src/*.S) \
7+ $(wildcard mlkem/src/fips202/native/aarch64/src/*.c) \
8+ $(wildcard mlkem/src/fips202/native/x86_64/src/*.c) \
9+ $(wildcard mlkem/src/fips202/native/x86_64/src/*.S) \
10+ $(wildcard mlkem/src/fips202/native/armv81m/src/*.[csS])
711endif
812
913SOURCES += $(wildcard mlkem/src/* .c)
1014ifeq ($(OPT ) ,1)
11- SOURCES += $(wildcard mlkem/src/native/aarch64/src/*.[csS]) $(wildcard mlkem/src/native/x86_64/src/*.[csS]) $(wildcard mlkem/src/native/riscv64/src/*.[csS]) $(wildcard mlkem/src/native/ppc64le/src/*.[csS])
12- CFLAGS += -DMLK_CONFIG_USE_NATIVE_BACKEND_ARITH -DMLK_CONFIG_USE_NATIVE_BACKEND_FIPS202
15+ SOURCES += $(wildcard mlkem/src/native/aarch64/src/*.[csS]) \
16+ $(wildcard mlkem/src/native/x86_64/src/*.[csS]) \
17+ $(wildcard mlkem/src/native/riscv64/src/*.[csS]) \
18+ $(wildcard mlkem/src/native/ppc64le/src/*.[csS])
19+ CFLAGS += -DMLK_CONFIG_USE_NATIVE_BACKEND_ARITH \
20+ -DMLK_CONFIG_USE_NATIVE_BACKEND_FIPS202
1321endif
1422
23+ LIB_SRCS := $(SOURCES ) $(FIPS202_SRCS )
24+
1525BASIC_TESTS = test_mlkem gen_KAT test_stack
1626ACVP_TESTS = acvp_mlkem
1727WYCHEPROOF_TESTS = wycheproof_mlkem
@@ -25,52 +35,52 @@ MLKEM512_DIR = $(BUILD_DIR)/mlkem512
2535MLKEM768_DIR = $(BUILD_DIR ) /mlkem768
2636MLKEM1024_DIR = $(BUILD_DIR ) /mlkem1024
2737
28- MLKEM512_OBJS = $(call MAKE_OBJS,$(MLKEM512_DIR ) ,$(SOURCES ) $(FIPS202_SRCS ) )
29- $(MLKEM512_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=512
30- MLKEM768_OBJS = $(call MAKE_OBJS,$(MLKEM768_DIR ) ,$(SOURCES ) $(FIPS202_SRCS ) )
31- $(MLKEM768_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=768
32- MLKEM1024_OBJS = $(call MAKE_OBJS,$(MLKEM1024_DIR ) ,$(SOURCES ) $(FIPS202_SRCS ) )
33- $(MLKEM1024_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=1024
34-
35- # Unit test object files - same sources but with MLK_STATIC_TESTABLE=
36- UNIT_CFLAGS = -DMLK_STATIC_TESTABLE= -Wno-missing-prototypes
38+ MLKEM512_OBJS = $(call MAKE_OBJS,$(MLKEM512_DIR ) ,$(LIB_SRCS ) )
39+ MLKEM768_OBJS = $(call MAKE_OBJS,$(MLKEM768_DIR ) ,$(LIB_SRCS ) )
40+ MLKEM1024_OBJS = $(call MAKE_OBJS,$(MLKEM1024_DIR ) ,$(LIB_SRCS ) )
3741
38- MLKEM512_UNIT_OBJS = $(call MAKE_OBJS,$(MLKEM512_DIR ) /unit,$(SOURCES ) $(FIPS202_SRCS ) )
39- $(MLKEM512_UNIT_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=512 $(UNIT_CFLAGS )
40- MLKEM768_UNIT_OBJS = $(call MAKE_OBJS,$(MLKEM768_DIR ) /unit,$(SOURCES ) $(FIPS202_SRCS ) )
41- $(MLKEM768_UNIT_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=768 $(UNIT_CFLAGS )
42- MLKEM1024_UNIT_OBJS = $(call MAKE_OBJS,$(MLKEM1024_DIR ) /unit,$(SOURCES ) $(FIPS202_SRCS ) )
43- $(MLKEM1024_UNIT_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=1024 $(UNIT_CFLAGS )
42+ MLKEM512_UNIT_OBJS = $(call MAKE_OBJS,$(MLKEM512_DIR ) /unit,$(LIB_SRCS ) )
43+ MLKEM768_UNIT_OBJS = $(call MAKE_OBJS,$(MLKEM768_DIR ) /unit,$(LIB_SRCS ) )
44+ MLKEM1024_UNIT_OBJS = $(call MAKE_OBJS,$(MLKEM1024_DIR ) /unit,$(LIB_SRCS ) )
4445
45- # Alloc test object files - same sources but with custom alloc config
46- MLKEM512_ALLOC_OBJS = $(call MAKE_OBJS,$(MLKEM512_DIR ) /alloc,$(SOURCES ) $(FIPS202_SRCS ) )
47- $(MLKEM512_ALLOC_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=512 -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
48- MLKEM768_ALLOC_OBJS = $(call MAKE_OBJS,$(MLKEM768_DIR ) /alloc,$(SOURCES ) $(FIPS202_SRCS ) )
49- $(MLKEM768_ALLOC_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=768 -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
50- MLKEM1024_ALLOC_OBJS = $(call MAKE_OBJS,$(MLKEM1024_DIR ) /alloc,$(SOURCES ) $(FIPS202_SRCS ) )
51- $(MLKEM1024_ALLOC_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=1024 -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
46+ MLKEM512_ALLOC_OBJS = $(call MAKE_OBJS,$(MLKEM512_DIR ) /alloc,$(LIB_SRCS ) )
47+ MLKEM768_ALLOC_OBJS = $(call MAKE_OBJS,$(MLKEM768_DIR ) /alloc,$(LIB_SRCS ) )
48+ MLKEM1024_ALLOC_OBJS = $(call MAKE_OBJS,$(MLKEM1024_DIR ) /alloc,$(LIB_SRCS ) )
5249
5350CFLAGS += -Imlkem
5451
5552$(BUILD_DIR ) /libmlkem512.a : $(MLKEM512_OBJS )
5653$(BUILD_DIR ) /libmlkem768.a : $(MLKEM768_OBJS )
5754$(BUILD_DIR ) /libmlkem1024.a : $(MLKEM1024_OBJS )
5855
59- # Unit libraries with exposed internal functions
6056$(BUILD_DIR ) /libmlkem512_unit.a : $(MLKEM512_UNIT_OBJS )
6157$(BUILD_DIR ) /libmlkem768_unit.a : $(MLKEM768_UNIT_OBJS )
6258$(BUILD_DIR ) /libmlkem1024_unit.a : $(MLKEM1024_UNIT_OBJS )
6359
64- # Alloc test libraries with custom alloc config
6560$(BUILD_DIR ) /libmlkem512_alloc.a : $(MLKEM512_ALLOC_OBJS )
6661$(BUILD_DIR ) /libmlkem768_alloc.a : $(MLKEM768_ALLOC_OBJS )
6762$(BUILD_DIR ) /libmlkem1024_alloc.a : $(MLKEM1024_ALLOC_OBJS )
6863
6964$(BUILD_DIR ) /libmlkem.a : $(MLKEM512_OBJS ) $(MLKEM768_OBJS ) $(MLKEM1024_OBJS )
7065
66+ # Generic CFLAGS
67+
68+ $(MLKEM512_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=512
69+ $(MLKEM768_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=768
70+ $(MLKEM1024_OBJS ) : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=1024
71+
72+ # Lib objects also get the parameter set above; this covers the test entrypoints
73+ # (not in LIB_SRCS) and, for custom builds like Zephyr, every source.
74+ $(MLKEM512_DIR ) /bin/% : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=512
75+ $(MLKEM768_DIR ) /bin/% : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=768
76+ $(MLKEM1024_DIR ) /bin/% : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=1024
77+
78+ # Per-test CFLAGS
79+
7180$(MLKEM512_DIR ) /bin/bench_mlkem512 : CFLAGS += -Itest/hal
7281$(MLKEM768_DIR ) /bin/bench_mlkem768 : CFLAGS += -Itest/hal
7382$(MLKEM1024_DIR ) /bin/bench_mlkem1024 : CFLAGS += -Itest/hal
83+
7484$(MLKEM512_DIR ) /bin/bench_components_mlkem512 : CFLAGS += -Itest/hal
7585$(MLKEM768_DIR ) /bin/bench_components_mlkem768 : CFLAGS += -Itest/hal
7686$(MLKEM1024_DIR ) /bin/bench_components_mlkem1024 : CFLAGS += -Itest/hal
@@ -79,50 +89,23 @@ $(MLKEM512_DIR)/bin/test_stack512: CFLAGS += -Imlkem/src -fstack-usage
7989$(MLKEM768_DIR ) /bin/test_stack768 : CFLAGS += -Imlkem/src -fstack-usage
8090$(MLKEM1024_DIR ) /bin/test_stack1024 : CFLAGS += -Imlkem/src -fstack-usage
8191
82- $(MLKEM512_DIR ) /test/src/test_alloc.c.o : CFLAGS += -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
83- $(MLKEM768_DIR ) /test/src/test_alloc.c.o : CFLAGS += -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
84- $(MLKEM1024_DIR ) /test/src/test_alloc.c.o : CFLAGS += -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
92+ $(MLKEM512_DIR ) /bin/test_unit512 : CFLAGS += -DMLK_STATIC_TESTABLE= -Wno-missing-prototypes
93+ $(MLKEM768_DIR ) /bin/test_unit768 : CFLAGS += -DMLK_STATIC_TESTABLE= -Wno-missing-prototypes
94+ $(MLKEM1024_DIR ) /bin/test_unit1024 : CFLAGS += -DMLK_STATIC_TESTABLE= -Wno-missing-prototypes
8595
86- $(MLKEM512_DIR ) /test/src/test_unit.c.o : CFLAGS += $( UNIT_CFLAGS )
87- $(MLKEM768_DIR ) /test/src/test_unit.c.o : CFLAGS += $( UNIT_CFLAGS )
88- $(MLKEM1024_DIR ) /test/src/test_unit.c.o : CFLAGS += $( UNIT_CFLAGS )
96+ $(MLKEM512_DIR ) /bin/test_alloc512 : CFLAGS += -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
97+ $(MLKEM768_DIR ) /bin/test_alloc768 : CFLAGS += -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
98+ $(MLKEM1024_DIR ) /bin/test_alloc1024 : CFLAGS += -DMLK_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
8999
90- $(MLKEM512_DIR ) /bin/test_unit512 : CFLAGS += $(UNIT_CFLAGS )
91- $(MLKEM768_DIR ) /bin/test_unit768 : CFLAGS += $(UNIT_CFLAGS )
92- $(MLKEM1024_DIR ) /bin/test_unit1024 : CFLAGS += $(UNIT_CFLAGS )
93-
94- # Unit library object files compiled with MLK_STATIC_TESTABLE=
95- $(MLKEM512_DIR ) /unit_% : CFLAGS += -DMLK_STATIC_TESTABLE= -Wno-missing-prototypes
96- $(MLKEM768_DIR ) /unit_% : CFLAGS += -DMLK_STATIC_TESTABLE= -Wno-missing-prototypes
97- $(MLKEM1024_DIR ) /unit_% : CFLAGS += -DMLK_STATIC_TESTABLE= -Wno-missing-prototypes
98-
99- $(MLKEM512_DIR ) /bin/bench_mlkem512 : $(MLKEM512_DIR ) /test/hal/hal.c.o
100- $(MLKEM768_DIR ) /bin/bench_mlkem768 : $(MLKEM768_DIR ) /test/hal/hal.c.o
101- $(MLKEM1024_DIR ) /bin/bench_mlkem1024 : $(MLKEM1024_DIR ) /test/hal/hal.c.o
102- $(MLKEM512_DIR ) /bin/bench_components_mlkem512 : $(MLKEM512_DIR ) /test/hal/hal.c.o
103- $(MLKEM768_DIR ) /bin/bench_components_mlkem768 : $(MLKEM768_DIR ) /test/hal/hal.c.o
104- $(MLKEM1024_DIR ) /bin/bench_components_mlkem1024 : $(MLKEM1024_DIR ) /test/hal/hal.c.o
105-
106- $(MLKEM512_DIR ) /bin/% : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=512
107- $(MLKEM768_DIR ) /bin/% : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=768
108- $(MLKEM1024_DIR ) /bin/% : CFLAGS += -DMLK_CONFIG_PARAMETER_SET=1024
109-
110- # Link tests with respective library (except test_unit which includes sources directly)
111100define ADD_SOURCE
112- $(BUILD_DIR ) /$(1 ) /bin/$(2 )$(subst mlkem,,$(1 ) ) : LDLIBS += -L$(BUILD_DIR ) -l$(1 )
113- $(BUILD_DIR ) /$(1 ) /bin/$(2 )$(subst mlkem,,$(1 ) ) : $(BUILD_DIR ) /$(1 ) /test/$(3 ) /$(2 ) .c.o $(BUILD_DIR ) /lib$(1 ) .a
114- endef
115-
116- # Special rule for test_unit - link against unit libraries with exposed internal functions
117- define ADD_SOURCE_UNIT
118- $(BUILD_DIR ) /$(1 ) /bin/test_unit$(subst mlkem,,$(1 ) ) : LDLIBS += -L$(BUILD_DIR ) -l$(1 ) _unit
119- $(BUILD_DIR ) /$(1 ) /bin/test_unit$(subst mlkem,,$(1 ) ) : $(BUILD_DIR ) /$(1 ) /test/src/test_unit.c.o $(BUILD_DIR ) /lib$(1 ) _unit.a $(call MAKE_OBJS, $(BUILD_DIR ) /$(1 ) , $(wildcard test/notrandombytes/* .c) )
120- endef
121-
122- # Special rule for test_alloc - link against alloc libraries with custom alloc config
123- define ADD_SOURCE_ALLOC
124- $(BUILD_DIR ) /$(1 ) /bin/test_alloc$(subst mlkem,,$(1 ) ) : LDLIBS += -L$(BUILD_DIR ) -l$(1 ) _alloc
125- $(BUILD_DIR ) /$(1 ) /bin/test_alloc$(subst mlkem,,$(1 ) ) : $(BUILD_DIR ) /$(1 ) /test/src/test_alloc.c.o $(BUILD_DIR ) /lib$(1 ) _alloc.a $(call MAKE_OBJS, $(BUILD_DIR ) /$(1 ) , $(wildcard test/notrandombytes/* .c) )
101+ # Record this binary's test sources -- entrypoint test/$(3)/$(2).c plus extras
102+ # $(4) -- in the per-binary TEST_SRCS. A custom build (CUSTOM_BUILD, see
103+ # test/mk/rules.mk) consumes these directly; a normal build links lib$(1)$(5).a.
104+ $(BUILD_DIR ) /$(1 ) /bin/$(2 )$(subst mlkem,,$(1 ) ) : TEST_SRCS += test/$(3 ) /$(2 ) .c $(4 )
105+ ifndef CUSTOM_BUILD
106+ $(BUILD_DIR ) /$(1 ) /bin/$(2 )$(subst mlkem,,$(1 ) ) : LDLIBS += -L$(BUILD_DIR ) -l$(1 )$(5 )
107+ $(BUILD_DIR ) /$(1 ) /bin/$(2 )$(subst mlkem,,$(1 ) ) : $(BUILD_DIR ) /lib$(1 )$(5 ) .a
108+ endif
126109endef
127110
128111$(foreach scheme,mlkem512 mlkem768 mlkem1024, \
@@ -133,32 +116,46 @@ $(foreach scheme,mlkem512 mlkem768 mlkem1024, \
133116 $(eval $(call ADD_SOURCE,$(scheme),$(test),wycheproof)) \
134117 ) \
135118 $(foreach test,$(BENCH_TESTS), \
136- $(eval $(call ADD_SOURCE,$(scheme),$(test),bench)) \
119+ $(eval $(call ADD_SOURCE,$(scheme),$(test),bench,test/hal/hal.c )) \
137120 ) \
138121 $(foreach test,$(BASIC_TESTS), \
139122 $(eval $(call ADD_SOURCE,$(scheme),$(test),src)) \
140123 ) \
141124 $(eval $(call ADD_SOURCE,$(scheme),test_rng_fail,src)) \
142- $(eval $(call ADD_SOURCE_UNIT ,$(scheme))) \
143- $(eval $(call ADD_SOURCE_ALLOC ,$(scheme))) \
125+ $(eval $(call ADD_SOURCE ,$(scheme),test_unit,src,,_unit )) \
126+ $(eval $(call ADD_SOURCE ,$(scheme),test_alloc,src,,_alloc )) \
144127)
145128
146- # All tests get EXTRA_SOURCES
147- $(ALL_TESTS:% =$(MLKEM512_DIR ) /bin/%512): $(call MAKE_OBJS, $(MLKEM512_DIR ) , $(EXTRA_SOURCES ) )
148- $(ALL_TESTS:% =$(MLKEM768_DIR ) /bin/%768): $(call MAKE_OBJS, $(MLKEM768_DIR ) , $(EXTRA_SOURCES ) )
149- $(ALL_TESTS:% =$(MLKEM1024_DIR ) /bin/%1024): $(call MAKE_OBJS, $(MLKEM1024_DIR ) , $(EXTRA_SOURCES ) )
150-
151- # All tests except rng_fail get notrandombytes (rng_fail provides its own)
152- $(filter-out % test_rng_fail512,$(ALL_TESTS :% =$(MLKEM512_DIR ) /bin/% 512)): $(call MAKE_OBJS, $(MLKEM512_DIR ) , $(wildcard test/notrandombytes/* .c) )
153- $(filter-out % test_rng_fail768,$(ALL_TESTS :% =$(MLKEM768_DIR ) /bin/% 768)): $(call MAKE_OBJS, $(MLKEM768_DIR ) , $(wildcard test/notrandombytes/* .c) )
154- $(filter-out % test_rng_fail1024,$(ALL_TESTS :% =$(MLKEM1024_DIR ) /bin/% 1024)): $(call MAKE_OBJS, $(MLKEM1024_DIR ) , $(wildcard test/notrandombytes/* .c) )
155-
156- # Apply EXTRA_CFLAGS to EXTRA_SOURCES object files
129+ # The set of test binaries, per parameter set.
130+ BINS_512 := $(ALL_TESTS:%=$(MLKEM512_DIR ) /bin/%512 )
131+ BINS_768 := $(ALL_TESTS:%=$(MLKEM768_DIR ) /bin/%768 )
132+ BINS_1024 := $(ALL_TESTS:%=$(MLKEM1024_DIR ) /bin/%1024 )
133+ ALL_BINS := $(BINS_512 ) $(BINS_768 ) $(BINS_1024 )
134+
135+ # All tests except rng_fail get notrandombytes (rng_fail provides its own).
136+ $(filter-out % test_rng_fail512 % test_rng_fail768 % test_rng_fail1024,$(ALL_BINS ) ) : \
137+ TEST_SRCS += test/notrandombytes/notrandombytes.c
138+
139+ # Turn each binary's TEST_SRCS into its prerequisites (via .SECONDEXPANSION, as
140+ # TEST_SRCS is a per-target variable). The scheme's object dir is derived from
141+ # the target ($@ = .../mlkemNNN/bin/foo, so $(@D) sans /bin = .../mlkemNNN).
142+ # Redundant in a normal build (the .a -> .o -> .c chain already implies it), but
143+ # a custom build links the sources directly and so needs them named explicitly.
144+ .SECONDEXPANSION :
145+ ifndef CUSTOM_BUILD
146+ $(ALL_BINS ) : $$(call MAKE_OBJS,$$(patsubst % /bin,% ,$$(@D ) ) ,$$(TEST_SRCS ) )
147+ # EXTRA_SOURCES (platform-specific) is a normal-build feature: its per-file
148+ # CFLAGS only attach to object targets, which custom builds don't produce, so a
149+ # custom-build platform handles its own extra sources in its CUSTOM_BUILD recipe.
150+ $(ALL_BINS ) : TEST_SRCS += $(EXTRA_SOURCES )
157151ifneq ($(EXTRA_SOURCES ) ,)
158152$(call MAKE_OBJS, $(MLKEM512_DIR ) , $(EXTRA_SOURCES ) ) : CFLAGS += $(EXTRA_SOURCES_CFLAGS )
159153$(call MAKE_OBJS, $(MLKEM768_DIR ) , $(EXTRA_SOURCES ) ) : CFLAGS += $(EXTRA_SOURCES_CFLAGS )
160154$(call MAKE_OBJS, $(MLKEM1024_DIR ) , $(EXTRA_SOURCES ) ) : CFLAGS += $(EXTRA_SOURCES_CFLAGS )
161155endif
156+ else
157+ $(ALL_BINS ) : $$(TEST_SRCS ) $(LIB_SRCS )
158+ endif
162159
163160# ABI checker
164161ABICHECK_DIR = $(BUILD_DIR ) /abicheck
0 commit comments