zzzgydi / clash-verge

A Clash GUI based on tauri. Supports Windows, macOS and Linux.
21.45k stars 3.18k forks source link

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

Open TGSAN opened 2 years ago

TGSAN commented 2 years ago

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

zzzgydi commented 2 years ago

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

KyoSakuyo commented 1 year ago

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

现在还没能支持吗?

arkxfly commented 1 year ago

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

https://github.com/briansmith/ring/issues/1614

morn-0 commented 1 year ago

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

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

zzzgydi commented 1 year ago

@morn-0 怎么说

morn-0 commented 1 year ago

@morn-0 怎么说

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

morn-0 commented 1 year ago

我简单拆了一个 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.* 的支持。