Skip to content

Commit d5446f6

Browse files
committed
Generalize darwin-x86-64 cross-compile
To support darwin-aarch64 in the future, avoid using the ambiguous 'darwin' target and also generalize the rust-android-gradle handling.
1 parent 119a5f4 commit d5446f6

File tree

5 files changed

+42
-22
lines changed

5 files changed

+42
-22
lines changed

libs/build-all.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ fi
1818
if [[ "${#}" -ne 1 ]]
1919
then
2020
echo "Usage:"
21-
echo "./build-all.sh [ios|android|desktop]"
21+
echo "./build-all.sh [ios|android|desktop|darwin-x86-64]"
2222
exit 1
2323
fi
2424

@@ -110,7 +110,7 @@ then
110110
elif [[ "${PLATFORM}" == "desktop" ]]
111111
then
112112
./build-nss-desktop.sh "${NSS_SRC_PATH}"
113-
elif [[ "${PLATFORM}" == "darwin" ]]
113+
elif [[ "${PLATFORM}" == "darwin-x86-64" ]]
114114
then
115115
./build-nss-desktop.sh "${NSS_SRC_PATH}" "${PLATFORM}"
116116
else

libs/build-nss-desktop.sh

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ if [[ -n "${CROSS_COMPILE_TARGET}" ]] && [[ "$(uname -s)" != "Linux" ]]; then
2424
exit 1
2525
fi
2626

27-
if [[ "${CROSS_COMPILE_TARGET}" =~ "darwin" ]]; then
28-
DIST_DIR=$(abspath "desktop/darwin/nss")
27+
if [[ "${CROSS_COMPILE_TARGET}" == "darwin-x86-64" ]]; then
28+
DIST_DIR=$(abspath "desktop/darwin-x86-64/nss")
2929
TARGET_OS="macos"
30+
TARGET_ARCH="x86_64"
3031
elif [[ -n "${CROSS_COMPILE_TARGET}" ]]; then
3132
echo "Cannot build NSS for unrecognized target OS ${CROSS_COMPILE_TARGET}"
3233
exit 1
@@ -56,7 +57,7 @@ fi
5657

5758
# We do not know how to cross compile these, so we pull pre-built versions from NSS CI
5859
# https://github.com/mozilla/application-services/issues/962
59-
if [[ "${CROSS_COMPILE_TARGET}" =~ "darwin" ]]; then
60+
if [[ "${CROSS_COMPILE_TARGET}" == "darwin-x86-64" ]]; then
6061
if [[ "${MOZ_AUTOMATION}" == "1" ]]; then
6162
# run-task has already downloaded + extracted the dependency
6263
NSS_DIST_DIR="${MOZ_FETCHES_DIR}/dist"

taskcluster/kinds/module-build/kind.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ task-defaults:
3232
- [source, taskcluster/scripts/toolchain/setup-fetched-rust-toolchain.sh]
3333
- [source, taskcluster/scripts/toolchain/cross-compile-setup.sh]
3434
- [source, taskcluster/scripts/toolchain/copy-libs-dir.sh, libs]
35-
- [bash, '-c', 'echo "rust.targets=arm,arm64,x86_64,darwin,linux-x86-64\n" > local.properties']
35+
- [bash, '-c', 'echo "rust.targets=arm,arm64,x86_64,darwin-x86-64,linux-x86-64\n" > local.properties']
3636
gradlew:
3737
- ':{module_name}:assembleRelease'
3838
- ':{module_name}:publish'

taskcluster/scripts/toolchain/cross-compile-setup.sh

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,39 @@
22

33
set -eux
44

