Boscop / web-view

Rust bindings for webview, a tiny cross-platform library to render web-based GUIs for desktop applications
MIT License
1.92k stars 175 forks source link

aarch64 OBJC_OLD_DISPATCH_PROTOTYPES=1 ignored #292

Open chairmanwow opened 3 years ago

chairmanwow commented 3 years ago

Hi, I'm trying to build a hello world level app using web-view. Builds perfectly on amd64 Linux. On the aarch64 apple m1, I'm running into issues even building.

I did some digging into OBJC_OLD_DISPATCH_PROTOTYPES=1 and build.rs and see you're already using the right flag to activate the old prototype that took three args. I'm confused why this is happening and wondering if this is an aarch64-specific issue? I tried setting CFLAGS_arch64_apple_darwin to -DOBJC_OLD_DISPATCH_PROTOTYPES=1 but this probably had no effect since you do this already in build.rs. I did -ferror-limit=0 for kicks and got to about 120 errors, so I'm clearly busted. I also tried setting -framework WebKit just to see if there was something around that. Also nothing.

If you have any suggestions on a fix, or if you know this is just my environment, I'd appreciate the info.

Build error below:

Caused by:
  process didn't exit successfully: `~/server/target/debug/build/webview-sys-5d6f4b20218f03fb/build-script-build` (exit status: 1)
  --- stdout
  cargo:rustc-link-lib=framework=Cocoa
  cargo:rustc-link-lib=framework=WebKit
  TARGET = Some("aarch64-apple-darwin")
  OPT_LEVEL = Some("0")
  HOST = Some("aarch64-apple-darwin")
  CC_aarch64-apple-darwin = None
  CC_aarch64_apple_darwin = None
  HOST_CC = None
  CC = None
  CFLAGS_aarch64-apple-darwin = None
  CFLAGS_aarch64_apple_darwin = None
  HOST_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some("true")
  CARGO_CFG_TARGET_FEATURE = Some("aes,crc,crypto,dpb,fcma,fp,fp16,jsconv,lse,neon,ras,rcpc,rdm,sha2,v8.1a,v8.2a,v8.3a")
  CC_aarch64-apple-darwin = None
  CC_aarch64_apple_darwin = None
  HOST_CC = None
  CC = None
  CFLAGS_aarch64-apple-darwin = None
  CFLAGS_aarch64_apple_darwin = None
  HOST_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  CARGO_CFG_TARGET_FEATURE = Some("aes,crc,crypto,dpb,fcma,fp,fp16,jsconv,lse,neon,ras,rcpc,rdm,sha2,v8.1a,v8.2a,v8.3a")
  CC_aarch64-apple-darwin = None
  CC_aarch64_apple_darwin = None
  HOST_CC = None
  CC = None
  CFLAGS_aarch64-apple-darwin = None
  CFLAGS_aarch64_apple_darwin = None
  HOST_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  CARGO_CFG_TARGET_FEATURE = Some("aes,crc,crypto,dpb,fcma,fp,fp16,jsconv,lse,neon,ras,rcpc,rdm,sha2,v8.1a,v8.2a,v8.3a")
  running: "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-fno-omit-frame-pointer" "-arch" "arm64" "-I" "webview.h" "-Wall" "-Wextra" "-x" "objective-c" "-std=c11" "-w" "-DDEBUG" "-DOBJC_OLD_DISPATCH_PROTOTYPES=1" "-o" "~/server/target/debug/build/webview-sys-90d3225d97425bce/out/webview_cocoa.o" "-c" "webview_cocoa.c"

. . . loads of errors related to the objc_msgSend signature. . .

  cargo:warning=webview_cocoa.c:185:43: error: too many arguments to function call, expected 0, have 2
  cargo:warning=                   id path = objc_msgSend(url, sel_registerName("path"));
  cargo:warning=                             ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:181:16: error: too many arguments to function call, expected 0, have 3
  cargo:warning=  objc_msgSend(savePanel, sel_registerName("beginWithCompletionHandler:"),
  cargo:warning=  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=fatal error: too many errors emitted, stopping now [-ferror-limit=]
  cargo:warning=20 errors generated.
  exit status: 1

  --- stderr

  error occurred: Command "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-fno-omit-frame-pointer" "-arch" "arm64" "-I" "webview.h" "-Wall" "-Wextra" "-x" "objective-c" "-std=c11" "-w" "-DDEBUG" "-DOBJC_OLD_DISPATCH_PROTOTYPES=1" "-o" "~/server/target/debug/build/webview-sys-90d3225d97425bce/out/webview_cocoa.o" "-c" "webview_cocoa.c" with args "cc" did not execute successfully (status code exit status: 1).
gaoxiaojun commented 3 years ago

me too

svenpaulsen commented 3 years ago

OBJC_OLD_DISPATCH_PROTOTYPES is ignored on ARM based Macs on purpose. I've addressed this in #294.

brandonros commented 2 years ago

For anyone else: crates.rs 0.7.3 version does not have this patch https://crates.io/crates/web-view

Instead do this in Cargo.toml:

[dependencies]
web-view = { git = "https://github.com/Boscop/web-view", ref = "e87e08cab3a2d500d54068ec9c7aaa055a711465" }

If somebody wanted to kick off a 0.7.4 release if there was time with that latest Mac ARM64 patch... thank you very much for doing it! awesome package nevertheless!

nothingismagick commented 2 years ago

Hey @brandonros - seems like you're visiting a project that has mostly stalled. Over at tauri, we used this lib for a while, but then moved to the webview project, and finally decided to just bite the bullet and write our own full bindings in rust.

Please consider https://github.com/tauri-apps/wry to be the "spiritual successor" if not exactly the replacement for this repository here.

And the framework that consumes wry is called tauri, and comes with a bunch of APIs and a bundler and a whole system to get your project moving really quickly.