#!/usr/bin/env python from misc.utility.scons_hints import * Import("env") Import("env_modules") def _escape_define(env, config): return f"<{config}>" if env["ninja"] and env.msvc else f'\\"{config}\\"' env_mbed_tls = env_modules.Clone() env_mbed_tls.AddMethod(_escape_define, "EscapeDefine") # Thirdparty source files thirdparty_obj = [] configs = [] if env["builtin_mbedtls"]: env_mbed_tls.Append( CPPDEFINES=[ ("TF_PSA_CRYPTO_CONFIG_FILE", env_mbed_tls.EscapeDefine("godot_psa_config.h")), ("MBEDTLS_CONFIG_FILE", env_mbed_tls.EscapeDefine("godot_mbedtls_config.h")), ] ) configs = ["#thirdparty/mbedtls/godot/godot_psa_config.h", "#thirdparty/mbedtls/godot/godot_mbedtls_config.h"] env_mbed_tls.Prepend( CPPPATH=[ "#thirdparty/mbedtls/godot/", "#thirdparty/mbedtls/include/", "#thirdparty/mbedtls/tf-psa-crypto/include/", "#thirdparty/mbedtls/tf-psa-crypto/drivers/builtin/include/", ] ) # tf-psa-crypto env_psa = env_mbed_tls.Clone() psa_obj = [] psa_sources = [ # Drivers builtin "drivers/builtin/src/aes.c", "drivers/builtin/src/aesce.c", "drivers/builtin/src/aesni.c", "drivers/builtin/src/aria.c", "drivers/builtin/src/bignum.c", "drivers/builtin/src/bignum_core.c", "drivers/builtin/src/bignum_mod.c", "drivers/builtin/src/bignum_mod_raw.c", "drivers/builtin/src/block_cipher.c", "drivers/builtin/src/camellia.c", "drivers/builtin/src/ccm.c", "drivers/builtin/src/chacha20.c", "drivers/builtin/src/chacha20_neon.c", "drivers/builtin/src/chachapoly.c", "drivers/builtin/src/cipher.c", "drivers/builtin/src/cipher_wrap.c", "drivers/builtin/src/cmac.c", "drivers/builtin/src/ctr_drbg.c", "drivers/builtin/src/ecdsa.c", "drivers/builtin/src/ecjpake.c", "drivers/builtin/src/ecp.c", "drivers/builtin/src/ecp_curves.c", "drivers/builtin/src/ecp_curves_new.c", "drivers/builtin/src/entropy.c", "drivers/builtin/src/entropy_poll.c", "drivers/builtin/src/gcm.c", "drivers/builtin/src/hmac_drbg.c", "drivers/builtin/src/md5.c", "drivers/builtin/src/poly1305.c", "drivers/builtin/src/psa_crypto_aead.c", "drivers/builtin/src/psa_crypto_cipher.c", "drivers/builtin/src/psa_crypto_ecp.c", "drivers/builtin/src/psa_crypto_ffdh.c", "drivers/builtin/src/psa_crypto_hash.c", "drivers/builtin/src/psa_crypto_mac.c", "drivers/builtin/src/psa_crypto_pake.c", "drivers/builtin/src/psa_crypto_rsa.c", "drivers/builtin/src/psa_crypto_xof.c", "drivers/builtin/src/psa_util_internal.c", "drivers/builtin/src/ripemd160.c", "drivers/builtin/src/rsa.c", "drivers/builtin/src/rsa_alt_helpers.c", "drivers/builtin/src/sha1.c", "drivers/builtin/src/sha256.c", "drivers/builtin/src/sha3.c", "drivers/builtin/src/sha512.c", # Extras "extras/lmots.c", "extras/lms.c", "extras/md.c", "extras/nist_kw.c", "extras/pk.c", "extras/pk_ecc.c", "extras/pk_rsa.c", "extras/pk_wrap.c", "extras/pkparse.c", "extras/pkwrite.c", # Platform "platform/memory_buffer_alloc.c", "platform/platform.c", "platform/platform_util.c", "platform/threading.c", # Utilities "utilities/asn1parse.c", "utilities/asn1write.c", "utilities/base64.c", "utilities/constant_time.c", "utilities/oid.c", "utilities/pem.c", "utilities/pkcs5.c", # Core "core/psa_crypto.c", "core/psa_crypto_client.c", "core/psa_crypto_random.c", "core/psa_crypto_slot_management.c", "core/psa_crypto_storage.c", "core/psa_its_file.c", "core/psa_util.c", "core/tf_psa_crypto_config.c", "core/tf_psa_crypto_version.c", "core/psa_crypto_driver_wrappers_no_static.c", ] psa_dir = "#thirdparty/mbedtls/tf-psa-crypto/" psa_sources = [psa_dir + file for file in psa_sources] env_psa.Prepend(CPPPATH=[psa_dir + "drivers/builtin/src/"]) env_psa.Prepend(CPPPATH=[psa_dir + "platform/"]) env_psa.Prepend(CPPPATH=[psa_dir + "utilities/"]) env_psa.Prepend(CPPPATH=[psa_dir + "extras/"]) env_psa.Prepend(CPPPATH=[psa_dir + "dispatch/"]) env_psa.Prepend(CPPPATH=[psa_dir + "core/"]) env_psa.disable_warnings() env_psa.add_source_files(psa_obj, psa_sources) env_psa.Depends(psa_obj, configs) env.modules_sources += psa_obj # mbedTLS mbedtls_sources = [ # mbedx509 "library/error.c", "library/mbedtls_config.c", "library/pkcs7.c", "library/x509.c", "library/x509_create.c", "library/x509_crl.c", "library/x509_crt.c", "library/x509_csr.c", "library/x509_oid.c", "library/x509write.c", "library/x509write_crt.c", "library/x509write_csr.c", # mbedtls "library/debug.c", "library/mps_reader.c", "library/mps_trace.c", "library/net_sockets.c", "library/ssl_cache.c", "library/ssl_ciphersuites.c", "library/ssl_client.c", "library/ssl_cookie.c", "library/ssl_debug_helpers_generated.c", "library/ssl_msg.c", "library/ssl_ticket.c", "library/ssl_tls.c", "library/ssl_tls12_client.c", "library/ssl_tls12_server.c", "library/ssl_tls13_keys.c", "library/ssl_tls13_server.c", "library/ssl_tls13_client.c", "library/ssl_tls13_generic.c", "library/timing.c", "library/version.c", "library/version_features.c", ] mbedtls_dir = "#thirdparty/mbedtls/" mbedtls_sources = [mbedtls_dir + file for file in mbedtls_sources] env_library = env_psa.Clone() env_library.Prepend(CPPPATH=["#thirdparty/mbedtls/library/"]) env_library.disable_warnings() env_library.add_source_files(thirdparty_obj, mbedtls_sources) env_library.Depends(thirdparty_obj, psa_obj + configs) env.modules_sources += thirdparty_obj # Godot source files module_obj = [] env_mbed_tls.add_source_files(module_obj, "*.cpp") env_mbed_tls.add_source_files(module_obj, "./mbedtls_cpp_compat.c") if env["tests"]: env_mbed_tls.add_source_files(module_obj, "./tests/*.cpp") env.modules_sources += module_obj env.Depends(module_obj, configs) # Needed to force rebuilding the module files when the thirdparty library is updated. env.Depends(module_obj, thirdparty_obj + configs)