|
| 1 | +TERMUX_PKG_HOMEPAGE=https://turbo.build/ |
| 2 | +TERMUX_PKG_DESCRIPTION="Rust-based incremental compilation engine and bundler for Next.js" |
| 3 | +TERMUX_PKG_MAINTAINER="@xingguangcuican6666" |
| 4 | +TERMUX_PKG_LICENSE="MIT" |
| 5 | +TERMUX_PKG_VERSION=15.1.6 |
| 6 | +TERMUX_PKG_SRCURL=https://github.com/vercel/next.js/archive/refs/tags/v${TERMUX_PKG_VERSION}.tar.gz |
| 7 | +TERMUX_PKG_SHA256=50badae2e656fff06a1f23d28e9d151b9ee582f40620d9a43ad75eff35a7f6ba |
| 8 | +TERMUX_PKG_BUILD_IN_SRC=true |
| 9 | +TERMUX_RUST_VERSION="nightly" |
| 10 | + |
| 11 | +termux_step_make() { |
| 12 | + local RUST_TARGET |
| 13 | + case "$TERMUX_ARCH" in |
| 14 | + aarch64) RUST_TARGET="aarch64-linux-android" ;; |
| 15 | + arm) RUST_TARGET="armv7-linux-androideabi" ;; |
| 16 | + i686) RUST_TARGET="i686-linux-android" ;; |
| 17 | + x86_64) RUST_TARGET="x86_64-linux-android" ;; |
| 18 | + esac |
| 19 | + |
| 20 | + # 1. 环境准备 |
| 21 | + termux_setup_rust |
| 22 | + termux_setup_nodejs |
| 23 | + export ANDROID_NDK_LATEST_HOME="${NDK}" |
| 24 | + |
| 25 | + # 2. 核心:开启 Tokio 不稳定特性,解决 disable_lifo_slot 报错 |
| 26 | + export RUSTFLAGS="--cfg tokio_unstable" |
| 27 | + |
| 28 | + # 3. 核心:动态绑定 Linker,解决 x86_64 误用 aarch64 编译器的问题 |
| 29 | + # $CC 是 Termux 提供的指向当前架构正确编译器的变量 |
| 30 | + local ENV_PREFIX=$(echo "$RUST_TARGET" | tr '[:lower:]-' '[:upper:]_') |
| 31 | + export "CARGO_TARGET_${ENV_PREFIX}_LINKER"="$CC" |
| 32 | + export "CC_${RUST_TARGET//-/_}"="$CC" |
| 33 | + |
| 34 | + # 4. 安装依赖 |
| 35 | + npx pnpm install |
| 36 | + |
| 37 | + # 5. 进入子包目录并运行你指定的脚本 |
| 38 | + # 因为你已经 patch 了该目录下的 package.json,所以这里会识别新的 triples |
| 39 | + cd packages/next-swc |
| 40 | + npx pnpm run build-native-release --target "$RUST_TARGET" |
| 41 | +} |
| 42 | + |
| 43 | +termux_step_make_install() { |
| 44 | + local NAPI_ARCH |
| 45 | + case "$TERMUX_ARCH" in |
| 46 | + aarch64) NAPI_ARCH="arm64" ;; |
| 47 | + arm) NAPI_ARCH="arm-eabi" ;; |
| 48 | + i686) NAPI_ARCH="ia32" ;; |
| 49 | + x86_64) NAPI_ARCH="x64" ;; |
| 50 | + esac |
| 51 | + |
| 52 | + local PACKAGE_NAME="@next/swc-android-${NAPI_ARCH}" |
| 53 | + local INSTALL_DIR="$TERMUX_PREFIX/lib/node_modules/${PACKAGE_NAME}" |
| 54 | + local BINARY_NAME="next-swc.android-${NAPI_ARCH}.node" |
| 55 | + |
| 56 | + mkdir -p "$INSTALL_DIR" |
| 57 | + |
| 58 | + # 拷贝产物 (napi build 默认会把产物放在目录根部或 native/ 下) |
| 59 | + # 如果你在 package.json 里指定了输出到 native,路径如下: |
| 60 | + install -Dm755 "native/${BINARY_NAME}" "$INSTALL_DIR/${BINARY_NAME}" |
| 61 | + |
| 62 | + # 瘦身:剥离调试符号 |
| 63 | + ${STRIP} --strip-unneeded "$INSTALL_DIR/${BINARY_NAME}" |
| 64 | + |
| 65 | + # 生成符合 Termux Linter 要求的 package.json |
| 66 | + cat > "$INSTALL_DIR/package.json" <<EOF |
| 67 | +{ |
| 68 | + "name": "${PACKAGE_NAME}", |
| 69 | + "version": "$TERMUX_PKG_VERSION", |
| 70 | + "os": ["android"], |
| 71 | + "cpu": ["${NAPI_ARCH}"], |
| 72 | + "main": "${BINARY_NAME}" |
| 73 | +} |
| 74 | +EOF |
| 75 | +} |
0 commit comments