102 lines
4.2 KiB
Python
102 lines
4.2 KiB
Python
#!/usr/bin/env python
|
|
from misc.utility.scons_hints import *
|
|
|
|
Import("env")
|
|
|
|
|
|
def _escape_define(env, config):
|
|
return f"<{config}>" if env["ninja"] and env.msvc else f'\\"{config}\\"'
|
|
|
|
|
|
env_crypto = env.Clone()
|
|
env_crypto.AddMethod(_escape_define, "EscapeDefine")
|
|
|
|
is_builtin = env["builtin_mbedtls"]
|
|
has_module = env["module_mbedtls_enabled"]
|
|
thirdparty_obj = []
|
|
configs = []
|
|
|
|
if is_builtin or not has_module:
|
|
# Use our headers for builtin or if the module is not going to be compiled.
|
|
# We decided not to depend on system mbedtls and bundle a minimal version
|
|
# when building without the module.
|
|
env_crypto.Prepend(
|
|
CPPPATH=[
|
|
"#thirdparty/mbedtls/godot/",
|
|
"#thirdparty/mbedtls/include/",
|
|
"#thirdparty/mbedtls/tf-psa-crypto/include/",
|
|
"#thirdparty/mbedtls/tf-psa-crypto/drivers/builtin/include/",
|
|
]
|
|
)
|
|
env_crypto.Append(
|
|
CPPDEFINES=[
|
|
("TF_PSA_CRYPTO_CONFIG_FILE", env_crypto.EscapeDefine("godot_psa_config.h")),
|
|
("MBEDTLS_CONFIG_FILE", env_crypto.EscapeDefine("godot_mbedtls_config.h")),
|
|
]
|
|
)
|
|
configs = ["#thirdparty/mbedtls/godot/godot_psa_config.h", "#thirdparty/mbedtls/godot/godot_mbedtls_config.h"]
|
|
if not has_module:
|
|
env_crypto.Append(CPPDEFINES=["GODOT_MBEDTLS_LIGHT"])
|
|
# Our custom mbedTLS platform functions
|
|
platform_obj = []
|
|
env_crypto.add_source_files(platform_obj, ["#thirdparty/mbedtls/godot/godot_mbedtls_platform.cpp"])
|
|
env.core_sources += platform_obj
|
|
env.Depends(platform_obj, configs)
|
|
|
|
# MbedTLS core functions (for CryptoCore).
|
|
# If the mbedtls module is compiled we don't need to add the .c files with our
|
|
# custom config since they will be built by the module itself.
|
|
# Only if the module is not enabled, we must compile here the required sources
|
|
# to make a "light" build with only the necessary mbedtls files.
|
|
if not has_module:
|
|
# Build minimal mbedTLS library (MD5/SHA/Base64/AES).
|
|
env_thirdparty = env_crypto.Clone()
|
|
env_thirdparty.disable_warnings()
|
|
psa_dir = "#thirdparty/mbedtls/tf-psa-crypto/"
|
|
env_thirdparty.Prepend(
|
|
CPPPATH=[
|
|
psa_dir + d
|
|
for d in ["include/", "core/", "dispatch/", "extras", "platform/", "utilities/", "drivers/builtin/src/"]
|
|
]
|
|
)
|
|
env_thirdparty.Prepend(CPPPATH=["#thirdparty/mbedtls/tf-psa-crypto/drivers/builtin/include/"])
|
|
|
|
thirdparty_mbedtls_dir = "#thirdparty/mbedtls/"
|
|
thirdparty_mbedtls_sources = [
|
|
"tf-psa-crypto/core/psa_crypto.c",
|
|
"tf-psa-crypto/core/psa_crypto_client.c",
|
|
"tf-psa-crypto/core/psa_crypto_driver_wrappers_no_static.c",
|
|
"tf-psa-crypto/core/psa_crypto_random.c",
|
|
"tf-psa-crypto/core/psa_crypto_slot_management.c",
|
|
"tf-psa-crypto/utilities/base64.c",
|
|
"tf-psa-crypto/utilities/constant_time.c",
|
|
"tf-psa-crypto/platform/threading.c",
|
|
"tf-psa-crypto/extras/md.c",
|
|
"tf-psa-crypto/drivers/builtin/src/aes.c",
|
|
"tf-psa-crypto/drivers/builtin/src/ctr_drbg.c",
|
|
"tf-psa-crypto/drivers/builtin/src/cipher.c",
|
|
"tf-psa-crypto/drivers/builtin/src/cipher_wrap.c",
|
|
"tf-psa-crypto/drivers/builtin/src/entropy.c",
|
|
"tf-psa-crypto/drivers/builtin/src/entropy_poll.c",
|
|
"tf-psa-crypto/drivers/builtin/src/md5.c",
|
|
"tf-psa-crypto/drivers/builtin/src/psa_crypto_cipher.c",
|
|
"tf-psa-crypto/drivers/builtin/src/psa_crypto_hash.c",
|
|
"tf-psa-crypto/drivers/builtin/src/psa_crypto_rsa.c",
|
|
"tf-psa-crypto/drivers/builtin/src/psa_util_internal.c",
|
|
"tf-psa-crypto/drivers/builtin/src/sha1.c",
|
|
"tf-psa-crypto/drivers/builtin/src/sha256.c",
|
|
]
|
|
thirdparty_mbedtls_sources = [thirdparty_mbedtls_dir + file for file in thirdparty_mbedtls_sources]
|
|
env_thirdparty.add_source_files(thirdparty_obj, thirdparty_mbedtls_sources)
|
|
# Needed to force rebuilding the library when the configuration file is updated.
|
|
env_thirdparty.Depends(thirdparty_obj, configs)
|
|
env.core_sources += thirdparty_obj
|
|
|
|
# Godot source files
|
|
core_obj = []
|
|
|
|
env_crypto.add_source_files(core_obj, "*.cpp")
|
|
env.core_sources += core_obj
|
|
|
|
# Needed to force rebuilding the core files when the thirdparty library is updated.
|
|
env.Depends(core_obj, thirdparty_obj + configs)
|