summaryrefslogtreecommitdiff
path: root/third_party/rules.mk
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rules.mk')
-rw-r--r--third_party/rules.mk47
1 files changed, 47 insertions, 0 deletions
diff --git a/third_party/rules.mk b/third_party/rules.mk
new file mode 100644
index 0000000000..b208a3739e
--- /dev/null
+++ b/third_party/rules.mk
@@ -0,0 +1,47 @@
+# -*- makefile -*-
+# vim: set filetype=make :
+# Copyright 2020 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Embedded Controller firmware build system - third_party rules/targets
+#
+
+# Build and link against libcryptoc.
+ifeq ($(CONFIG_LIBCRYPTOC),y)
+
+CRYPTOCLIB ?= $(realpath ../../third_party/cryptoc)
+
+# SUPPORT_UNALIGNED indicates to libcryptoc that provided data buffers
+# may be unaligned and please handle them safely.
+cmd_libcryptoc_make = $(MAKE) -C $(CRYPTOCLIB) \
+ obj=$(realpath $(out))/cryptoc \
+ SUPPORT_UNALIGNED=1
+cmd_libcryptoc = $(cmd_libcryptoc_make) -q || $(cmd_libcryptoc_make)
+
+ifneq ($(BOARD),host)
+CPPFLAGS += -I$(abspath ./builtin)
+endif
+CPPFLAGS += -I$(CRYPTOCLIB)/include
+CRYPTOC_LDFLAGS := -L$(out)/cryptoc -lcryptoc
+
+# Force the external build each time, so it can look for changed sources.
+.PHONY: $(out)/cryptoc/libcryptoc.a
+$(out)/cryptoc/libcryptoc.a:
+ +$(call quiet,libcryptoc,MAKE )
+
+# Link RO and RW against cryptoc.
+$(out)/RO/ec.RO.elf $(out)/RO/ec.RO_B.elf: LDFLAGS_EXTRA += $(CRYPTOC_LDFLAGS)
+$(out)/RO/ec.RO.elf $(out)/RO/ec.RO_B.elf: $(out)/cryptoc/libcryptoc.a
+$(out)/RW/ec.RW.elf $(out)/RW/ec.RW_B.elf: LDFLAGS_EXTRA += $(CRYPTOC_LDFLAGS)
+$(out)/RW/ec.RW.elf $(out)/RW/ec.RW_B.elf: $(out)/cryptoc/libcryptoc.a
+# Host test executables (including fuzz tests).
+$(out)/$(PROJECT).exe: LDFLAGS_EXTRA += $(CRYPTOC_LDFLAGS)
+$(out)/$(PROJECT).exe: $(out)/cryptoc/libcryptoc.a
+# On-device tests.
+test-targets=$(foreach test,$(test-list-y),\
+ $(out)/RW/$(test).RW.elf $(out)/RO/$(test).RO.elf)
+$(test-targets): LDFLAGS_EXTRA += $(CRYPTOC_LDFLAGS)
+$(test-targets): $(out)/cryptoc/libcryptoc.a
+
+endif # CONFIG_LIBCRYPTOC