godot/core/crypto/SCsub

#!/usr/bin/env python

Import("env")

env_crypto = env.Clone()

is_builtin = env["builtin_mbedtls"]
has_module = env["module_mbedtls_enabled"]
thirdparty_obj = []

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 just for these few files that can
    # be easily extracted.
    env_crypto.Prepend(CPPPATH=["#thirdparty/mbedtls/include"])

# 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:
    # Minimal mbedTLS config file
    config_path = "thirdparty/mbedtls/include/godot_core_mbedtls_config.h"
    config_path = f"<{config_path}>" if env_crypto["ninja"] and env_crypto.msvc else f'\\"{config_path}\\"'
    env_crypto.Append(CPPDEFINES=[("MBEDTLS_CONFIG_FILE", config_path)])
    # Build minimal mbedTLS library (MD5/SHA/Base64/AES).
    env_thirdparty = env_crypto.Clone()
    env_thirdparty.disable_warnings()
    thirdparty_mbedtls_dir = "#thirdparty/mbedtls/library/"
    thirdparty_mbedtls_sources = [
        "aes.c",
        "base64.c",
        "constant_time.c",
        "ctr_drbg.c",
        "entropy.c",
        "md.c",
        "md5.c",
        "sha1.c",
        "sha256.c",
        "godot_core_mbedtls_platform.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, "#thirdparty/mbedtls/include/godot_core_mbedtls_config.h")
    env.core_sources += thirdparty_obj
elif is_builtin:
    # Module mbedTLS config file
    config_path = "thirdparty/mbedtls/include/godot_module_mbedtls_config.h"
    config_path = f"<{config_path}>" if env_crypto["ninja"] and env_crypto.msvc else f'\\"{config_path}\\"'
    env_crypto.Append(CPPDEFINES=[("MBEDTLS_CONFIG_FILE", config_path)])
    # Needed to force rebuilding the core files when the configuration file is updated.
    thirdparty_obj = ["#thirdparty/mbedtls/include/godot_module_mbedtls_config.h"]

# 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)