-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathschemes.mk
49 lines (37 loc) · 1.3 KB
/
schemes.mk
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
# SPDX-License-Identifier: Apache-2.0
MLKEM_SOURCES = $(wildcard mlkem/*.c)
FIPS202_SOURCES = $(wildcard fips202/*.c)
OBJS = $(call objs,$(addprefix $(1)/,$(notdir $(basename $(MLKEM_SOURCES)))) $(basename $(FIPS202_SOURCES)))
# all tests x all schemes
SCHEMES_TESTS = $(foreach t,$(TESTS),$(KEM_SCHEMES:%=%-$(t)))
# set up tests dependencies for each scheme
define SCHEME_DEPS
$(TESTS:%=$(1)-%): CPPFLAGS += -DMLKEM_K=$(2) -DNTESTS=$(NTESTS)
endef
define SCHEME_ELF_DEPS
$(TESTS:%=$(BIN_DIR)/$(1)-%.elf): $(BIN_DIR)/%.elf: $(OBJ_DIR)/test/%.o $(call OBJS,$(1)) $(LINKDEPS)
endef
define COMPILE_OBJ
@echo " CC $@"
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
$(Q)$(CC) -c -o $@ $(CFLAGS) $<
endef
# compile object file for each scheme
define SCHEME_OBJ
$(OBJ_DIR)/$(1)/%.o: mlkem/%.c $(CONFIG)
$$(COMPILE_OBJ)
endef
define SCHEME_TEST_OBJS
$(OBJ_DIR)/test/$(1)-%.o: test/%.c $(CONFIG)
$$(COMPILE_OBJ)
endef
$(SCHEMES_TESTS): % : $(BIN_DIR)/%.bin $(BIN_DIR)/%.hex
$(eval $(call SCHEME_DEPS,mlkem512,2))
$(eval $(call SCHEME_DEPS,mlkem768,3))
$(eval $(call SCHEME_DEPS,mlkem1024,4))
$(foreach scheme,$(KEM_SCHEMES), \
$(eval $(call SCHEME_ELF_DEPS,$(scheme))))
$(foreach scheme,$(KEM_SCHEMES), \
$(eval $(call SCHEME_TEST_OBJS,$(scheme))))
$(foreach scheme,$(KEM_SCHEMES), \
$(eval $(call SCHEME_OBJ,$(scheme))))