blob: 3051204893d6ecbea01a9fa707307b769b82d81c [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
#####################################################################
#
# THIS IS A TEMPORARY SOLUTION
#
# Eventually, the software team is going to have a Meson-based flow
# for building OTBN software. When that exists, this code will go
# away.
#
#####################################################################
# A make fragment for assembling and linking the code snippets. This is
# included by ./Makefile, but can be included in other Makefiles too.
#
# The following variables must be set:
#
# variable | description
# --------------------------------+----------------------------------------
# otbn-code-snippets-obj-dir | Output directory for built objects
# otbn-code-snippets-bin-dir | Output directory for built binaries
# otbn-code-snippets-util-dir | Path to directory containing OTBN tooling
#
# The following variables may be set:
#
# variable | description
# --------------------------------+----------------------------------------
# otbn-code-snippets-as | Path to otbn-as (defaults to util dir)
# otbn-code-snippets-ld | Path to otbn-ld (defaults to util dir)
#
# The ugly "otbn-code-snippets-" prefix on variable names is so that this file
# can be included in other Makefiles without breaking anything.
ifndef otbn-code-snippets-obj-dir
$(error otbn-code-snippets-obj-dir not set.)
endif
ifndef otbn-code-snippets-bin-dir
$(error otbn-code-snippets-bin-dir not set.)
endif
ifndef otbn-code-snippets-util-dir
$(error otbn-code-snippets-util-dir not set.)
endif
# Default values for optional variables
otbn-code-snippets-as ?= $(otbn-code-snippets-util-dir)/otbn-as
otbn-code-snippets-ld ?= $(otbn-code-snippets-util-dir)/otbn-ld
# Get the list of all assembly files in this directory. Strip away directory
# and extension to get basenames (used for objects and binaries).
otbn-code-snippets-path := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
otbn-code-snippets-asm-paths := $(wildcard $(otbn-code-snippets-path)*.s)
otbn-code-snippets-asm-basenames := $(notdir $(otbn-code-snippets-asm-paths))
otbn-code-snippets-basenames := $(otbn-code-snippets-asm-basenames:.s=)
$(sort $(otbn-code-snippets-obj-dir) $(otbn-code-snippets-bin-dir)):
mkdir -p $@
# Calculate lists of object and ELF files
otbn-code-snippets-objects := \
$(foreach b,$(otbn-code-snippets-basenames),\
$(otbn-code-snippets-obj-dir)/$(b).o)
otbn-code-snippets-elfs := \
$(foreach b,$(otbn-code-snippets-basenames),\
$(otbn-code-snippets-bin-dir)/$(b).elf)
# Define rules for assembling the source code to make objects
$(otbn-code-snippets-objects): \
$(otbn-code-snippets-obj-dir)/%.o: \
$(otbn-code-snippets-path)%.s $(otbn-code-snippets-as) \
| $(otbn-code-snippets-obj-dir)
$(otbn-code-snippets-as) -o $@ $<
# Define rules for linking objects to make ELFs
$(otbn-code-snippets-elfs): \
$(otbn-code-snippets-bin-dir)/%.elf: \
$(otbn-code-snippets-obj-dir)/%.o $(otbn-code-snippets-ld) \
| $(otbn-code-snippets-bin-dir)
$(otbn-code-snippets-ld) -o $@ $(otbn-ldflags) $< $(otbn-libs)
#
# Define any file-specific flags or dependencies
#
# rsa_1024_dec_test depends on code defined in modexp.s
$(otbn-code-snippets-bin-dir)/rsa_1024_dec_test.elf: \
$(otbn-code-snippets-obj-dir)/modexp.o
$(otbn-code-snippets-bin-dir)/rsa_1024_dec_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/modexp.o
# rsa_1024_enc_test depends on code defined in modexp.s
$(otbn-code-snippets-bin-dir)/rsa_1024_enc_test.elf: \
$(otbn-code-snippets-obj-dir)/modexp.o
$(otbn-code-snippets-bin-dir)/rsa_1024_enc_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/modexp.o
# rsa_verify_test depends on code defined in rsa_verify.s
$(otbn-code-snippets-bin-dir)/rsa_verify_test.elf: \
$(otbn-code-snippets-obj-dir)/rsa_verify.o
$(otbn-code-snippets-bin-dir)/rsa_verify_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/rsa_verify.o
# rsa_verify_test_exp3 depends on code defined in rsa_verify.s
$(otbn-code-snippets-bin-dir)/rsa_verify_test_exp3.elf: \
$(otbn-code-snippets-obj-dir)/rsa_verify.o
$(otbn-code-snippets-bin-dir)/rsa_verify_test_exp3.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/rsa_verify.o
# p256 curve point test depends on p256init, p256isoncurve, defined in p256.s
$(otbn-code-snippets-bin-dir)/p256_curve_point_test.elf: \
$(otbn-code-snippets-obj-dir)/p256.o
$(otbn-code-snippets-bin-dir)/p256_curve_point_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p256.o
# p256 scalar mult test depends on p256init, p256scalarmult, defined in p256.s
$(otbn-code-snippets-bin-dir)/p256_scalar_mult_test.elf: \
$(otbn-code-snippets-obj-dir)/p256.o
$(otbn-code-snippets-bin-dir)/p256_scalar_mult_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p256.o
# p256 ECDSA sign test depends on p256init, p256sign, defined in p256.s
$(otbn-code-snippets-bin-dir)/p256_ecdsa_sign_test.elf: \
$(otbn-code-snippets-obj-dir)/p256.o
$(otbn-code-snippets-bin-dir)/p256_ecdsa_sign_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p256.o
# p256 ECDSA verify test depends on p256init, p256verify, defined in p256.s
$(otbn-code-snippets-bin-dir)/p256_ecdsa_verify_test.elf: \
$(otbn-code-snippets-obj-dir)/p256.o
$(otbn-code-snippets-bin-dir)/p256_ecdsa_verify_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p256.o
# p256_ecdsa depends on p256init, p256verify, p256sign, defined in p256.s
$(otbn-code-snippets-bin-dir)/p256_ecdsa.elf: \
$(otbn-code-snippets-obj-dir)/p256.o
$(otbn-code-snippets-bin-dir)/p256_ecdsa.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p256.o
# p256 point addition test depends on proj_add defined in p256.s
$(otbn-code-snippets-bin-dir)/p256_proj_add_test.elf: \
$(otbn-code-snippets-obj-dir)/p256.o
$(otbn-code-snippets-bin-dir)/p256_proj_add_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p256.o
# rsa depends on code defined in modexp.s
$(otbn-code-snippets-bin-dir)/rsa.elf: \
$(otbn-code-snippets-obj-dir)/modexp.o
$(otbn-code-snippets-bin-dir)/rsa.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/modexp.o
# p384_proj_add_test depends on p384_proj_add defined in p384.s
$(otbn-code-snippets-bin-dir)/p384_proj_add_test.elf: \
$(otbn-code-snippets-obj-dir)/p384_base.o
$(otbn-code-snippets-bin-dir)/p384_proj_add_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p384_base.o
# code in p384_sign.s depends on code defined in p384_base.s
$(otbn-code-snippets-bin-dir)/p384_sign.elf: \
$(otbn-code-snippets-obj-dir)/p384_base.o
$(otbn-code-snippets-bin-dir)/p384_sign.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p384_base.o
# p384_scalar_mult_test depends on scalar_mult_p384 defined in p384_sign.s
$(otbn-code-snippets-bin-dir)/p384_scalar_mult_test.elf: \
$(otbn-code-snippets-obj-dir)/p384_sign.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
$(otbn-code-snippets-bin-dir)/p384_scalar_mult_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p384_sign.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
# p384_base_mult_test depends on p384_base_mult defined in p384_sign.s
$(otbn-code-snippets-bin-dir)/p384_base_mult_test.elf: \
$(otbn-code-snippets-obj-dir)/p384_sign.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
$(otbn-code-snippets-bin-dir)/p384_base_mult_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p384_sign.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
# p384_ecdsa_sign_test depends on p384_sign defined in p384_sign.s
$(otbn-code-snippets-bin-dir)/p384_ecdsa_sign_test.elf: \
$(otbn-code-snippets-obj-dir)/p384_sign.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
$(otbn-code-snippets-bin-dir)/p384_ecdsa_sign_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p384_sign.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
# code in p384_verify.s depends on code defined in p384_base.s
$(otbn-code-snippets-bin-dir)/p384_verify.elf: \
$(otbn-code-snippets-obj-dir)/p384_base.o
$(otbn-code-snippets-bin-dir)/p384_verify.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p384_base.o
# p384_ecdsa_verifiy_test depends on p384_verify defined in p384_verify.s
$(otbn-code-snippets-bin-dir)/p384_ecdsa_verify_test.elf: \
$(otbn-code-snippets-obj-dir)/p384_verify.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
$(otbn-code-snippets-bin-dir)/p384_ecdsa_verify_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p384_verify.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
# p384_isoncurve_test depends on p384_isoncurve defined in p384_verify.s
$(otbn-code-snippets-bin-dir)/p384_isoncurve_test.elf: \
$(otbn-code-snippets-obj-dir)/p384_verify.o \
$(otbn-code-snippets-obj-dir)/p384_base.o
$(otbn-code-snippets-bin-dir)/p384_isoncurve_test.elf: \
otbn-libs += $(otbn-code-snippets-obj-dir)/p384_verify.o \
$(otbn-code-snippets-obj-dir)/p384_base.o