CFLAGS ?= -O2 -I../include
WARNING_CFLAGS ?= \
	-Werror -Wall -Wextra \
	-Wno-unused-function \
	-Wno-overlength-strings \
	-Wdeclaration-after-statement \
# Don't delete this line.

LDFLAGS ?= -L../library -lmbedcrypto

DEP := ../library/libmbedcrypto.a

# Python executable
PYTHON ?= python

APPS := \
	test_suite_psa_crypto \
	test_suite_psa_crypto_metadata \
# Don't delete this line.

# Look up for associated function files
func.test_suite_psa_crypto := test_suite_psa_crypto
func.test_suite_psa_crypto_metadata := test_suite_psa_crypto_metadata

.SILENT:

.PHONY: all test clean

all: $(APPS)

$(DEP):
	$(MAKE) -C ../library

C_FILES := $(addsuffix .c,$(APPS))

.SECONDEXPANSION:
$(C_FILES): %.c: suites/$$(func.$$*).function suites/%.data scripts/generate_test_code.py suites/helpers.function suites/main_test.function suites/host_test.function
	echo "  Gen   $@"
	$(PYTHON) scripts/generate_test_code.py -f suites/$(func.$*).function \
		-d suites/$*.data \
		-t suites/main_test.function \
		-p suites/host_test.function \
		-s suites  \
		--helpers-file suites/helpers.function \
		-o .


$(APPS): %: %.c $(DEP)
	echo "  CC    $<"
	$(CC) $(CFLAGS) $(WARNING_CFLAGS) $< $(LDFLAGS) -o $@

clean:
	rm -rf $(APPS) *.c *.data TESTS
	rm -rf data_files/ctr_drbg_seed data_files/hmac_drbg_seed data_files/mpi_write

test: $(APPS)
	./test_suite_psa_crypto_metadata
	./test_suite_psa_crypto

# Create separate targets for generating embedded tests.
EMBEDDED_TESTS := $(addprefix embedded_,$(APPS))

# Generate test code for target.

.SECONDEXPANSION:
$(EMBEDDED_TESTS): embedded_%: suites/$$(func.$$*).function suites/%.data scripts/generate_test_code.py suites/helpers.function suites/main_test.function suites/target_test.function
	echo "  Gen  ./TESTS/mbedcrypto/$*/$*.c"
	$(PYTHON) scripts/generate_test_code.py -f suites/$(func.$*).function \
		-d suites/$*.data \
		-t suites/main_test.function \
		-p suites/target_test.function \
		-s suites  \
		--helpers-file suites/helpers.function \
		-o ./TESTS/mbedcrypto/$*

gen-embedded-test: $(EMBEDDED_TESTS)