5-
export PATH=$PATH:/builds/worker/clang/bin
6-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_NSS_STATIC=1
7-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_NSS_DIR=/builds/worker/checkouts/vcs/libs/desktop/darwin/nss
8-
# x86_64 Darwin
9-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_CC=/builds/worker/clang/bin/clang-20
10-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_TOOLCHAIN_PREFIX=/builds/worker/cctools/bin
11-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_AR=/builds/worker/cctools/bin/x86_64-apple-darwin-ar
12-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_RANLIB=/builds/worker/cctools/bin/x86_64-apple-darwin-ranlib
13-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_LD_LIBRARY_PATH=/builds/worker/clang/lib
14-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_RUSTFLAGS="-C linker=/builds/worker/clang/bin/clang-20 -C link-arg=-fuse-ld=/builds/worker/cctools/bin/x86_64-apple-darwin-ld -C link-arg=-B -C link-arg=/builds/worker/cctools/bin -C link-arg=-target -C link-arg=x86_64-apple-darwin -C link-arg=-isysroot -C link-arg=/tmp/MacOSX11.0.sdk -C link-arg=-Wl,-syslibroot,/tmp/MacOSX11.0.sdk -C link-arg=-Wl,-dead_strip"
15-
# For ring's use of `cc`.
16-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_CFLAGS_x86_64_apple_darwin="-B /builds/worker/cctools/bin -target x86_64-apple-darwin -isysroot /tmp/MacOSX11.0.sdk -Wl,-syslibroot,/tmp/MacOSX11.0.sdk -Wl,-dead_strip"
17-
# Pass bindgen a `--sysroot` argument so that it can find the include files when cross-compiling.
18-
export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_BINDGEN_EXTRA_CLANG_ARGS="--sysroot /tmp/MacOSX11.0.sdk"
5+
SYSROOT="/tmp/MacOSX11.0.sdk"
6+
CHECKOUT="/builds/worker/checkouts/vcs"
7+
CLANG_BIN="/builds/worker/clang/bin"
8+
CLANG_LIB="/builds/worker/clang/lib"
9+
CCTOOL_BIN="/builds/worker/cctools/bin"
10+
11+
export PATH=$PATH:$CLANG_BIN
12+
13+
# Setup environment variables for rust-android-gradle plugin.
14+
# shellcheck disable=SC2086
15+
for TARGET in x86_64-apple-darwin aarch64-apple-darwin; do
16+
case "$TARGET" in
17+
x86_64-apple-darwin)
18+
BUILD_PATH="darwin-x86-64"
19+
;;
20+
aarch64-apple-darwin)
21+
BUILD_PATH="darwin-aarch64"
22+
;;
23+
esac
24+
25+
RUST_ANDROID_PREFIX=$(echo "ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_${TARGET}" | tr '[:lower:]-' '[:upper:]_')
26+
27+
export ${RUST_ANDROID_PREFIX}_NSS_STATIC=1
28+
export ${RUST_ANDROID_PREFIX}_NSS_DIR=${CHECKOUT}/libs/desktop/darwin-${BUILD_PATH}/nss
29+
export ${RUST_ANDROID_PREFIX}_CC=${CLANG_BIN}/clang-20
30+
export ${RUST_ANDROID_PREFIX}_TOOLCHAIN_PREFIX=${CCTOOL_BIN}
31+
export ${RUST_ANDROID_PREFIX}_AR=${CCTOOL_BIN}/${TARGET}-ar
32+
export ${RUST_ANDROID_PREFIX}_RANLIB=${CCTOOL_BIN}/${TARGET}-ranlib
33+
export ${RUST_ANDROID_PREFIX}_LD_LIBRARY_PATH=${CLANG_LIB}
34+
export ${RUST_ANDROID_PREFIX}_RUSTFLAGS="-C linker=${CLANG_BIN}/clang-20 -C link-arg=-fuse-ld=${CCTOOL_BIN}/${TARGET}-ld -C link-arg=-B -C link-arg=${CCTOOL_BIN} -C link-arg=-target -C link-arg=${TARGET} -C link-arg=-isysroot -C link-arg=${SYSROOT} -C link-arg=-Wl,-syslibroot,${SYSROOT} -C link-arg=-Wl,-dead_strip"
35+
export ${RUST_ANDROID_PREFIX}_CFLAGS_${TARGET//-/_}="-B ${CCTOOL_BIN} -target ${TARGET} -isysroot ${SYSROOT} -Wl,-syslibroot,${SYSROOT} -Wl,-dead_strip"
36+
export ${RUST_ANDROID_PREFIX}_BINDGEN_EXTRA_CLANG_ARGS="--sysroot ${SYSROOT}"
37+
done
1938

2039
# x86_64 Windows
2140
# The wrong linker gets used otherwise: https://github.com/rust-lang/rust/issues/33465.
@@ -47,7 +66,7 @@ pushd /tmp || exit
4766

4867
tooltool.py \
4968
--url=http://taskcluster/tooltool.mozilla-releng.net/ \
50-
--manifest="/builds/worker/checkouts/vcs/libs/macos-cc-tools.manifest" \
69+
--manifest="${CHECKOUT}/libs/macos-cc-tools.manifest" \
5170
fetch
5271
# tooltool doesn't know how to unpack zstd-files,
5372
# so we do it manually.

taskcluster/scripts/toolchain/desktop-macos.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ git submodule update --init
55
./taskcluster/scripts/toolchain/setup-fetched-rust-toolchain.sh
66
. ./taskcluster/scripts/toolchain/cross-compile-setup.sh
77
pushd libs
8-
./build-all.sh darwin
8+
./build-all.sh darwin-x86-64
99
popd
1010
mkdir -p "$UPLOAD_DIR"
1111
tar -czf "$UPLOAD_DIR"/macos.tar.gz libs/desktop

0 commit comments

Comments
 (0)