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

Quick hack to treat macOS-arm64 as macOS-x86_64 #771

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

bvibber
Copy link
Contributor

@bvibber bvibber commented Mar 22, 2021

Proposed temporary workaround for Apple Silicon (M1/ARM/Aarch64) Macs: treat arm64 on macOS as x86_64 instead, fetching the precompiled x64 binaries which work under emulation at some cost of performance.

This gets things working with the x86_64 binaries under emulation on an Apple Silicon Mac. It's not ideal, as the compiler will run slower and use more memory than it would without emulation, but users may use their Macs as web developer workstations.

This is not ideal; python and node should use native arm64 builds or universal binaries if possible. Ideally the binaryen and clang/llvm tools would be built as universal binaries or else separately for both architectures if that's not possible.

This gets things working with the x86_64 binaries under emulation
on an Apple Silicon Mac. It's not ideal, as the compiler will run
slower and use more memory than it would without emulation, but
users may use their Macs as web developer workstations.
@@ -116,6 +116,9 @@ def errlog(msg):
ARCH = 'x86'
elif machine.startswith('aarch64') or machine.lower().startswith('arm64'):
ARCH = 'aarch64'
if MACOS:
# arm64 macOS runs x86_64 binaries and we don't have build bots yet for native
ARCH = 'x86_64'
Copy link
Collaborator

@sbc100 sbc100 Mar 22, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we instead have a command line option to opt into this? --arch=x86_64

Or an environment variable EMSDK_ARCH=x86_64?

With #753 we now support native python and node, although it only works in "build from source" mode. This change as it stand would render that path unavailable, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we should use a command-line option; rather it should "just work". However using the Aarch64 node and python would be much preferable. What would you recommend for fetching the llvm & binaryen binaries for "x64" while fetching node and python from Aarch64?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(You are using binaries of python and node right? Or do I misunderstand and those are from source too?)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's possible to build the macOS binaries as universal binaries with the current SDK, that would be nice too -- then we wouldn't have to do any of this except fetching Aarch64-capable node and python.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does anyone know the exact build scripts used to produce the llvm/clang and binaryen binary artifacts? I would like to modify them to resolve this once and for all. ;)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Note that Node builds as aarch64 on mac, but they're still working on official universal binaries...)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Universal binaries also double the download side right... I'm not sure we need/want that. Why not just build twice and upload two different archives?

@juj
Copy link
Collaborator

juj commented Mar 23, 2021

Instead I would recommend adjusting emsdk_manifest.json so that it advertises the x86_64 versions of prebuilt Emscripten/LLVM/Binaryen binaries as compatible for ARM macOS. That way ARM macOS can continue using native python, while downloading only the x86 precompiled binaries. Once the CDN starts hosting arm64 precompiled binaries, emsdk_manifest.json can then be flipped to serve those instead.

@sbc100
Copy link
Collaborator

sbc100 commented Mar 23, 2021

Instead I would recommend adjusting emsdk_manifest.json so that it advertises the x86_64 versions of prebuilt Emscripten/LLVM/Binaryen binaries as compatible for ARM macOS. That way ARM macOS can continue using native python, while downloading only the x86 precompiled binaries. Once the CDN starts hosting arm64 precompiled binaries, emsdk_manifest.json can then be flipped to serve those instead.

Agreed, this sounds like a good approach.

@sbc100
Copy link
Collaborator

sbc100 commented Mar 23, 2021

Would be nice if circleci or github actions could provide some testing of this too ..

@sbc100
Copy link
Collaborator

sbc100 commented Mar 23, 2021

Would be nice if circleci or github actions could provide some testing of this too ..

Looks like its coming soon:
https://support.circleci.com/hc/en-us/articles/360056461452-Apple-M1-Apple-Silion-Support-on-CircleCI
actions/runner-images#2187

@sbc100
Copy link
Collaborator

sbc100 commented May 10, 2021

I guess we don't need this anymore now that we have #816 in the works?

As a developer I'd still love to have a way to fake the platform in emsdk so that I can, for example, download the install the mac SDK on my linux machine from time to time if I need to check something, but don't have a mac.

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