Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Download and link node.lib on Windows #583

Merged
merged 11 commits into from
Sep 18, 2020

Conversation

goto-bus-stop
Copy link
Member

@goto-bus-stop goto-bus-stop commented Aug 7, 2020

This enables N-API tests on Windows and sets up the linking stuff that we need for the average Node.js addon.

Todo:

  • should x64 architecture not be hardcoded? 🤔
  • support passing in an env var with the path to a preexisting node.lib file, so you can do this offline
  • avoid redownloading it if we already have it

This also does not yet handle the case where the node.exe executable has been renamed, and will crash if loaded into a notnode.exe. That will be a separate PR.

@goto-bus-stop goto-bus-stop marked this pull request as ready for review August 11, 2020 15:35
@goto-bus-stop
Copy link
Member Author

goto-bus-stop commented Aug 13, 2020

I think this now does all the basics. You can pass in a node.lib path using NEON_NODE_LIB. If it has already downloaded a node.lib file for the target architecture, it uses that. Otherwise, it downloads the node.lib file from nodejs.org. Did I miss anything? 🤔

@goto-bus-stop goto-bus-stop mentioned this pull request Aug 13, 2020
1 task
@dennisameling
Copy link

@goto-bus-stop thanks for this PR! I'm trying to add x86 support to Signal Desktop (signalapp/ringrtc#12) but was running into Rust compiler issues:

