Skip to content

Commit

Permalink
Try cross mac
Browse files Browse the repository at this point in the history
  • Loading branch information
glandium committed Feb 6, 2025
1 parent c5e0777 commit 977ccbd
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 55 deletions.
18 changes: 17 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,25 @@ jobs:
mounts: ${{ toJSON(fromJSON(needs.decision.outputs.mounts)[matrix.task]) }}
artifacts: ${{ toJSON(fromJSON(needs.decision.outputs.artifacts)[matrix.task]) }}

macossdk:
if: ${{ fromJSON(needs.decision.outputs.matrix)['macossdk'] && !cancelled() }}
needs: [decision]
strategy:
fail-fast: false
matrix:
include: ${{ fromJSON(needs.decision.outputs.matrix)['macossdk'] }}
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/task
with:
name: ${{ matrix.task }}
mounts: ${{ toJSON(fromJSON(needs.decision.outputs.mounts)[matrix.task]) }}
artifacts: ${{ toJSON(fromJSON(needs.decision.outputs.artifacts)[matrix.task]) }}

build:
if: ${{ fromJSON(needs.decision.outputs.matrix)['build'] && !cancelled() }}
needs: [decision, docker]
needs: [decision, docker, macossdk]
strategy:
fail-fast: false
matrix:
Expand Down
1 change: 1 addition & 0 deletions CI/docker.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ def sources_list(snapshot, sections):
[
"clang-19",
"lld-19",
"llvm-19",
"git",
"make",
"patch",
Expand Down
25 changes: 25 additions & 0 deletions CI/osx.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import hashlib

from tasks import (
Task,
TaskEnvironment,
Tool,
bash_command,
)

Expand Down Expand Up @@ -63,3 +65,26 @@ def prepare_params(self, params):
env.setdefault("PIP_DISABLE_PIP_VERSION_CHECK", "1")
params["command"].insert(0, "export PATH=$PATH:/opt/homebrew/bin")
return super(OsxArm64, self).prepare_params(params)


class MacosSDK(Task, metaclass=Tool):
PREFIX = "macossdk"

def __init__(self, name):
Task.__init__(
self,
description="macossdk 14.2",
task_env=TaskEnvironment.by_name("arm64-osx.build"),
command=[
"cp -RH $SDKROOT MacOSX14.2.sdk",
"gtar --zstd -cf MacOSX14.2.sdk.tar.zst MacOSX14.2.sdk",
],
artifact="MacOSX14.2.sdk.tar.zst",
index="macossdk.14.2",
)

def mount(self):
return {"directory:MacOSX14.2.sdk": self}

def install(self):
return ["export SDKROOT=$(realpath $PWD/MacOSX14.2.sdk)"]
100 changes: 46 additions & 54 deletions CI/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,10 +358,7 @@ def __init__(self, os_and_variant):
env = TaskEnvironment.by_name(
"{}.build".format(os.replace("arm64-linux", "linux"))
)
if os.startswith("mingw"):
build_env = TaskEnvironment.by_name("linux.build")
else:
build_env = env
build_env = TaskEnvironment.by_name("linux.build")

artifact = "git-cinnabar"
if os.startswith("mingw"):
Expand Down Expand Up @@ -440,59 +437,47 @@ def prefix(p, s):
rust_target = "x86_64-unknown-linux-gnu"
elif os == "arm64-linux":
rust_target = "aarch64-unknown-linux-gnu"
if "osx" in os:

for target in dict.fromkeys(
["x86_64-unknown-linux-gnu", rust_target]
).keys():
arch = {
"x86_64": "X64",
"arm64": "ARM64",
}[env.cpu]
clang_install = [
f"curl -sLO https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.7/LLVM-19.1.7-macOS-{arch}.tar.xz",
f"gtar -axf LLVM-19.1.7-macOS-{arch}.tar.xz",
f"PATH=$PWD/LLVM-19.1.7-macOS-{arch}/bin:$PATH",
"x86_64": "amd64",
"aarch64": "arm64",
}[target.partition("-")[0]]
multiarch = target.replace("unknown-", "")
TARGET = target.replace("-", "_").upper()
environ[f"CARGO_TARGET_{TARGET}_LINKER"] = environ["CC"]
link_args = [
f"--target={target}",
"-fuse-ld=lld-19",
]
TARGET = rust_target.replace("-", "_").upper()
environ[f"CARGO_TARGET_{TARGET}_RUSTFLAGS"] = f"-C linker={environ['CC']} -C link-arg=-fuse-ld=lld"
else:
clang_install = []
for target in dict.fromkeys(
["x86_64-unknown-linux-gnu", rust_target]
).keys():
arch = {
"x86_64": "amd64",
"aarch64": "arm64",
}[target.partition("-")[0]]
multiarch = target.replace("unknown-", "")
TARGET = target.replace("-", "_").upper()
environ[f"CARGO_TARGET_{TARGET}_LINKER"] = environ["CC"]
link_args = [
f"--target={target}",
"-fuse-ld=lld-19",
]
if "linux" in os:
link_args.append(f"--sysroot=/sysroot-{arch}")
if os.startswith("mingw"):
link_args.append(f"-L/usr/lib/gcc/{cpu}-w64-mingw32/10-win32")
link_args.append("-Wl,-Xlink,-Brepro")
environ[f"CARGO_TARGET_{TARGET}_RUSTFLAGS"] = " ".join(
f"-C link-arg={arg}" for arg in link_args
)
rustflags = environ.pop("RUSTFLAGS", None)
if rustflags:
environ[f"CARGO_TARGET_{TARGET}_RUSTFLAGS"] += f" {rustflags}"
if "linux" in os:
environ[f"CFLAGS_{target.replace('-', '_')}"] = (
f"--sysroot=/sysroot-{arch}"
)
if "linux" in os:
environ["PKG_CONFIG_PATH"] = ""
environ["PKG_CONFIG_SYSROOT_DIR"] = f"/sysroot-{arch}"
environ["PKG_CONFIG_LIBDIR"] = ":".join(
(
f"/sysroot-{arch}/usr/lib/pkgconfig",
f"/sysroot-{arch}/usr/lib/{multiarch}/pkgconfig",
f"/sysroot-{arch}/usr/share/pkgconfig",
)
link_args.append(f"--sysroot=/sysroot-{arch}")
if os.startswith("mingw"):
link_args.append(f"-L/usr/lib/gcc/{cpu}-w64-mingw32/10-win32")
link_args.append("-Wl,-Xlink,-Brepro")
environ[f"CARGO_TARGET_{TARGET}_RUSTFLAGS"] = " ".join(
f"-C link-arg={arg}" for arg in link_args
)
environ["AR"] = "llvm-ar-19"
rustflags = environ.pop("RUSTFLAGS", None)
if rustflags:
environ[f"CARGO_TARGET_{TARGET}_RUSTFLAGS"] += f" {rustflags}"
if "linux" in os:
environ[f"CFLAGS_{target.replace('-', '_')}"] = (
f"--sysroot=/sysroot-{arch}"
)
if "linux" in os:
environ["PKG_CONFIG_PATH"] = ""
environ["PKG_CONFIG_SYSROOT_DIR"] = f"/sysroot-{arch}"
environ["PKG_CONFIG_LIBDIR"] = ":".join(
(
f"/sysroot-{arch}/usr/lib/pkgconfig",
f"/sysroot-{arch}/usr/lib/{multiarch}/pkgconfig",
f"/sysroot-{arch}/usr/share/pkgconfig",
)
)
if variant == "asan":
environ["RUSTC_BOOTSTRAP"] = "1"
if rust_version:
Expand All @@ -514,6 +499,12 @@ def prefix(p, s):
environ.setdefault("MACOSX_DEPLOYMENT_TARGET", "10.7")
if os.startswith("arm64-osx"):
environ.setdefault("MACOSX_DEPLOYMENT_TARGET", "11.0")
sdk_install = []
kwargs = {}
if "osx" in os:
sdk = Tool.by_name("macossdk.arm64-osx")
sdk_install = sdk.install()
kwargs.setdefault("mounts", []).append(sdk.mount())

cpu = "arm64" if os == "arm64-linux" else env.cpu
Task.__init__(
Expand All @@ -522,8 +513,8 @@ def prefix(p, s):
description="build {} {}{}".format(env.os, cpu, prefix(" ", desc_variant)),
index="build.{}.{}.{}{}".format(hash, env.os, cpu, prefix(".", variant)),
command=Task.checkout(commit=head)
+ sdk_install
+ rust_install
+ clang_install
+ [
"(cd repo ; CI/cargo.sh build {})".format(" ".join(cargo_flags)),
"mv repo/target/{}/{}/{} $ARTIFACTS/".format(
Expand All @@ -534,6 +525,7 @@ def prefix(p, s):
],
artifacts=artifacts,
env=environ,
**kwargs,
)

def mount(self):
Expand Down

0 comments on commit 977ccbd

Please sign in to comment.