#!/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 "✅ 測試完成!"