-
Notifications
You must be signed in to change notification settings - Fork 83
run.sh: force MacOs to run the executable natively when on Apple Silicon #79
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
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -123,7 +123,7 @@ abs_path() { | |
| echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")" | ||
| } | ||
|
|
||
| # Set executable path and the extension to use for the libdoorstop shared object | ||
| # Set executable path and the extension to use for the libdoorstop shared object as well as check whether we're running on Apple Silicon | ||
| os_type="$(uname -s)" | ||
| case ${os_type} in | ||
| Linux*) | ||
|
|
@@ -148,6 +148,14 @@ case ${os_type} in | |
| ;; | ||
| esac | ||
| lib_extension="dylib" | ||
|
|
||
| # CPUs for Apple Silicon are in the format "Apple M.." | ||
| cpu_type="$(sysctl -n machdep.cpu.brand_string)" | ||
| case "${cpu_type}" in | ||
| Apple*) | ||
| is_apple_silicon=1 | ||
| ;; | ||
| esac | ||
| ;; | ||
| *) | ||
| # alright whos running games on freebsd | ||
|
|
@@ -309,4 +317,14 @@ else | |
| export DYLD_INSERT_LIBRARIES="${doorstop_name}:${DYLD_INSERT_LIBRARIES}" | ||
| fi | ||
|
|
||
| exec "$executable_path" "$@" | ||
| if [ -n "${is_apple_silicon}" ]; then | ||
| export ARCHPREFERENCE="arm64,x86_64" | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. From
This tells arch to prefer |
||
|
|
||
| # We need to use arch for Apple Silicon to allow the executable to be run natively as otherwise if | ||
| # the executable is universal, supporting both x86_64 and arm64, MacOs will still run it as x86_64 | ||
| # if the parent process is running as x86. | ||
| # arch also strips the DYLD_INSERT_LIBRARIES env var so we have to pass that in manually | ||
| arch -e DYLD_INSERT_LIBRARIES=$DYLD_INSERT_LIBRARIES "$executable_path" "$@" | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I wasn't able to find concrete docs on Without this the env var is
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good catch, fixed: d4b21af And yeah looks like From |
||
| else | ||
| exec "$executable_path" "$@" | ||
| fi | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My understanding is that on Intel Macs this would be something like
Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz.I don't have an Intel Mac to test this but I've reached out to a mate with one to check the output as a sanity check
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe
uname -mwould work? Is there a world where this matches on Linux?Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The
unameshipped with MacOS is also a universal binary so it falls into the same pitfalls where it'll just run it via Rosetta and return x86_64.Could run it via
archandARCHPREFERENCESlike the main executable but I'm not actually sure if thearchcommand shipped on Intel Macs behaves the same without throwing a fit. Will have someone who has an Intel Mac check this.My understanding is that
machdepis an Apple only namespace, plus this is in the*Darwin*)branch so linux wouldn't reach here.