#!/bin/bash # ===================== 第三方库自动编译(Drogon) ===================== # 检查 Drogon + Trantor 编译产物,缺失时自动从 drogon_repo 源码编译。 # 仅在编译产物不存在时触发,日常开发零开销。 # # 参考: edge_collector/collector/ensure_third_party.sh # 用法: # source ensure_third_party.sh # 被 build.sh / run.sh 引用 # bash ensure_third_party.sh # 也可独立运行 set -euo pipefail # 如果变量已由调用方设置则复用,否则自行推导 SCRIPT_DIR="${SCRIPT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}" THIRD_PARTY="${THIRD_PARTY:-${SCRIPT_DIR}}" # ---- 架构检测 ---- if [ -z "${TARGET_ARCH:-}" ]; then ARCH=$(uname -m) case "${ARCH}" in x86_64) TARGET_ARCH="x64" ;; aarch64|arm64) TARGET_ARCH="arm64" ;; armv7*|arm) TARGET_ARCH="arm32" ;; *) TARGET_ARCH="x64" ;; esac fi export TARGET_ARCH export DROGON_INSTALL="${THIRD_PARTY}/drogon/install/${TARGET_ARCH}" # --- Drogon + Trantor (本地安装) --- # Drogon 使用 find_package(CONFIG) 模式,需要完整 cmake install 树。 # 编译后安装到 third_party/drogon/install/${TARGET_ARCH}/, # 由顶层 CMakeLists.txt 通过 CMAKE_PREFIX_PATH 注入查找路径。 DROGON_REPO="${THIRD_PARTY}/drogon_repo" DROGON_CONFIG="${DROGON_INSTALL}/libs/cmake/Drogon/DrogonConfig.cmake" if [ -f "${DROGON_CONFIG}" ]; then echo "[third_party] Drogon 已编译,跳过 (${DROGON_INSTALL})" else if [ ! -f "${DROGON_REPO}/CMakeLists.txt" ]; then echo "[third_party] ⚠️ 源码目录不存在: drogon_repo,跳过 Drogon" echo "[third_party] (后续 cmake find_package(Drogon) 将报错)" return 0 2>/dev/null || exit 0 elif [ ! -f "${DROGON_REPO}/trantor/CMakeLists.txt" ]; then echo "[third_party] ⚠️ Trantor 源码未就位: drogon_repo/trantor/,跳过 Drogon" echo "[third_party] (后续 cmake find_package(Drogon) 将报错)" return 0 2>/dev/null || exit 0 else echo "[third_party] 编译 Drogon + Trantor (产物缺失) → ${DROGON_INSTALL}" DROGON_BUILD="${DROGON_REPO}/build" rm -rf "${DROGON_BUILD}" mkdir -p "${DROGON_BUILD}" cmake -S "${DROGON_REPO}" -B "${DROGON_BUILD}" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="${DROGON_INSTALL}" \ -DCMAKE_INSTALL_LIBDIR=libs \ -DBUILD_SHARED_LIBS=ON \ -DUSE_SUBMODULE=ON \ -DBUILD_CTL=OFF \ -DBUILD_EXAMPLES=OFF \ -DBUILD_ORM=OFF \ -DBUILD_TESTING=OFF \ -DBUILD_BROTLI=ON \ -DBUILD_YAML_CONFIG=OFF cmake --build "${DROGON_BUILD}" -j"$(nproc)" cmake --install "${DROGON_BUILD}" rm -rf "${DROGON_BUILD}" echo "[third_party] ✅ Drogon + Trantor → ${DROGON_INSTALL}" fi fi echo "[third_party] 第三方库检查完成 ✅"