build: add rust target for macOS cross compiles#63015
build: add rust target for macOS cross compiles#63015richardlau wants to merge 1 commit intonodejs:mainfrom
Conversation
|
Tried a test build, but that failed due to the issue being addressed by #63006. I'll either need that to land and rebase this, or create another branch with that plus this to test. |
|
Trying with another branch with this PR and #63006: |
161a312 to
ff3dccc
Compare
|
Didn't work. |
|
So this suggests we need to add the x64 macOS rust target to the VMs similar to the arm64 Windows targets for the Windows machines in nodejs/build#4285. Further test builds have also errored with and that appears to be because if a target is set it changes the directory that the compiled library is written to, which was accounted for in #61806. However this PR isn't adapting the Windows solution because the way the pkg is currently compiled, under Rosetta the |
When we build the macOS pkg, we build Node.js twice (on arm64): - Once for arm64 (native) - Once for x64, using a combination of Rosetta 2 and compiler flags before combining both into a universal binary. For the x64 case, pass target flag to `rustc` so that the binary is built for the correct target architecture. Signed-off-by: Richard Lau <richard.lau@ibm.com>
| def is_rosetta2(): | ||
| if flavor != 'mac': | ||
| return False | ||
| try: | ||
| proc = subprocess.Popen(['sysctl', '-n', 'sysctl.proc_translated'], | ||
| stdin=subprocess.PIPE, stderr=subprocess.PIPE, | ||
| stdout=subprocess.PIPE) | ||
| except OSError: | ||
| warn('sysctl failed') | ||
| return False | ||
| with proc: | ||
| out = to_utf8(proc.communicate()[0]).strip() | ||
| warn(f'proc_translated: {out}') | ||
| # return out == '1' | ||
| return True |
There was a problem hiding this comment.
Always returning True here is currently a hack for testing.
Unfortunately the actual function doesn't work for the pkg build set up we use as we run the configure step outside of Rosetta 2 so this would always returns False.
When we build the macOS pkg, we build Node.js twice (on arm64):
before combining both into a universal binary.
For the x64 case, pass target flag to
rustcso that the binary is built for the correct target architecture.This is a "blind" attempt to address pkg build failures in the Node.js release CI -- I'm not a macOS user, nor do I have access to a macOS environment outside of the Node.js CI, so opening as a draft to test out.
It's quite possible that even if this is the "correct" fix, we'll need x64 rustc libraries installed on the release macOS VMs (CI run will indicate).