mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-17 17:40:38 +00:00
Added ARM64 macOS (Apple Silicon) build target support to the CI/CD pipeline by: 1. Including `aarch64-apple-darwin` as a new build variant in the build matrix 2. Adding proper exclusion rules to ensure the target only runs on macOS runners 3. Ensuring compatibility with the existing build scripts and packaging process This change enables native builds for Apple Silicon Macs, improving performance for users with M1/M2/M3/M4 processors while maintaining the same artifact organization and deployment process.
79 lines
1.9 KiB
Python
Executable File
79 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
from dataclasses import dataclass
|
|
import argparse
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
@dataclass
|
|
class CliArgs:
|
|
profile: str
|
|
target: str
|
|
glibc: str
|
|
|
|
@staticmethod
|
|
def parse():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--profile", type=str, required=True)
|
|
parser.add_argument("--target", type=str, required=True)
|
|
parser.add_argument("--glibc", type=str, required=True)
|
|
args = parser.parse_args()
|
|
return CliArgs(args.profile, args.target, args.glibc)
|
|
|
|
|
|
def shell(cmd: str):
|
|
print(cmd, flush=True)
|
|
subprocess.run(cmd, shell=True, check=True)
|
|
|
|
|
|
def main(args: CliArgs):
|
|
use_zigbuild = False
|
|
use_old_glibc = False
|
|
|
|
if args.glibc and args.glibc != "default":
|
|
use_zigbuild = True
|
|
use_old_glibc = True
|
|
|
|
if args.target and args.target != "x86_64-unknown-linux-gnu":
|
|
shell("rustup target add " + args.target)
|
|
|
|
cmd = ["cargo", "build"]
|
|
if use_zigbuild:
|
|
cmd = ["cargo", " zigbuild"]
|
|
|
|
cmd.extend(["--profile", args.profile])
|
|
|
|
if use_old_glibc:
|
|
cmd.extend(["--target", f"{args.target}.{args.glibc}"])
|
|
else:
|
|
cmd.extend(["--target", args.target])
|
|
|
|
cmd.extend(["-p", "rustfs"])
|
|
cmd.extend(["--bins"])
|
|
|
|
shell("touch rustfs/build.rs") # refresh build info for rustfs
|
|
shell(" ".join(cmd))
|
|
|
|
if args.profile == "dev":
|
|
profile_dir = "debug"
|
|
elif args.profile == "release":
|
|
profile_dir = "release"
|
|
else:
|
|
profile_dir = args.profile
|
|
|
|
bin_path = Path(f"target/{args.target}/{profile_dir}/rustfs")
|
|
|
|
bin_name = f"rustfs.{args.profile}.{args.target}"
|
|
if use_old_glibc:
|
|
bin_name += f".glibc{args.glibc}"
|
|
bin_name += ".bin"
|
|
|
|
out_path = Path(f"target/artifacts/{bin_name}")
|
|
|
|
out_path.parent.mkdir(parents=True, exist_ok=True)
|
|
out_path.hardlink_to(bin_path)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main(CliArgs.parse())
|