NFCcreate-web/test_arm_build.sh
2025-09-25 19:04:00 +08:00

191 lines
5.7 KiB
Bash
Raw 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
# NTAG424 ARM 編譯測試腳本
# 展示所有 ARM 編譯選項和問題排除
set -e
echo "🔧 NTAG424 ARM 編譯測試"
echo "========================================="
echo ""
# 檢查交叉編譯工具
echo "📋 檢查交叉編譯工具..."
make check-cross-tools
echo ""
# 顯示可用編譯選項
echo "🎯 可用的 ARM 編譯選項:"
echo ""
echo "✅ 動態連結版本 (推薦)"
echo " make arm64 # ARM 64-bit (aarch64)"
echo " make arm32 # ARM 32-bit (armhf)"
echo " make armel # ARM 軟浮點 (armel)"
echo ""
echo "⚠️ 靜態連結版本 (目前有問題)"
echo " make arm64-static # 會遇到 FTDI/libtomcrypt 依賴問題"
echo " make arm32-static # 會遇到 FTDI/libtomcrypt 依賴問題"
echo ""
# 詢問用戶要測試哪個版本
echo "請選擇要測試的編譯選項:"
echo " (1) ARM64 動態版本 (推薦)"
echo " (2) ARM32 動態版本 (推薦)"
echo " (3) ARMEL 版本"
echo " (4) ARM64 靜態版本 (展示問題)"
echo " (5) ARM32 靜態版本 (展示問題)"
echo " (6) 全部測試"
echo " (0) 退出"
echo ""
read -p "請選擇 (0-6): " choice
case $choice in
1)
echo ""
echo "🚀 編譯 ARM64 動態版本..."
make arm64
echo ""
echo "✅ ARM64 動態版本編譯成功!"
echo "📁 輸出目錄: arm64_release/"
echo "📚 需要函式庫: ufr-lib/linux/aarch64/"
;;
2)
echo ""
echo "🚀 編譯 ARM32 動態版本..."
make arm32
echo ""
echo "✅ ARM32 動態版本編譯成功!"
echo "📁 輸出目錄: arm32_release/"
echo "📚 需要函式庫: ufr-lib/linux/arm-hf/"
;;
3)
echo ""
echo "🚀 編譯 ARMEL 版本..."
make armel
echo ""
echo "✅ ARMEL 版本編譯成功!"
echo "📁 輸出目錄: armel_release/"
echo "📚 需要函式庫: ufr-lib/linux/arm-el/"
;;
4)
echo ""
echo "⚠️ 嘗試編譯 ARM64 靜態版本 (預期會失敗)..."
echo "這將展示靜態連結的已知問題..."
echo ""
if make arm64-static; then
echo "✅ 意外成功ARM64 靜態版本編譯完成。"
else
echo ""
echo "❌ 如預期ARM64 靜態編譯失敗。"
echo ""
echo "🔍 常見錯誤分析:"
echo "• undefined reference to 'FT_Close' - 缺少 FTDI 函式庫"
echo "• undefined reference to 'ecc_find_curve' - 缺少 libtomcrypt"
echo "• multiple definition of 'hex2bin' - 符號衝突"
echo ""
echo "💡 解決方案:"
echo "• 使用動態連結版本: make arm64"
echo "• 部署時包含函式庫目錄: ufr-lib/linux/aarch64/"
fi
;;
5)
echo ""
echo "⚠️ 嘗試編譯 ARM32 靜態版本 (預期會失敗)..."
echo "這將展示靜態連結的已知問題..."
echo ""
if make arm32-static; then
echo "✅ 意外成功ARM32 靜態版本編譯完成。"
else
echo ""
echo "❌ 如預期ARM32 靜態編譯失敗。"
echo ""
echo "🔍 常見錯誤分析:"
echo "• undefined reference to 'FT_Close' - 缺少 FTDI 函式庫"
echo "• undefined reference to 'ecc_find_curve' - 缺少 libtomcrypt"
echo "• multiple definition of 'hex2bin' - 符號衝突"
echo ""
echo "💡 解決方案:"
echo "• 使用動態連結版本: make arm32"
echo "• 部署時包含函式庫目錄: ufr-lib/linux/arm-hf/"
fi
;;
6)
echo ""
echo "🚀 測試所有 ARM 編譯選項..."
echo ""
# 測試動態版本
echo "📋 測試動態連結版本:"
echo ""
echo "• ARM64 動態版本..."
if make arm64; then
echo " ✅ 成功"
else
echo " ❌ 失敗"
fi
echo "• ARM32 動態版本..."
if make arm32; then
echo " ✅ 成功"
else
echo " ❌ 失敗"
fi
echo "• ARMEL 版本..."
if make armel; then
echo " ✅ 成功"
else
echo " ❌ 失敗"
fi
echo ""
echo "📋 測試靜態連結版本 (預期會失敗)"
echo ""
echo "• ARM64 靜態版本..."
if make arm64-static 2>/dev/null; then
echo " ✅ 意外成功"
else
echo " ❌ 如預期失敗 (缺少靜態依賴)"
fi
echo "• ARM32 靜態版本..."
if make arm32-static 2>/dev/null; then
echo " ✅ 意外成功"
else
echo " ❌ 如預期失敗 (缺少靜態依賴)"
fi
echo ""
echo "📊 測試總結:"
echo "• 動態連結版本: 完全支援 ✅"
echo "• 靜態連結版本: 有已知問題 ⚠️"
echo "• 建議使用動態版本進行部署"
;;
0)
echo "退出測試"
exit 0
;;
*)
echo "無效選擇"
exit 1
;;
esac
echo ""
echo "🎯 部署指南:"
echo ""
echo "1. 動態版本部署 (推薦)"
echo " scp arm64_release/nt4h_c_example user@arm-device:"
echo " scp -r ufr-lib/linux/aarch64/ user@arm-device:ufr-lib"
echo " ssh user@arm-device 'export LD_LIBRARY_PATH=./ufr-lib:\$LD_LIBRARY_PATH'"
echo ""
echo "2. 使用部署腳本:"
echo " ./deploy_arm.sh <主機> <使用者> <架構>"
echo ""
echo "3. 查看完整指南:"
echo " cat ARM_BUILD_GUIDE.md"
echo ""
echo "✅ 測試完成!"