# Pulls all mbedTLS sources from arduino-pico's pico-sdk into the build so the
# firmware can call mbedtls_* APIs (the precompiled arduino-pico libs only
# expose BearSSL; mbedTLS is shipped as source under lib/mbedtls/library/*.c).
#
# Wired in via `extra_scripts = pre:scripts/add_mbedtls_sources.py` on the
# variants that define HAS_ETHERNET_TLS_API. POSIX-only code paths inside
# mbedtls are neutralized by src/mbedtls_user_config.h (referenced via the
# variant's -DMBEDTLS_USER_CONFIG_FILE build flag). Unused symbols are dropped
# at link time, so non-TLS envs that pull this script in pay nothing.

# trunk-ignore-all(ruff/F821)
# trunk-ignore-all(flake8/F821): Import/env/Return are SCons-injected globals
import glob
import os

Import("env")

framework_dir = env.PioPlatform().get_package_dir("framework-arduinopico")
if not framework_dir:
    print("[add_mbedtls_sources] framework-arduinopico package not found - skipping")
    Return()

mbedtls_root = os.path.join(framework_dir, "pico-sdk", "lib", "mbedtls")
include_dir = os.path.join(mbedtls_root, "include")
src_dir = os.path.join(mbedtls_root, "library")

if not os.path.isdir(src_dir):
    print(f"[add_mbedtls_sources] mbedtls library dir not found at {src_dir}")
    Return()

# mbedtls headers + project src (where mbedtls_user_config.h lives) must be on
# the include path when the .c files compile.
env.Append(CPPPATH=[include_dir, env["PROJECT_SRC_DIR"]])

# Inject the user-config define through CPPDEFINES so SCons handles the
# embedded quotes correctly. The build_flags shell parser drops/corrupts the
# value when the same is expressed as -D 'MBEDTLS_USER_CONFIG_FILE="..."'.
env.Append(CPPDEFINES=[("MBEDTLS_USER_CONFIG_FILE", '\\"mbedtls_user_config.h\\"')])

sources = sorted(glob.glob(os.path.join(src_dir, "*.c")))
print(
    f"[add_mbedtls_sources] Adding {len(sources)} mbedTLS source files from {src_dir}"
)

env.BuildSources(
    os.path.join("$BUILD_DIR", "mbedtls_pico"),
    src_dir,
    src_filter=["+<*.c>"],
)
