Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

希望默认构建一个 Windows ARM64 版本 #230

Open
TGSAN opened this issue Oct 10, 2022 · 7 comments
Open

希望默认构建一个 Windows ARM64 版本 #230

TGSAN opened this issue Oct 10, 2022 · 7 comments

Comments

@TGSAN
Copy link

TGSAN commented Oct 10, 2022

在基于 ARM64 的 Windows 设备上(比如Matebook E Go、Surface Pro X、thinkpad X13s、MacBook),虽然可以用转义运行 Clash Verge,但是速度慢而且不能正常使用TUN模式。
希望可以在 Releases 构建时增加一个 Windows ARM64 的包。

@zzzgydi
Copy link
Owner

zzzgydi commented Oct 10, 2022

尝试过了,上游一个库(rquickjs)不支持win arm,所以暂不提供

@zzzgydi zzzgydi closed this as completed Oct 12, 2022
@KyoSakuyo
Copy link

尝试过了,上游一个库(rquickjs)不支持win arm,所以暂不提供

现在还没能支持吗?

@arkxfly
Copy link

arkxfly commented Oct 8, 2023

我尝试编译,发现 ring 也不支持。可能要等下面这个更新

briansmith/ring#1614

@morn-0
Copy link

morn-0 commented Nov 2, 2023

尝试过了,上游一个库(rquickjs)不支持win arm,所以暂不提供

或许我可以提供一个兼容性比较好的quickjs binding

@zzzgydi
Copy link
Owner

zzzgydi commented Nov 2, 2023

@morn-0 怎么说

@morn-0
Copy link

morn-0 commented Nov 2, 2023

@morn-0 怎么说

我目前维护了一个兼容性比较好的quickjs binding。不过目前在往里面添加canvas api的支持。我可以先拆分出一个干净的分支,在这里先换掉rquickjs保证整体的兼容性

@morn-0
Copy link

morn-0 commented Nov 2, 2023

我简单拆了一个 stable 出来(公司内部已上生产),如果你想测试的话可以使用 quick-rs [stable]

use quick_rs::{context::Context, function::Function, module::Module, runtime::Runtime};

const SCRIPT: &str = r#"
function main(config) {
  if (Array.isArray(config.rules)) {
    config.rules = [...config.rules, "add"];
  }
  // console.log(config);
  config.proxies = ["111"];
  return config;
}
"#;

fn main() {
    let runtime = Runtime::new();
    let context = Context::from(&runtime);

    let script = format!(
        "{};export function _main(config) {{return JSON.stringify(main(JSON.parse(config)));}}",
        SCRIPT
    );
    let value = context.eval_module(&script, "_main").unwrap();
    let module = Module::new(value).unwrap();

    let value = module.get("_main").unwrap();
    let function = Function::new(value).unwrap();

    let string = context.new_string(r#"{"rules":[]}"#).unwrap();
    let value = function.call(vec![string]).unwrap();

    println!("{}", value.to_string().unwrap());
}

这个版本和上游 quickjs 保持一致,未做任何修改仅合并了一些bug fix。在兼容性方面可能是目前 rust 中最好的,只支持 bingen。(之所以维护这个 binding 是因为公司内部需求,之前我们也是用 rquickjs。但是我们有跨平台的需求比如 (Linux, Android, iOS, Windows, macOS)/(aarch64/x86/amd64),但是 rquickjs 在兼容性方面有一些问题,并且存在内存泄漏的风险。所以才会出现这个 binding)

但是目前还不支持 console.* 我觉得可以先 hack 掉,如果你觉得可以的话,我可以加上 console.* 的支持。

@zzzgydi zzzgydi reopened this Nov 3, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants