这个项目能做什么

此项目提供 [Bun](https://bun.sh) 的修改版构建,可在 Android/Termux(aarch64)上使用 Bionic libc 原生运行。无需 proot、无需 glibc-runner、无需 LD_PRELOAD、无需 termux-exec——所有修复均通过 Rust 的 `#[cfg(target_os = "android")]` 分支直接编译进二进制。 ### 解决的问题 上游 Bun 1.4 的 Android 构建在 Termux 上仍存在三个问题: - `bun install` 因 SIGSYS 崩溃,因为 Android 的 zygote seccomp 配置会捕获 `fchmodat2` 和 `openat2` 而不是返回 `ENOSYS`,导致上游运行时回退无法执行。 - `bunx <pkg>` 因 ENOENT 失败,因为 npm shim 带有 `#!/usr/bin/env node` shebang,而 Android 没有 `/usr/bin`。 - `bun:ffi cc()` 报告 TinyCC 已禁用,因为上游在 Android 上关闭了该功能。 此 fork 针对 Bun v1.4.0 应用了七个源码级补丁来修复这些问题。 ### 功能 - **完整 FFI 支持**:`dlopen`、`cc()` 和 `JSCallback` 均可用。 - **在 Android 上启用 TinyCC**:通过 `memfd_create` 实现 SELinux 安全的 JIT 内存,并使用 ARM64 long-call veneer 处理超出范围的 BL 调用。 - **绕过 seccomp 陷阱**:`lchmod` 使用 `fchmodat(AT_SYMLINK_NOFOLLOW)` 而不是被捕获的 `fchmodat2`;解析器遍历使用普通 `openat` 而不是被捕获的 `openat2`。 - **Shebang 重映射**:缺少解释器的脚本会将 `/usr/bin` 等路径重映射到 `$PREFIX/bin`。 - **`bunx` 可用**:启动器正确设置 `argv[0]` 以支持脚本生成。 ### 兼容性 | 项目 | 状态 | |---|---| | 架构 | `aarch64`(arm64) | | Android | 10+(API 29+,SELinux untrusted_app_27+) | | Bun 版本 | 1.4.0 | | `bun install` | 可用(seccomp 绕过) | | `bun run` / `bunx` | 可用 | | `bun build --compile` | 可用(上游已修复) | | `bun:ffi` `dlopen` / `cc()` / `JSCallback` | 可用 | | opentui TUI | 可用 | ### 安装 ```bash curl -fsSL https://raw.githubusercontent.com/bd-loser/bun-termux/main/scripts/install.sh | bash ``` 将 `bun` 和 `bunx` 安装到 `$PREFIX/bin`。 ### 从源码构建 需要 Rust、NDK r27c、clang 18、CMake、Ninja 和 Bun(用于引导)。完整说明见 [docs/BUILD.md](docs/BUILD.md)。 ### 许可证 fork 补丁为 MIT;TinyCC 组件为 LGPL-2.1;上游 Bun 为 MIT。