Files

74 lines
4.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# mbedtls 3.6.2 — Mbed TLS(Apache-2.0)。裁剪配置 + 静态编 mipsel。
# 产物体积:libmbedcrypto.a(AES/MD5/RSA/Base64/Ec),libmbedx509.a(证书解析),libmbedtls.a(TLS1.2 client)。
# 裁剪策略:保留 TLS1.2 client + AES-GCM/CBC + RSA/ECDH + MD5 + base64 + X509 解析;
# 去掉 TLS1.3/DTLS/PSA/多余密码套件(PKCS5/7/12)/PEM_WRITE/CTR_DRBG(用自定义 rng)。
# 保留 PEM_PARSE(加载 CA bundle 需要)。
# 说明:脚本会把裁剪后的 config 复制到 include/mbedtls/mbedtls_config.h(原默认卷保留在 vendor git 里,
# 可用 `git -C vendor/mbedtls checkout -- include/mbedtls/mbedtls_config.h` 恢复)。
. ./libs_common.sh
MB="$VENDOR/mbedtls"
CFG_TMP="$MB/config/mbedtls_config_ncm.h" # 裁剪后的 config 落盘于此(交付物)
mkdir -p "$MB/config"
cp "$MB/include/mbedtls/mbedtls_config.h" "$CFG_TMP"
# 逐个 unset(config.py 一次只能 unset 一个符号)
unsets=(
MBEDTLS_SSL_PROTO_TLS1_3 MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
MBEDTLS_SSL_PROTO_DTLS MBEDTLS_SSL_DTLS_CONNECTION_ID
MBEDTLS_SSL_DTLS_ANTI_REPLAY MBEDTLS_SSL_DTLS_HELLO_VERIFY
MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE MBEDTLS_SSL_CONTEXT_SERIALIZATION
MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
MBEDTLS_SSL_ALPN MBEDTLS_SSL_RENEGOTIATION MBEDTLS_SSL_CBC_RECORD_SPLITTING
MBEDTLS_SSL_ASYNC_PRIVATE MBEDTLS_SSL_TRUNCATED_HMAC MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
MBEDTLS_SSL_RECORD_SIZE_LIMIT MBEDTLS_SSL_DTLS_SRTP MBEDTLS_SSL_COOKIE_C
MBEDTLS_CAMELLIA_C MBEDTLS_ARIA_C MBEDTLS_DES_C MBEDTLS_CHACHA20_C
MBEDTLS_CHACHAPOLY_C MBEDTLS_CCM_C MBEDTLS_NIST_KW_C MBEDTLS_ECJPAKE_C
MBEDTLS_HKDF_C MBEDTLS_PSA_CRYPTO_C MBEDTLS_CTR_DRBG_C MBEDTLS_ENTROPY_C
MBEDTLS_PEM_WRITE_C MBEDTLS_PKCS5_C MBEDTLS_PKCS7_C
MBEDTLS_PKCS12_C MBEDTLS_MD4_C MBEDTLS_X509_CRL_PARSE_C MBEDTLS_X509_CSR_PARSE_C
MBEDTLS_SSL_ECP_RESTARTABLE MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
# PSA 关联项:去掉全部 PSA/LMS/ITS(我们用 legacy API,不用 PSA)
MBEDTLS_PSA_CRYPTO_STORAGE_C MBEDTLS_PSA_ITS_FILE_C MBEDTLS_PSA_KEY_STORE_DYNAMIC
MBEDTLS_LMS_C MBEDTLS_PSA_CRYPTO_CLIENT
)
CFGF="$MB/include/mbedtls/mbedtls_config.h"
for s in "${unsets[@]}"; do
python3 "$MB/scripts/config.py" --file "$CFG_TMP" unset "$s" >/dev/null 2>&1 || true
done
echo "trimmed config enabled-count: $(grep -c '^#define MBEDTLS_' "$CFG_TMP") (default: 141)"
# 应用裁剪 config 到默认位置(build 默认读 include/mbedtls/mbedtls_config.h)
cp "$CFG_TMP" "$CFGF"
# 我们不用 PSA,且不希望 build 因缺 python-jsonschema 重新生成 PSA 驱动包装文件:
# 把框架生成文件 touch 成“比 config 新”,让 make 跳过重新生成。
touch "$MB/library/error.c" "$MB/library/version_features.c" \
"$MB/library/ssl_debug_helpers_generated.c" \
"$MB/library/psa_crypto_driver_wrappers.h" \
"$MB/library/psa_crypto_driver_wrappers_no_static.c"
# 关键:config 变更不会自动触发 .c 重编,务必清掉旧对象/库再重编,否则 PEM 等新启用模块不会进库。
rm -f "$MB/library"/*.o "$MB/library"/*.a
BM="$OUT/mbedtls/mipsel"; rm -rf "$BM"; mkdir -p "$BM"
# 在 vendor 源码内建,输出到本 app 的 out 目录
make -C "$MB" lib \
BUILD="$BM" \
CC="$CC_MIPS" \
AR="$AR_MIPS" \
CFLAGS="-Os -Wno-unused-parameter -fno-stack-protector -ffunction-sections -fdata-sections" \
LD="$CC_MIPS" 2>&1 | tail -6
echo "make exit=${PIPESTATUS[0]}"
# 把产物从 vendor/library 拷到本 app 的 out/mbedtls/mipsel(make 的 BUILD 变量在本版 Makefile 不生效)
mkdir -p "$BM"
for a in libmbedcrypto.a libmbedx509.a libmbedtls.a; do
[ -s "$MB/library/$a" ] && cp "$MB/library/$a" "$BM/$a"
done
echo "=== mbedtls (mipsel) ==="
for a in libmbedcrypto.a libmbedx509.a libmbedtls.a; do
[ -s "$BM/$a" ] && { echo "-- $a --"; measure_archive "$BM/$a"; }
done