Skip to content

Commit 777bb21

Browse files
authored
Refactor build system by reducing some unreadable macros (#49)
* refactor macro used in schemes.mk Signed-off-by: Thing-han, Lim <[email protected]> * add nistkat to all targets Signed-off-by: Thing-han, Lim <[email protected]> * tmp workaround for linked to obsolete files Signed-off-by: Thing-han, Lim <[email protected]> * move hal related artifacts to obj/hal Signed-off-by: Thing-han, Lim <[email protected]> * separate target specific artifacts Signed-off-by: Thing-han, Lim <[email protected]> --------- Signed-off-by: Thing-han, Lim <[email protected]>
1 parent a646ae4 commit 777bb21

File tree

8 files changed

+91
-93
lines changed

8 files changed

+91
-93
lines changed

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,4 @@
44
.vscode
55
.idea
66
.direnv
7-
obj
8-
elf
9-
bin
7+
build

Makefile

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
# SPDX-License-Identifier: Apache-2.0
22

3-
.PHONY: all
4-
5-
all: test speed stack
3+
.PHONY: all test speed stack nistkat
64

5+
all: test speed stack nistkat
76

87
include mk/config.mk
98
include mk/schemes.mk
109
include mk/rules.mk
1110

1211
Q ?= @
1312

14-
test: $(foreach scheme,$(KEM_SCHEMES),$(scheme)-test)
15-
speed: $(foreach scheme,$(KEM_SCHEMES),$(scheme)-speed)
16-
stack: $(foreach scheme,$(KEM_SCHEMES),$(scheme)-stack)
17-
nistkat: $(foreach scheme,$(KEM_SCHEMES),$(scheme)-nistkat)
13+
nistkat:
14+
$(Q)$(MAKE) RNG=NISTKAT PLATFORM=$(PLATFORM) mlkem512-$@
15+
$(Q)$(MAKE) RNG=NISTKAT PLATFORM=$(PLATFORM) mlkem768-$@
16+
$(Q)$(MAKE) RNG=NISTKAT PLATFORM=$(PLATFORM) mlkem1024-$@
17+
18+
test speed stack:
19+
$(Q)$(MAKE) PLATFORM=$(PLATFORM) mlkem512-$@
20+
$(Q)$(MAKE) PLATFORM=$(PLATFORM) mlkem768-$@
21+
$(Q)$(MAKE) PLATFORM=$(PLATFORM) mlkem1024-$@
1822

1923
.PHONY: emulate clean
2024

2125
emulate:
2226
$(Q)qemu-system-arm -machine $(PLATFORM) -nographic -semihosting -kernel $(ELF_FILE)
2327

2428
clean:
25-
$(Q)rm -rf elf/
26-
$(Q)rm -rf bin/
27-
$(Q)rm -rf obj/
29+
$(Q)rm -rf build/

mk/config.mk

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@ SIZE := $(CROSS_PREFIX)-size
1616
##############################
1717
# Include retained variables #
1818
##############################
19+
PLATFORM ?= stm32f4discovery
20+
RNG ?= HAL
21+
RETAINED_VARS := PLATFORM RNG
1922

20-
RETAINED_VARS :=
23+
BUILD_DIR := build
24+
BUILD_PLATFORM_DIR := $(BUILD_DIR)/$(PLATFORM)
25+
OBJ_DIR := $(BUILD_PLATFORM_DIR)/obj
26+
BIN_DIR := $(BUILD_PLATFORM_DIR)/bin
2127

22-
CONFIG := obj/.config.mk
28+
CONFIG := $(BUILD_PLATFORM_DIR)/config.mk
2329

2430
-include $(CONFIG)
2531

@@ -32,31 +38,13 @@ $(CONFIG):
3238
###############
3339
# Some Macros #
3440
###############
35-
objs = $(addprefix obj/,$(addsuffix .o,$(1)))
36-
37-
PLATFORM ?= stm32f4discovery
38-
RNG ?= HAL
3941

40-
RETAINED_VARS += PLATFORM RNG
41-
42-
# RNG config
43-
ifeq ($(RNG),HAL)
44-
LIBHAL_SRC = hal/randombytes.c
45-
else ifeq ($(RNG),NOTRAND)
46-
LIBHAL_SRC = hal/notrandombytes.c
47-
else ifeq ($(RNG),NISTKAT)
48-
LIBHAL_SRC = \
49-
test/common/nistkatrng.c \
50-
test/common/aes.c
51-
CPPFLAGS += -Itest/common
52-
endif
53-
54-
LDLIBS += -lhal
55-
LIBDEPS += obj/libhal.a
56-
57-
# HAL config
42+
LDLIBS += -lhal -L$(OBJ_DIR)/hal
43+
LIBDEPS += $(OBJ_DIR)/hal/libhal.a
5844

5945
# Common config
46+
objs = $(addprefix $(OBJ_DIR)/,$(addsuffix .o,$(1)))
47+
6048
include mk/$(PLATFORM).mk
6149

6250
CFLAGS += \
@@ -82,12 +70,13 @@ LDFLAGS += \
8270
-Wl,--wrap=_fstat \
8371
-Wl,--wrap=_getpid \
8472
-ffreestanding \
85-
-Lobj \
8673
-Wl,--gc-sections
8774

8875
NTESTS ?= 1
8976
RETAINED_VARS += NTESTS
9077

78+
TESTS = test speed stack nistkat
79+
9180
KEM_SCHEMES=mlkem512 mlkem768 mlkem1024
9281
# mlkem k
9382
KEM_PARAMS=2 3 4

mk/mbed-os.mk

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# SPDX-License-Identifier: Apache-2.0
2-
LDSCRIPT = obj/generated.$(PLATFORM).ld
2+
ifeq ($(RNG),NISTKAT)
3+
LIBHAL_SRC = \
4+
test/common/nistkatrng.c \
5+
test/common/aes.c
6+
CPPFLAGS += -Itest/common
7+
else
8+
RNG := NOTRAND
9+
LIBHAL_SRC = hal/notrandombytes.c
10+
endif
11+
12+
LDSCRIPT = $(OBJ_DIR)/generated.$(PLATFORM).ld
313

414
CFLAGS += $(ARCH_FLAGS)
515

@@ -8,12 +18,19 @@ LDFLAGS += \
818
-T$(LDSCRIPT) \
919
$(ARCH_FLAGS)
1020

11-
LIBHAL_SRC += hal/hal-mps2.c $(MBED_OS_TARGET_DIR)/TOOLCHAIN_GCC_ARM/startup_MPS2.S
21+
LIBHAL_SRC += hal/hal-mps2.c
22+
STARTUP_SRC = $(MBED_OS_TARGET_DIR)/TOOLCHAIN_GCC_ARM/startup_MPS2.S
23+
STARTUP_OBJ = $(shell echo "$(STARTUP_SRC)" | sed -E 's~(.*/)(TARGET.*)~$(OBJ_DIR)/hal/\2.o~g')
1224

1325
MPS2_DEPS += -I$(MBED_OS_DIR)/Include -I$(MBED_OS_TARGET_DIR)
1426

15-
obj/libhal.a: $(call objs,$(LIBHAL_SRC))
16-
obj/libhal.a: CPPFLAGS += $(MPS2_DEPS) $(if $(RNG)==NISTKAT,-Itest/common)
27+
$(OBJ_DIR)/hal/libhal.a: $(call objs,$(LIBHAL_SRC)) $(STARTUP_OBJ)
28+
$(OBJ_DIR)/hal/libhal.a: CPPFLAGS += $(MPS2_DEPS) $(if $(RNG)==NISTKAT,-Itest/common)
29+
30+
$(STARTUP_OBJ): $(STARTUP_SRC)
31+
@echo " AS $@"
32+
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
33+
$(Q)$(CC) -c -o $@ $(CFLAGS) $<
1734

1835
$(LDSCRIPT): $(MBED_OS_TARGET_DIR)/TOOLCHAIN_GCC_ARM/MPS2.ld
1936
@printf " GENLNK $@\n"; \
@@ -23,4 +40,3 @@ $(LDSCRIPT): $(MBED_OS_TARGET_DIR)/TOOLCHAIN_GCC_ARM/MPS2.ld
2340
$(LDSCRIPT): CPPFLAGS += $(MPS2_DEPS) $(if $(RNG)==NISTKAT,-Itest/common)
2441

2542
LINKDEPS += $(LDSCRIPT) $(LIBDEPS)
26-

mk/opencm3.mk

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11
# SPDX-License-Identifier: Apache-2.0
2+
ifeq ($(RNG),NISTKAT)
3+
LIBHAL_SRC = \
4+
test/common/nistkatrng.c \
5+
test/common/aes.c
6+
CPPFLAGS += -Itest/common
7+
else
8+
RNG := HAL
9+
LIBHAL_SRC = hal/randombytes.c
10+
endif
11+
212
OPENCM3_DIR ?=
3-
override LDSCRIPT := obj/generated.$(DEVICE).ld
13+
override LDSCRIPT := $(OBJ_DIR)/generated.$(DEVICE).ld
414

515
include $(OPENCM3_DIR)/mk/genlink-config.mk
616
include $(OPENCM3_DIR)/mk/genlink-rules.mk
717
include $(OPENCM3_DIR)/mk/gcc-rules.mk
818

919
LIBHAL_SRC += hal/hal-opencm3.c
1020

11-
obj/libhal.a: $(call objs,$(LIBHAL_SRC))
21+
$(OBJ_DIR)/hal/libhal.a: $(call objs,$(LIBHAL_SRC))
1222

1323
CFLAGS += $(ARCH_FLAGS)
1424

mk/rules.mk

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,36 @@
11
# SPDX-License-Identifier: Apache-2.0
2-
elf/%.elf: $(CONFIG)
2+
$(BIN_DIR)/%.elf: $(CONFIG)
33
@echo " LD $@"
44
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
55
$(Q)$(LD) $(LDFLAGS) -o $@ $(filter %.o,$^) -Wl,--start-group $(LDLIBS) -Wl,--end-group
66

7-
obj/%.a: $(CONFIG)
7+
$(OBJ_DIR)/%.a: $(CONFIG)
88
@echo " AR $@"
99
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
1010
$(Q)rm -f $@
1111
$(Q)$(AR) rcs $@ $(filter %.o,$^)
1212

13-
bin/%.bin: elf/%.elf $(CONFIG)
13+
$(BIN_DIR)/%.bin: $(BIN_DIR)/%.elf $(CONFIG)
1414
@echo " OBJCOPY $@"
1515
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
1616
$(Q)$(OBJCOPY) -Obinary $< $@
1717

18-
bin/%.hex: elf/%.elf $(CONFIG)
18+
$(BIN_DIR)/%.hex: $(BIN_DIR)/%.elf $(CONFIG)
1919
@echo " OBJCOPY $@"
2020
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
2121
$(Q)$(OBJCOPY) -Oihex $< $@
2222

23-
obj/%.o: %.c $(CONFIG)
23+
$(OBJ_DIR)/%.o: %.c $(CONFIG)
2424
@echo " CC $@"
2525
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
2626
$(Q)$(CC) -c -o $@ $(CFLAGS) $<
2727

28-
obj/%.c.o: %.c $(CONFIG)
28+
$(OBJ_DIR)/%.c.o: %.c $(CONFIG)
2929
@echo " CC $@"
3030
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
3131
$(Q)$(CC) -c -o $@ $(CFLAGS) $<
3232

33-
obj/%.S.o: %.S $(CONFIG)
33+
$(OBJ_DIR)/%.S.o: %.S $(CONFIG)
3434
@echo " AS $@"
3535
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
3636
$(Q)$(CC) -c -o $@ $(CFLAGS) $<

mk/schemes.mk

Lines changed: 23 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,63 +4,46 @@ FIPS202_SOURCES = $(wildcard fips202/*.c)
44

55
OBJS = $(call objs,$(addprefix $(1)/,$(notdir $(basename $(MLKEM_SOURCES)))) $(basename $(FIPS202_SOURCES)))
66

7-
define scheme-test
8-
$(1)-test: CPPFLAGS += -DMLKEM_K=$(2) -DNTESTS=$$(NTESTS)
9-
$(1)-test: bin/$(1)-test.hex $(CONFIG)
7+
# all tests x all schemes
8+
SCHEMES_TESTS = $(foreach t,$(TESTS),$(KEM_SCHEMES:%=%-$(t)))
109

11-
$(1)-speed: CPPFLAGS += -DMLKEM_K=$(2) -DNTESTS=$$(NTESTS)
12-
$(1)-speed: bin/$(1)-speed.hex $(CONFIG)
13-
14-
$(1)-stack: CPPFLAGS += -DMLKEM_K=$(2)
15-
$(1)-stack: bin/$(1)-stack.hex $(CONFIG)
16-
17-
$(1)-nistkat: CPPFLAGS += -DMLKEM_K=$(2)
18-
$(1)-nistkat: bin/$(1)-nistkat.hex $(CONFIG)
10+
# set up tests dependencies for each scheme
11+
define SCHEME_DEPS
12+
$(TESTS:%=$(1)-%): CPPFLAGS += -DMLKEM_K=$(2) -DNTESTS=$(NTESTS)
1913
endef
2014

21-
define scheme-elf
22-
elf/$(1)-test.elf: obj/test/$(1)-test.o $(call OBJS,$(1)) $(LINKDEPS) $(CONFIG)
23-
elf/$(1)-speed.elf: obj/test/$(1)-speed.o $(call OBJS,$(1)) $(LINKDEPS) $(CONFIG)
24-
elf/$(1)-stack.elf: obj/test/$(1)-stack.o $(call OBJS,$(1)) $(LINKDEPS) $(CONFIG)
25-
elf/$(1)-nistkat.elf: obj/test/$(1)-nistkat.o $(call OBJS,$(1)) $(LINKDEPS) $(CONFIG)
15+
define SCHEME_ELF_DEPS
16+
$(TESTS:%=$(BIN_DIR)/$(1)-%.elf): $(BIN_DIR)/%.elf: $(OBJ_DIR)/test/%.o $(call OBJS,$(1)) $(LINKDEPS)
2617
endef
2718

28-
define compile-obj
19+
define COMPILE_OBJ
2920
@echo " CC $@"
3021
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
3122
$(Q)$(CC) -c -o $@ $(CFLAGS) $<
3223
endef
3324

34-
define scheme-obj
35-
obj/$(1)/%.o: mlkem/%.c $(CONFIG)
36-
$$(compile-obj)
25+
# compile object file for each scheme
26+
define SCHEME_OBJ
27+
$(OBJ_DIR)/$(1)/%.o: mlkem/%.c $(CONFIG)
28+
$$(COMPILE_OBJ)
3729
endef
3830

39-
define scheme-test-obj
40-
obj/test/$(1)-test.o: test/test.c $(CONFIG)
41-
$$(compile-obj)
42-
43-
obj/test/$(1)-speed.o: test/speed.c $(CONFIG)
44-
$$(compile-obj)
45-
46-
obj/test/$(1)-stack.o: test/stack.c $(CONFIG)
47-
$$(compile-obj)
48-
49-
obj/test/$(1)-nistkat.o: test/nistkat.c $(CONFIG)
50-
$$(compile-obj)
31+
define SCHEME_TEST_OBJS
32+
$(OBJ_DIR)/test/$(1)-%.o: test/%.c $(CONFIG)
33+
$$(COMPILE_OBJ)
5134
endef
5235

53-
# iterate over schemes and params to generate targets for functional test and speed benchmark
54-
iter=$(let scheme k rest,$(1), \
55-
$(eval $(call scheme-test,$(scheme),$(k))) \
56-
$(if $(rest),$(call iter,$(rest)) ))
57-
$(call iter,$(subst -, ,$(join $(addsuffix -,$(KEM_SCHEMES)),$(KEM_PARAMS))))
36+
$(SCHEMES_TESTS): % : $(BIN_DIR)/%.bin $(BIN_DIR)/%.hex
37+
38+
$(eval $(call SCHEME_DEPS,mlkem512,2))
39+
$(eval $(call SCHEME_DEPS,mlkem768,3))
40+
$(eval $(call SCHEME_DEPS,mlkem1024,4))
5841

5942
$(foreach scheme,$(KEM_SCHEMES), \
60-
$(eval $(call scheme-elf,$(scheme))))
43+
$(eval $(call SCHEME_ELF_DEPS,$(scheme))))
6144

6245
$(foreach scheme,$(KEM_SCHEMES), \
63-
$(eval $(call scheme-obj,$(scheme))))
46+
$(eval $(call SCHEME_TEST_OBJS,$(scheme))))
6447

6548
$(foreach scheme,$(KEM_SCHEMES), \
66-
$(eval $(call scheme-test-obj,$(scheme))))
49+
$(eval $(call SCHEME_OBJ,$(scheme))))

scripts/tests

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ def base_test(
219219
dev = usbdev(uart)
220220

221221
for scheme in ["mlkem512", "mlkem768", "mlkem1024"]:
222-
file = f"elf/{scheme}-{test_type}.elf"
222+
file = f"build/{platform}/bin/{scheme}-{test_type}.elf"
223223
expect = expect_proc(scheme)
224224
if platform_cfg is None:
225225
raw = subprocess.run(

0 commit comments

Comments
 (0)