# component/SConscript
Import("env")
import os

with open(env["PROJECT_TOOL_S"]) as f:
    exec(f.read())


if "CONFIG_MBEDTLS_COMPONENT_ENABLED" in os.environ:
    check_component("mbedtls")
    SRCS = []
    INCLUDE = [ADir("../../github_source/mbedtls/include")]
    PRIVATE_INCLUDE = [ADir("../../github_source/mbedtls/library")]
    REQUIREMENTS = []
    STATIC_LIB = []
    DYNAMIC_LIB = []
    DEFINITIONS = []
    DEFINITIONS_PRIVATE = ["-std=c99", "-O2"]
    LDFLAGS = []
    LINK_SEARCH_PATH = []

    if "CONFIG_EVEREST_ENABLED" in os.environ:
        everest_src = ["everest.c", "x25519.c", "Hacl_Curve25519_joined.c"]
        _SRCS = [
            AFile("../../github_source/mbedtls/3rdparty/everest/library/" + src)
            for src in everest_src
        ]
        _INCLUDE = []
        _PRIVATE_INCLUDE = [
            ADir("../../github_source/mbedtls/3rdparty/everest/include"),
            ADir("../../github_source/mbedtls/3rdparty/everest/include/everest"),
            ADir(
                "../../github_source/mbedtls/3rdparty/everest/include/everest/kremlib"
            ),
        ]
        _DEFINITIONS_PRIVATE = []
        env["COMPONENTS"].append(
            {
                "target": "everest",
                "SRCS": SRCS + _SRCS,
                "INCLUDE": INCLUDE + _INCLUDE,
                "PRIVATE_INCLUDE": PRIVATE_INCLUDE + _PRIVATE_INCLUDE,
                "REQUIREMENTS": REQUIREMENTS,
                "STATIC_LIB": STATIC_LIB,
                "DYNAMIC_LIB": DYNAMIC_LIB,
                "DEFINITIONS": DEFINITIONS,
                "DEFINITIONS_PRIVATE": DEFINITIONS_PRIVATE + _DEFINITIONS_PRIVATE,
                "LDFLAGS": LDFLAGS,
                "LINK_SEARCH_PATH": LINK_SEARCH_PATH,
                "REGISTER": "static",
            }
        )

    if "CONFIG_P256M_ENABLED" in os.environ:
        p256m_src = ["p256-m_driver_entrypoints.c", "p256-m/p256-m.c"]
        _SRCS = [
            AFile("../../github_source/mbedtls/3rdparty/p256-m/" + src)
            for src in p256m_src
        ]
        _INCLUDE = []
        _PRIVATE_INCLUDE = [
            ADir("../../github_source/mbedtls/3rdparty/p256-m"),
            ADir("../../github_source/mbedtls/3rdparty/p256-m/p256-m"),
        ]
        _DEFINITIONS_PRIVATE = []
        env["COMPONENTS"].append(
            {
                "target": "p256m",
                "SRCS": SRCS + _SRCS,
                "INCLUDE": INCLUDE + _INCLUDE,
                "PRIVATE_INCLUDE": PRIVATE_INCLUDE + _PRIVATE_INCLUDE,
                "REQUIREMENTS": REQUIREMENTS,
                "STATIC_LIB": STATIC_LIB,
                "DYNAMIC_LIB": DYNAMIC_LIB,
                "DEFINITIONS": DEFINITIONS,
                "DEFINITIONS_PRIVATE": DEFINITIONS_PRIVATE + _DEFINITIONS_PRIVATE,
                "LDFLAGS": LDFLAGS,
                "LINK_SEARCH_PATH": LINK_SEARCH_PATH,
                "REGISTER": "static",
            }
        )

    if "CONFIG_MBEDCRYPTO_ENABLED" in os.environ:
        mbedcrypto_src = [
            "aes.c",
            "aesni.c",
            "aesce.c",
            "aria.c",
            "asn1parse.c",
            "asn1write.c",
            "base64.c",
            "bignum.c",
            "bignum_core.c",
            "bignum_mod.c",
            "bignum_mod_raw.c",
            "block_cipher.c",
            "camellia.c",
            "ccm.c",
            "chacha20.c",
            "chachapoly.c",
            "cipher.c",
            "cipher_wrap.c",
            "constant_time.c",
            "cmac.c",
            "ctr_drbg.c",
            "des.c",
            "dhm.c",
            "ecdh.c",
            "ecdsa.c",
            "ecjpake.c",
            "ecp.c",
            "ecp_curves.c",
            "ecp_curves_new.c",
            "entropy.c",
            "entropy_poll.c",
            "error.c",
            "gcm.c",
            "hkdf.c",
            "hmac_drbg.c",
            "lmots.c",
            "lms.c",
            "md.c",
            "md5.c",
            "memory_buffer_alloc.c",
            "nist_kw.c",
            "oid.c",
            "padlock.c",
            "pem.c",
            "pk.c",
            "pk_ecc.c",
            "pk_wrap.c",
            "pkcs12.c",
            "pkcs5.c",
            "pkparse.c",
            "pkwrite.c",
            "platform.c",
            "platform_util.c",
            "poly1305.c",
            "psa_crypto.c",
            "psa_crypto_aead.c",
            "psa_crypto_cipher.c",
            "psa_crypto_client.c",
            "psa_crypto_driver_wrappers_no_static.c",
            "psa_crypto_ecp.c",
            "psa_crypto_ffdh.c",
            "psa_crypto_hash.c",
            "psa_crypto_mac.c",
            "psa_crypto_pake.c",
            "psa_crypto_rsa.c",
            "psa_crypto_se.c",
            "psa_crypto_slot_management.c",
            "psa_crypto_storage.c",
            "psa_its_file.c",
            "psa_util.c",
            "ripemd160.c",
            "rsa.c",
            "rsa_alt_helpers.c",
            "sha1.c",
            "sha256.c",
            "sha512.c",
            "sha3.c",
            "threading.c",
            "timing.c",
            "version.c",
            "version_features.c",
        ]
        _SRCS = [
            AFile("../../github_source/mbedtls/library/" + src)
            for src in mbedcrypto_src
        ]
        _INCLUDE = []
        _DEFINITIONS_PRIVATE = []
        env["COMPONENTS"].append(
            {
                "target": "mbedcrypto",
                "SRCS": SRCS + _SRCS,
                "INCLUDE": INCLUDE + _INCLUDE,
                "PRIVATE_INCLUDE": PRIVATE_INCLUDE,
                "REQUIREMENTS": REQUIREMENTS,
                "STATIC_LIB": STATIC_LIB,
                "DYNAMIC_LIB": DYNAMIC_LIB,
                "DEFINITIONS": DEFINITIONS,
                "DEFINITIONS_PRIVATE": DEFINITIONS_PRIVATE + _DEFINITIONS_PRIVATE,
                "LDFLAGS": LDFLAGS,
                "LINK_SEARCH_PATH": LINK_SEARCH_PATH,
                "REGISTER": "static",
            }
        )

    if "CONFIG_MBEDX509_ENABLED" in os.environ:
        mbedx509_src = [
            "pkcs7.c",
            "x509.c",
            "x509_create.c",
            "x509_crl.c",
            "x509_crt.c",
            "x509_csr.c",
            "x509write.c",
            "x509write_crt.c",
            "x509write_csr.c",
        ]
        _SRCS = [
            AFile("../../github_source/mbedtls/library/" + src) for src in mbedx509_src
        ]
        _INCLUDE = []
        _DEFINITIONS_PRIVATE = []
        env["COMPONENTS"].append(
            {
                "target": "mbedx509",
                "SRCS": SRCS + _SRCS,
                "INCLUDE": INCLUDE + _INCLUDE,
                "PRIVATE_INCLUDE": PRIVATE_INCLUDE,
                "REQUIREMENTS": REQUIREMENTS,
                "STATIC_LIB": STATIC_LIB,
                "DYNAMIC_LIB": DYNAMIC_LIB,
                "DEFINITIONS": DEFINITIONS,
                "DEFINITIONS_PRIVATE": DEFINITIONS_PRIVATE + _DEFINITIONS_PRIVATE,
                "LDFLAGS": LDFLAGS,
                "LINK_SEARCH_PATH": LINK_SEARCH_PATH,
                "REGISTER": "static",
            }
        )

    if "CONFIG_MBEDTLS_ENABLED" in os.environ:
        mbedtls_src = [
            "debug.c",
            "mps_reader.c",
            "mps_trace.c",
            "net_sockets.c",
            "ssl_cache.c",
            "ssl_ciphersuites.c",
            "ssl_client.c",
            "ssl_cookie.c",
            "ssl_debug_helpers_generated.c",
            "ssl_msg.c",
            "ssl_ticket.c",
            "ssl_tls.c",
            "ssl_tls12_client.c",
            "ssl_tls12_server.c",
            "ssl_tls13_keys.c",
            "ssl_tls13_server.c",
            "ssl_tls13_client.c",
            "ssl_tls13_generic.c",
        ]
        _SRCS = [
            AFile("../../github_source/mbedtls/library/" + src) for src in mbedtls_src
        ]
        _INCLUDE = []
        _DEFINITIONS_PRIVATE = []
        env["COMPONENTS"].append(
            {
                "target": "mbedtls",
                "SRCS": SRCS + _SRCS,
                "INCLUDE": INCLUDE + _INCLUDE,
                "PRIVATE_INCLUDE": PRIVATE_INCLUDE,
                "REQUIREMENTS": REQUIREMENTS,
                "STATIC_LIB": STATIC_LIB,
                "DYNAMIC_LIB": DYNAMIC_LIB,
                "DEFINITIONS": DEFINITIONS,
                "DEFINITIONS_PRIVATE": DEFINITIONS_PRIVATE + _DEFINITIONS_PRIVATE,
                "LDFLAGS": LDFLAGS,
                "LINK_SEARCH_PATH": LINK_SEARCH_PATH,
                "REGISTER": "static",
            }
        )

    env["COMPONENTS"].append(
        {
            "target": os.path.basename(env["component_dir"]),
            "SRCS": SRCS,
            "INCLUDE": INCLUDE,
            "PRIVATE_INCLUDE": PRIVATE_INCLUDE,
            "REQUIREMENTS": REQUIREMENTS,
            "STATIC_LIB": STATIC_LIB,
            "DYNAMIC_LIB": DYNAMIC_LIB,
            "DEFINITIONS": DEFINITIONS,
            "DEFINITIONS_PRIVATE": DEFINITIONS_PRIVATE,
            "LDFLAGS": LDFLAGS,
            "LINK_SEARCH_PATH": LINK_SEARCH_PATH,
            "REGISTER": "static",
        }
    )
