###########################################################################
#
#  Copyright (c) 2018, ARM Limited, All Rights Reserved
#  SPDX-License-Identifier: Apache-2.0
#
#  Licensed under the Apache License, Version 2.0 (the "License"); you may
#  not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
###########################################################################

#
# Use this file to export an Mbed Crypto release tarball as follows, from the
# top level of the mbedtls repo:
#
#   1) make -f scripts/mbed_crypto.make
#

.PHONY: all clean FORCE

all: mbedcrypto.tar.gz

#
# Crypto-necessary library files
#
LIB_FILES := \
	aes.c \
	aesni.c \
	arc4.c \
	asn1parse.c \
	asn1write.c \
	base64.c \
	bignum.c \
	blowfish.c \
	camellia.c \
	ccm.c \
	cipher.c \
	cipher_wrap.c \
	cmac.c \
	ctr_drbg.c \
	des.c \
	ecdsa.c \
	ecp.c \
	ecp_curves.c \
	entropy.c \
	entropy_poll.c \
	gcm.c \
	hmac_drbg.c \
	md.c \
	md2.c \
	md4.c \
	md5.c \
	md_wrap.c \
	oid.c \
	pem.c \
	pk.c \
	pk_wrap.c \
	pkcs12.c \
	pkcs5.c \
	pkparse.c \
	pkwrite.c \
	platform.c \
	platform_util.c \
	psa_crypto.c \
	ripemd160.c \
	rsa_internal.c \
	rsa.c \
	sha1.c \
	sha256.c \
	sha512.c \
	xtea.c \
# Don't delete this line.

#
# Crypto-necessary include files
#
INC_FILES := \
	mbedcrypto/aes.h \
	mbedcrypto/aesni.h \
	mbedcrypto/arc4.h \
	mbedcrypto/asn1.h \
	mbedcrypto/asn1write.h \
	mbedcrypto/base64.h \
	mbedcrypto/bignum.h \
	mbedcrypto/blowfish.h \
	mbedcrypto/bn_mul.h \
	mbedcrypto/camellia.h \
	mbedcrypto/ccm.h \
	mbedcrypto/certs.h \
	mbedcrypto/check_config.h \
	mbedcrypto/cipher.h \
	mbedcrypto/cipher_internal.h \
	mbedcrypto/cmac.h \
	mbedcrypto/config.h \
	mbedcrypto/ctr_drbg.h \
	mbedcrypto/des.h \
	mbedcrypto/ecdsa.h \
	mbedcrypto/ecp.h \
	mbedcrypto/ecp_internal.h \
	mbedcrypto/entropy.h \
	mbedcrypto/entropy_poll.h \
	mbedcrypto/error.h \
	mbedcrypto/gcm.h \
	mbedcrypto/hmac_drbg.h \
	mbedcrypto/md.h \
	mbedcrypto/md2.h \
	mbedcrypto/md4.h \
	mbedcrypto/md5.h \
	mbedcrypto/md_internal.h \
	mbedcrypto/oid.h \
	mbedcrypto/pem.h \
	mbedcrypto/pk.h \
	mbedcrypto/pk_internal.h \
	mbedcrypto/pkcs11.h \
	mbedcrypto/pkcs12.h \
	mbedcrypto/pkcs5.h \
	mbedcrypto/platform.h \
	mbedcrypto/platform_util.h \
	mbedcrypto/ripemd160.h \
	mbedcrypto/rsa.h \
	mbedcrypto/rsa_internal.h \
	mbedcrypto/sha1.h \
	mbedcrypto/sha256.h \
	mbedcrypto/sha512.h \
	mbedcrypto/threading.h \
	mbedcrypto/xtea.h \
	psa/crypto.h \
	psa/crypto_extra.h \
	psa/crypto_platform.h \
	psa/crypto_sizes.h \
	psa/crypto_struct.h \
# Don't delete this line.

TEST_FILES := \
	tests/scripts/generate_test_code.py \
	tests/scripts/mbedtls_test.py \
	tests/scripts/test_generate_test_code.py \
	tests/scripts/run-test-suites.pl \
	tests/suites/helpers.function \
	tests/suites/host_test.function \
	tests/suites/main_test.function \
	tests/suites/target_test.function \
	tests/suites/test_suite_psa_crypto.data \
	tests/suites/test_suite_psa_crypto.function \
	tests/suites/test_suite_psa_crypto_metadata.data \
	tests/suites/test_suite_psa_crypto_metadata.function \
# Don't delete this line.

OTHER_FILES := \
	LICENSE \
	VERSION.txt \
	programs/psa/crypto_examples.c \
	programs/psa/key_ladder_demo.c \
	programs/psa/key_ladder_demo.sh \
	programs/psa/psa_constant_names.c \
	scripts/config.pl \
	scripts/generate_psa_constants.py \
# Don't delete this line.

# Prepend destination directory
LIB_FILES := $(addprefix crypto/library/,$(LIB_FILES))
INC_FILES := $(addprefix crypto/include/,$(INC_FILES))
TEST_FILES := $(addprefix crypto/,$(TEST_FILES))
OTHER_FILES := $(addprefix crypto/,$(OTHER_FILES))

define rename_mbedcrypto
	@sed -i -e 's/Mbed TLS/Mbed Crypto/g' $(1)
	@sed -i -e 's/mbed TLS/Mbed Crypto/g' $(1)
	@sed -i -e 's/MBEDTLS_/MBEDCRYPTO_/g' $(1)
	@sed -i -e 's/mbedtls/mbedcrypto/g' $(1)
	@sed -i -e 's/MbedTls/MbedCrypto/g' $(1)
	@sed -i -e 's/include\/mbedtls/include\/mbedcrypto/g' $(1)
endef

crypto/include/mbedcrypto/config.h: configs/config-psa-crypto.h
	@echo $@
	@mkdir -p $(dir $@)
	@cp $< $@
	@#Rename the file in the comments
	@sed -i -e 's/config-psa-crypto.h/config.h/g' $@
	$(call rename_mbedcrypto,$@)

crypto/tests/data_files/%: tests/data_files/%
	@echo $@
	@mkdir -p $(dir $@)
	@cp $< $@
	@#Don't rename things inside data files

crypto/include/mbedcrypto/%.h: include/mbedtls/%.h
	@echo $@
	@mkdir -p $(dir $@)
	@cp $< $@
	$(call rename_mbedcrypto,$@)

crypto/LICENSE: apache-2.0.txt
	@echo $@
	@mkdir -p $(dir $@)
	@cp $< $@
	@#Don't rename anything in the license

crypto/%: %
	@echo $@
	@mkdir -p $(dir $@)
	@cp $< $@
	$(call rename_mbedcrypto,$@)

crypto/VERSION.txt: FORCE
	@git describe --tags --abbrev=12 --dirty --always > $@

mbedcrypto.tar.gz: $(LIB_FILES) $(INC_FILES) $(TEST_FILES) $(OTHER_FILES)
	@echo $@
	@tar czf mbedcrypto.tar.gz crypto

clean:
	@echo clean
	@rm -rf mbedcrypto.tar.gz \
		$(LIB_FILES) $(INC_FILES) $(TEST_FILES) $(OTHER_FILES)

FORCE:

# vi: ft=make
