Skip to content

Commit 257ebcc

Browse files
hanno-beckermkannwischer
authored andcommitted
Tests: Add CUSTOM_BUILD hook for source-driven platforms
The generic test build links each binary from prebuilt objects and the per-scheme library. A platform that builds its binaries differently (e.g. the Zephyr platform, which hands the sources to its own CMake build) had no way to hook into this without per-binary recipes. This commit introduces a CUSTOM_BUILD hook in test/mk/rules.mk: when set, it replaces the default link step, and test/mk/components.mk attaches each binary's sources -- via the new per-binary TEST_SRCS variable -- as its prerequisites rather than prebuilt objects and libraries. TEST_SRCS is the single source of truth for a binary's test sources, so a custom platform needs no per-binary wiring. As part of this, the ADD_SOURCE_UNIT / ADD_SOURCE_ALLOC special cases are folded into ADD_SOURCE (parameterized by a library suffix), and the per-test defines (MLK_STATIC_TESTABLE=, MLK_CONFIG_FILE=...) move from the test object to the test binary. Target-specific CFLAGS propagate to a target's prerequisites, so the object still gets them; attaching to the binary lets a custom build read them off CFLAGS too. No change to the default build: with CUSTOM_BUILD unset, the link step and prerequisites are as before. Signed-off-by: Hanno Becker <beckphan@amazon.co.uk>
1 parent b2918d4 commit 257ebcc

2 files changed

Lines changed: 88 additions & 88 deletions

File tree

test/mk/components.mk

Lines changed: 79 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,25 @@
33

44
FIPS202_SRCS = $(wildcard mlkem/src/fips202/*.c)
55
ifeq ($(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])
711
endif
812

913
SOURCES += $(wildcard mlkem/src/*.c)
1014
ifeq ($(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
1321
endif
1422

23+
LIB_SRCS := $(SOURCES) $(FIPS202_SRCS)
24+
1525
BASIC_TESTS = test_mlkem gen_KAT test_stack
1626
ACVP_TESTS = acvp_mlkem
1727
WYCHEPROOF_TESTS = wycheproof_mlkem
@@ -25,52 +35,52 @@ MLKEM512_DIR = $(BUILD_DIR)/mlkem512
2535
MLKEM768_DIR = $(BUILD_DIR)/mlkem768
2636
MLKEM1024_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

5350
CFLAGS += -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)
111100
define 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
126109
endef
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)
157151
ifneq ($(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)
161155
endif
156+
else
157+
$(ALL_BINS): $$(TEST_SRCS) $(LIB_SRCS)
158+
endif
162159

163160
# ABI checker
164161
ABICHECK_DIR = $(BUILD_DIR)/abicheck

test/mk/rules.mk

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
# Copyright (c) The mlkem-native project authors
22
# SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
33

4+
# Link step for a test binary. By default links the prerequisite objects; a
5+
# platform may override it via CUSTOM_BUILD (e.g. Zephyr builds a firmware image
6+
# from the sources -- see test/zephyr/platform.mk). Expanded in the recipe, so
7+
# it can use $@ and target-specific variables like TEST_SRCS.
8+
LINK = $(if $(strip $(CUSTOM_BUILD)),$(CUSTOM_BUILD),echo " LD $@" && $(LD) $(LDFLAGS) -o $@ $(filter %.o,$^) $(LDLIBS))
9+
410
$(BUILD_DIR)/mlkem512/bin/%: $(CONFIG)
5-
$(Q)echo " LD $@"
611
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
7-
$(Q)$(LD) $(LDFLAGS) -o $@ $(filter %.o,$^) $(LDLIBS)
12+
$(Q)$(LINK)
813

914
$(BUILD_DIR)/mlkem768/bin/%: $(CONFIG)
10-
$(Q)echo " LD $@"
1115
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
12-
$(Q)$(LD) $(LDFLAGS) -o $@ $(filter %.o,$^) $(LDLIBS)
16+
$(Q)$(LINK)
1317

1418
$(BUILD_DIR)/mlkem1024/bin/%: $(CONFIG)
15-
$(Q)echo " LD $@"
1619
$(Q)[ -d $(@D) ] || mkdir -p $(@D)
17-
$(Q)$(LD) $(LDFLAGS) -o $@ $(filter %.o,$^) $(LDLIBS)
20+
$(Q)$(LINK)
1821

1922
$(BUILD_DIR)/%.a: $(CONFIG)
2023
$(Q)echo " AR $@"

0 commit comments

Comments
 (0)