7 个版本
0.1.6 | 2023 年 9 月 10 日 |
---|---|
0.1.5 | 2023 年 9 月 9 日 |
0.1.4 | 2023 年 6 月 4 日 |
0.1.3 | 2023 年 5 月 17 日 |
#748 in 命令行工具
36KB
817 行
Compilet
将 Rust、C 和 C++ 编译成 WebAssembly 的服务器。
使用方法
Docker
构建
我们在 Docker Hub 上有一个可用的镜像 Docker Hub (jacoblincool/compilet
),最新的标签支持直接编译 Rust、C 和 C++。
您也可以使用
rs
标签 (~500MB 压缩) 仅编译 Rust,或使用c
标签 (~150MB 压缩) 仅编译 C 和 C++。
此外,您可以使用以下命令构建自己的镜像
docker build -t compilet .
运行
您可以使用以下命令运行镜像
docker run -p 8000:8000 jacoblincool/compilet
或使用 docker compose 文件 来运行镜像
docker compose up
您可能需要一个
.env
文件来设置环境变量。有关更多信息,请查看.env.example
文件
上述两个命令都会在端口 8000
上运行服务器,因此您可以通过 https://127.0.0.1:8000
访问服务器。您也可以通过设置 PORT
环境变量来更改端口。
Cargo
您也可以通过 Cargo 安装 Compilet
cargo install compilet
将其作为 CLI 工具运行更方便
compilet compile <file>
# compilet compile -h for more information
端点
验证
Compilet 使用 JWT 来验证请求。您可以通过设置 APP_SECRET
环境变量来设置 JWT 令牌的秘密密钥,默认为 APP_SECRET
。
您应将 JWT 令牌传递到带有 Bearer
方案的 Authorization
标头中。
-
GET /validate
端点来验证 JWT 令牌是否有效。状态码200
表示令牌有效,否则令牌无效。
编译
Compilet 应该能够在未来排队编译请求。但当前,它只是直接编译源代码。
-
POST /compile
端点用于将源代码编译成 WebAssembly
POST 请求体
{
"lang": "rs",
"code": "fn main() { println!(\"Hello, world!\"); }"
}
响应
{
"success": true,
"message": "Compiled successfully",
"hash": "bb343b0950832ccd077f1515e842196f2ae4bb9e9261b0935ac57916c3cf305d",
"wasm": "<base64 encoded wasm binary>"
}
-
POST /submission
端点用于将源代码编译成 WebAssembly,但立即返回并在后台编译源代码。
POST 请求体
{
"lang": "rs",
"code": "fn main() { println!(\"Hello, world!\"); }"
}
响应
{
"message": "Submitted",
"hash": "bb343b0950832ccd077f1515e842196f2ae4bb9e9261b0935ac57916c3cf305d"
}
-
GET /submission/{hash}
端点用于获取提交状态,以及编译完成的 WebAssembly 二进制文件。
响应
{
"status": "pending",
"message": "Waiting for compilation",
"wasm": null
}
{
"status": "success",
"message": "Compiled successfully",
"wasm": "<base64 encoded wasm binary>"
}
{
"status": "failed",
"message": "Compilation failed (error message)",
"wasm": null
}
系统
-
GET /system
端点用于获取系统信息(目前仅实现了capabilities
)
响应
{
"capabilities": {
"rs": "rust 2021 edition + rand 0.8.5, release build",
"c": "clang 16, level 3 optimizations",
"cpp": "clang++ 16, level 3 optimizations"
},
"status": {
"compiling": 0,
"pending": 0
}
}
开发
在克隆仓库后,您需要
- 运行
./scripts/stdlib.sh
下载 C 和 C++ 的 WASI 标准库。 - 将
libclang_rt.builtins-wasm32.a
复制到 Clang 可以找到的位置。(例如/usr/lib/llvm16/lib/clang/16/lib/wasi
)(您可以在稍后完成,错误信息将告诉您放置的位置。)
您可以使用以下命令以开发模式运行服务器
cargo run
使用以下命令构建服务器
cargo build --release
依赖
~25–58MB
~1M SLoC