-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix bug where we would try to use
cross
on ARM hosts for all targets
If the target is ARM and the host is ARM, this should work with just `cargo`. I'm not sure if this works for all ARM host/target combos, or if the CPU architecture must be an exact match. But it doesn't really matter too much, since at least for now there's no ARM builds for `cross` (cross-rs/cross#1612). So even if cross-compilation doesn't work natively, we couldn't use `cross` in this case either. I also rewrote the `set-cross-compile.sh` in Python. By "I", I mean I had Claude do it and then I tweaked it.
- Loading branch information
Showing
4 changed files
with
103 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
#!/usr/bin/env python3 | ||
|
||
# Written mostly by Claude.ai based on my original bash script. | ||
|
||
import sys | ||
import platform | ||
import re | ||
import os | ||
from subprocess import run, PIPE, CalledProcessError | ||
|
||
|
||
def main() -> int: | ||
""" | ||
Main function to determine cross-compilation requirements. | ||
Returns: | ||
Exit code (0 for success) | ||
""" | ||
if len(sys.argv) < 2: | ||
print("Error: Target architecture argument is required", file=sys.stderr) | ||
return 1 | ||
|
||
target = sys.argv[1] | ||
needs_cross = check_needs_cross(target) | ||
write_github_output(needs_cross) | ||
|
||
return 0 | ||
|
||
|
||
def check_needs_cross(target: str) -> bool: | ||
""" | ||
Determine if cross-compilation is needed based on system and target. | ||
Args: | ||
target: Target architecture string | ||
Returns: | ||
Boolean indicating if cross-compilation is needed | ||
""" | ||
system_info = get_uname_info().lower() | ||
|
||
# Check if we're on macOS or Windows | ||
if any(os in system_info for os in ["darwin", "msys", "windows"]): | ||
return False | ||
|
||
target = target.lower() | ||
|
||
# Check for x86_64 Linux targets on x86_64 Linux host | ||
if ( | ||
re.search(r"x86_64.+linux-(?:gnu|musl)", target) | ||
and "x86_64" in system_info | ||
and "linux" in system_info | ||
): | ||
return False | ||
|
||
# Check if both host and target are ARM Linux. I'm assuming here that for things like | ||
# "arm-linux-androideabi" or "armv7-unknown-linux-ohos" we'd still need cross. | ||
if ( | ||
re.search(r"(?:aarch64|arm).+linux-(?:gnu|musl)", target) | ||
and ("arm" in system_info or "aarch64" in system_info) | ||
and "linux" in system_info | ||
): | ||
return False | ||
|
||
return True | ||
|
||
|
||
def get_uname_info() -> str: | ||
""" | ||
Get system information using uname command. | ||
Returns: | ||
String containing system information | ||
""" | ||
try: | ||
result = run(["uname", "-a"], check=True, text=True, stdout=PIPE) | ||
return result.stdout | ||
except (CalledProcessError, FileNotFoundError): | ||
# Fallback to platform.platform() if uname is not available | ||
return platform.platform() | ||
|
||
|
||
def write_github_output(needs_cross: bool) -> None: | ||
""" | ||
Write the needs-cross output to GITHUB_OUTPUT environment variable file. | ||
Args: | ||
needs_cross: Boolean indicating if cross-compilation is needed | ||
""" | ||
github_output = os.getenv("GITHUB_OUTPUT") | ||
if github_output: | ||
with open(github_output, "a") as f: | ||
f.write(f"needs-cross={str(needs_cross).lower()}\n") | ||
|
||
|
||
if __name__ == "__main__": | ||
sys.exit(main()) |
This file was deleted.
Oops, something went wrong.