Compiling ringrtc v2.7.0 (C:\Users\denni\repos\ringrtc\src\rust)
error: linking with `link.exe` failed: exit code: 1190
  |
  = note: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX64\\x86\\link.exe" "/NOLOGO" "/NXCOMPAT" "/LARGEADDRESSAWARE" "/SAFESEH" "/LIBPATH:C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.0.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.1.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.10.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.11.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.12.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.13.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.14.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.15.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.2.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.3.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.4.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.5.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.6.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.7.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.8.rcgu.o" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.ringrtc.bj9v0qhs-cgu.9.rcgu.o" "/OUT:C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.dll" "/DEF:C:\\Users\\denni\\AppData\\Local\\Temp\\rustcbaKXzd\\lib.def" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.42vg54vuklwc6yc4.rcgu.o" "/OPT:REF,ICF" "/DEBUG" "/NATVIS:C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis" "/LIBPATH:C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps" "/LIBPATH:C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\release\\deps" "/LIBPATH:../../src/webrtc/src/out/Release/obj/" "/LIBPATH:C:\\\\Users\\\\denni\\\\.electron-gyp\\\\8.2.5\\Release" "/LIBPATH:C:\\\\Users\\\\denni\\\\.electron-gyp\\\\8.2.5\\x64" "/LIBPATH:C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\build\\neon-sys-ecc3c94c13e7af65\\out" "/LIBPATH:C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib" "webrtc.lib" "winmm.lib" "dmoguids.lib" "msdmo.lib" "wmcodecdspuuid.lib" "secur32.lib" "libcmt.lib" "node.lib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\liblibc-3037920280936ded.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libneon-ff93f02f036f2749.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libsemver-71c725dc13bc552d.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libsemver_parser-e0b88b84672aad27.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libcslice-6167cefee5fac141.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libneon_runtime-b26b027328c7811e.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libneon_sys-11dbd4e50e156a58.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libtokio-65244b4b3e41cc4d.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libnum_cpus-a78827a6769fdcd2.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libpin_project_lite-39a6a66d9d4e8458.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libregex-fa51976ae565c4d9.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libthread_local-29bd5313140b17ef.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libregex_syntax-94837d648f3d1f58.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libaho_corasick-d58005f70df6508b.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\liblazy_static-5b7e236632215693.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libprost-d41a5ebb39f62f41.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libbytes-c176145bf4f30660.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libsha2-b101c4dd3794041e.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libcpuid_bool-e98d05dd89510904.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libopaque_debug-f274b028a36b0288.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libblock_buffer-21f69d19f322fcba.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\librand-dd136c5efae5cfe3.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\librand_chacha-545b58316d3069bc.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libppv_lite86-883a641084737bfe.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libhkdf-c54f02d41a712a5b.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libhmac-2856d0293cd6a72e.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libcrypto_mac-8779967143c6ed10.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libdigest-c7f9c31f95ef7dcc.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libgeneric_array-50d307d3f3ce5f39.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libx25519_dalek-5f0631f22d8f3a99.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libcurve25519_dalek-25396b3f54c5f1cd.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libsubtle-422e488f1af0a5f7.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libzeroize-267be6f76a54d105.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\librand_core-ff9861a9554daa44.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libgetrandom-28369177e8fa78e7.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libdigest-a48483bcb24ffa08.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libgeneric_array-52bfc0f65c9c81fe.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libtypenum-7a70d878740734ba.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libbyteorder-6690e46b50c0886c.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\liblog-45f0d4d580dcb356.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfutures-d9c24d3b69235d91.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfutures_executor-dfd54bba8eeade22.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfutures_util-44a58af1a862ed23.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libmemchr-6835087281147548.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libproc_macro_nested-35b3489dabdcf52c.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfutures_io-467ba7cf624a6504.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libslab-187cb9cea369b001.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfutures_channel-beed44419f748941.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libpin_project-d29354e361b52b50.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfutures_sink-0082a6c451c83779.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfutures_task-d19119c143061be7.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libonce_cell-17737e2f26886c22.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libpin_utils-78f3873f37e52504.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfutures_core-fcbce616d4557e90.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libfailure-6d758dac6a9ae4ad.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libbacktrace-02fe9b6f73039e01.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\libcfg_if-15671863bb817ed4.rlib" "C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\librustc_demangle-b99a03917fb31f64.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\libstd-a47f472d9630a8a6.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\libpanic_unwind-a958b7862168651e.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\libhashbrown-c9201a571e614560.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\librustc_std_workspace_alloc-f0fd4970ed3ae1cd.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\libbacktrace-e08544f71553ae95.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\librustc_demangle-cd517321cdbb4df1.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\libunwind-96ab20206fe6e1c0.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\libcfg_if-afcbaf7e956397a9.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\liblibc-23ca2a143450469d.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\liballoc-4699be0672767368.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\librustc_std_workspace_core-9bfda15fbb2fb8cf.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\libcore-24d44e6b08b5db76.rlib" "C:\\Users\\denni\\.rustup\\toolchains\\1.44.1-x86_64-pc-windows-msvc\\lib\\rustlib\\i686-pc-windows-msvc\\lib\\libcompiler_builtins-87325d2dc233b5a5.rlib" "advapi32.lib" "advapi32.lib" "ws2_32.lib" "userenv.lib" "msvcrt.lib" "/DLL" "/IMPLIB:C:\\Users\\denni\\repos\\ringrtc\\src\\rust\\target\\i686-pc-windows-msvc\\release\\deps\\ringrtc.dll.lib" "-s" "win_delay_load_hook.obj" "delayimp.lib" "/DELAYLOAD:node.exe"
  = note: LINK : warning LNK4044: unrecognized option '/s'; ignored
          node.lib(node.exe) : fatal error LNK1190: invalid fixup found, type 0x0003


error: aborting due to previous error

error: could not compile `ringrtc`.

To learn more, run the command again with --verbose.

I'm assuming this PR will solve that as you're adding support for x86 as far as I can see 😊

If I can help in any way to get this PR pushed through for a new release, please let me know! Thanks in advance 🚀

@goto-bus-stop
Copy link
Member Author

goto-bus-stop commented Sep 14, 2020

Yes, note that this PR is only for the N-API runtime, behind the napi-runtime feature flag. The NAN-based runtime is unaffected. For electron, #588 may also be required, because as is this PR will only work if the host executable is named "node.exe".

This PR is currently only waiting for another review round by a core team member :)

@kjvalencik kjvalencik merged commit abdff5d into neon-bindings:master Sep 18, 2020
@goto-bus-stop goto-bus-stop deleted the windows-node.lib branch November 20, 2020 09:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants