gyp-next icon indicating copy to clipboard operation
gyp-next copied to clipboard

broke compilation of nodejs-mobile for iOS from a x64 macBook

Open gengjiawen opened this issue 3 years ago • 2 comments

TL;DR this commit broke compilation of nodejs-mobile for iOS from an x64 macBook. See PR https://github.com/nodejs-mobile/nodejs-mobile/pull/9

(I'm not sure if it's good practice to comment on old PRs, so feel free to tell me to move this discussion elsewhere.)

I maintain nodejs-mobile lately, and I'm updating our fork from Node 12.x to Node 16.x. Since we're compiling node.js for iOS, we want the arch to be arm64, but the host clang has flags like __amd64__ and this mixed with the iPhoneOS SDK headers ends up causing an Unsupported architecture compilation error.

Maybe a solution would be to patch this gyp-next script to detect whether we're running in arm64 darwin (such checks are common throughout the codebase, I've noticed) and then use the new logic. Else, use the old logic.

What do you think?

Originally posted by @staltz in https://github.com/nodejs/gyp-next/issues/78#issuecomment-1375664549

gengjiawen avatar Jan 10 '23 11:01 gengjiawen

cc @MarshallOfSound @rvagg

gengjiawen avatar Jan 10 '23 11:01 gengjiawen

Similar issue building on a x64 macBook using "nodejs-mobile-react-native": "16.17.4" for an iPhone simulator (iOS target 15). I'm using node version v16.15.1 . So I can't run "nodejs-mobile-react-native" on an iOS simulator. I'm reporting the error below:

ld: warning: ignoring file /Users/simone.corsato/git/SwingMobile/node_modules/nodejs-mobile-react-native/ios/NodeMobile.framework/NodeMobile, building for iOS Simulator-x86_64 but attempting to link with file built for iOS-arm64
Undefined symbols for architecture x86_64:
  "_napi_call_function", referenced from:
      Channel::invokeNodeListener(char*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_close_handle_scope", referenced from:
      Channel::invokeNodeListener(char*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_coerce_to_string", referenced from:
      Method_SendMessage(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_create_reference", referenced from:
      Method_RegisterChannel(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_create_string_utf8", referenced from:
      Method_GetDataDir(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Channel::invokeNodeListener(char*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_define_properties", referenced from:
      Init(napi_env__*, napi_value__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_get_cb_info", referenced from:
      Method_RegisterChannel(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_SendMessage(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_get_global", referenced from:
      Channel::invokeNodeListener(char*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_get_last_error_info", referenced from:
      Method_RegisterChannel(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_SendMessage(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_GetDataDir(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Init(napi_env__*, napi_value__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_get_reference_value", referenced from:
      Channel::invokeNodeListener(char*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_get_value_string_utf8", referenced from:
      Method_RegisterChannel(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_SendMessage(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_is_exception_pending", referenced from:
      Method_RegisterChannel(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_SendMessage(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_GetDataDir(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Init(napi_env__*, napi_value__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_module_register", referenced from:
      _register_rn_bridge() in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_open_handle_scope", referenced from:
      Channel::invokeNodeListener(char*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_throw_error", referenced from:
      Method_RegisterChannel(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Channel::setNapiRefs(napi_env__*&, napi_ref__*&) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_SendMessage(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_GetDataDir(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Init(napi_env__*, napi_value__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_napi_typeof", referenced from:
      Method_RegisterChannel(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Method_SendMessage(napi_env__*, napi_callback_info__*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_node_start", referenced from:
      -[NodeRunner startEngineWithArguments::] in libnodejs-mobile-react-native.a(NodeRunner.o)
  "_uv_async_init", referenced from:
      Channel::setNapiRefs(napi_env__*&, napi_ref__*&) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_uv_async_send", referenced from:
      Channel::flushQueue() in libnodejs-mobile-react-native.a(rn-bridge.o)
      Channel::setNapiRefs(napi_env__*&, napi_ref__*&) in libnodejs-mobile-react-native.a(rn-bridge.o)
      Channel::queueMessage(char*) in libnodejs-mobile-react-native.a(rn-bridge.o)
  "_uv_default_loop", referenced from:
      Channel::setNapiRefs(napi_env__*&, napi_ref__*&) in libnodejs-mobile-react-native.a(rn-bridge.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

simonecorsato avatar Feb 14 '23 14:02 simonecorsato