From b1711c18f78d3acedf8b261743fda240ace8ade1 Mon Sep 17 00:00:00 2001 From: Ted Campbell Date: Mon, 22 Dec 2025 23:26:07 -0500 Subject: [PATCH 1/4] Deduplicate code that assembles NSS object files for A-S build --- libs/build-nss-desktop.sh | 62 +++++++---------------------------- libs/build-nss-ios.sh | 43 ++++++------------------- libs/copy-nss-libs.sh | 68 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 85 deletions(-) create mode 100755 libs/copy-nss-libs.sh diff --git a/libs/build-nss-desktop.sh b/libs/build-nss-desktop.sh index bfdb7849fd..970b47d405 100755 --- a/libs/build-nss-desktop.sh +++ b/libs/build-nss-desktop.sh @@ -15,9 +15,6 @@ NSS_SRC_DIR=${1} # Whether to cross compile from Linux to a different target. Really # only intended for automation. CROSS_COMPILE_TARGET=${2-} -# We only need this in a couple of places so we'll default to "unknown" -# Othertimes, it'll match what CARGO_CFG_TARGET_ARCH is on the rust side -TARGET_ARCH="unknown" if [[ -n "${CROSS_COMPILE_TARGET}" ]] && [[ "$(uname -s)" != "Linux" ]]; then echo "Can only cross compile from 'Linux'; 'uname -s' is $(uname -s)" @@ -27,6 +24,7 @@ fi if [[ "${CROSS_COMPILE_TARGET}" =~ "darwin" ]]; then DIST_DIR=$(abspath "desktop/darwin/nss") TARGET_OS="macos" + TARGET_ARCH="x86_64" elif [[ -n "${CROSS_COMPILE_TARGET}" ]]; then echo "Cannot build NSS for unrecognized target OS ${CROSS_COMPILE_TARGET}" exit 1 @@ -44,6 +42,7 @@ elif [[ "$(uname -s)" == "Linux" ]]; then # This is a JNA weirdness: "x86-64" rather than "x86_64". DIST_DIR=$(abspath "desktop/linux-x86-64/nss") TARGET_OS="linux" + TARGET_ARCH="x86_64" else echo "Cannot build NSS on unrecognized host OS $(uname -s)" exit 1 @@ -81,53 +80,14 @@ elif [[ "$(uname -s)" == "Darwin" ]] || [[ "$(uname -s)" == "Linux" ]]; then NSS_DIST_DIR="${NSS_SRC_DIR}/dist" fi -mkdir -p "${DIST_DIR}/include/nss" -mkdir -p "${DIST_DIR}/lib" -NSS_DIST_OBJ_DIR="${NSS_DIST_DIR}/Release" -# NSPR -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libplc4.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libplds4.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libnspr4.a" "${DIST_DIR}/lib" -# NSS -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libcertdb.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libcerthi.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libcryptohi.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libfreebl_static.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libnss_static.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libmozpkix.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libnssb.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libnssdev.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libnsspki.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libnssutil.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libpk11wrap_static.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libpkcs12.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libpkcs7.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libsmime.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libsoftokn_static.a" "${DIST_DIR}/lib" -cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libssl.a" "${DIST_DIR}/lib" - -# Apple M1 need HW specific libs copied over to successfully build -if [[ "${TARGET_ARCH}" == "aarch64" ]]; then - cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libarmv8_c_lib.a" "${DIST_DIR}/lib" - cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libgcm-aes-aarch64_c_lib.a" "${DIST_DIR}/lib" -else - # HW specific. - # https://searchfox.org/mozilla-central/rev/1eb05019f47069172ba81a6c108a584a409a24ea/security/nss/lib/freebl/freebl.gyp#159-163 - cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libhw-acc-crypto-avx.a" "${DIST_DIR}/lib" - cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libhw-acc-crypto-avx2.a" "${DIST_DIR}/lib" - cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libgcm-aes-x86_c_lib.a" "${DIST_DIR}/lib" - cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libsha-x86_c_lib.a" "${DIST_DIR}/lib" -fi -# https://searchfox.org/mozilla-central/rev/1eb05019f47069172ba81a6c108a584a409a24ea/security/nss/lib/freebl/freebl.gyp#224-233 -if [[ "${TARGET_OS}" == "windows" ]] || [[ "${TARGET_OS}" == "linux" ]]; then - cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libintel-gcm-wrap_c_lib.a" "${DIST_DIR}/lib" - # https://searchfox.org/mozilla-central/rev/1eb05019f47069172ba81a6c108a584a409a24ea/security/nss/lib/freebl/freebl.gyp#43-47 - if [[ "${TARGET_OS}" == "linux" ]]; then - cp -p -L "${NSS_DIST_OBJ_DIR}/lib/libintel-gcm-s_lib.a" "${DIST_DIR}/lib" - fi -fi - -cp -p -L -R "${NSS_DIST_DIR}/public/nss/"* "${DIST_DIR}/include/nss" -cp -p -L -R "${NSS_DIST_OBJ_DIR}/include/nspr/"* "${DIST_DIR}/include/nss" +# Assemble the DIST_DIR with relevant libraries and headers +./copy-nss-libs.sh \ + "${TARGET_OS}" \ + "${TARGET_ARCH}" \ + "${DIST_DIR}" \ + "${NSS_DIST_DIR}/Release/lib" \ + "${NSS_DIST_DIR}/Release/lib" \ + "${NSS_DIST_DIR}/public/nss" \ + "${NSS_DIST_DIR}/Release/include/nspr" rm -rf "${NSS_DIST_DIR}" diff --git a/libs/build-nss-ios.sh b/libs/build-nss-ios.sh index 8f9c367d01..2f4699282b 100755 --- a/libs/build-nss-ios.sh +++ b/libs/build-nss-ios.sh @@ -95,37 +95,12 @@ gyp -f ninja "${NSS_SRC_DIR}/nss/nss.gyp" \ GENERATED_DIR="${NSS_SRC_DIR}/nss/out/Release-$(echo ${OS_COMPILER} | tr '[:upper:]' '[:lower:]')/" ninja -C "${GENERATED_DIR}" -mkdir -p "${DIST_DIR}/include/nss" -mkdir -p "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libcertdb.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libcerthi.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libcryptohi.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libfreebl_static.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libmozpkix.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libnss_static.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libnssb.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libnssdev.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libnsspki.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libnssutil.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libpk11wrap_static.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libpkcs12.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libpkcs7.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libsmime.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libsoftokn_static.a" "${DIST_DIR}/lib" -cp -p -L "${BUILD_DIR}/lib/libssl.a" "${DIST_DIR}/lib" -# HW specific. -if [[ "${ARCH}" == "x86_64" ]]; then - cp -p -L "${BUILD_DIR}/lib/libgcm-aes-x86_c_lib.a" "${DIST_DIR}/lib" - cp -p -L "${BUILD_DIR}/lib/libhw-acc-crypto-avx.a" "${DIST_DIR}/lib" - cp -p -L "${BUILD_DIR}/lib/libhw-acc-crypto-avx2.a" "${DIST_DIR}/lib" - cp -p -L "${BUILD_DIR}/lib/libsha-x86_c_lib.a" "${DIST_DIR}/lib" -elif [[ "${ARCH}" == "arm64" ]]; then - cp -p -L "${BUILD_DIR}/lib/libgcm-aes-aarch64_c_lib.a" "${DIST_DIR}/lib" - cp -p -L "${BUILD_DIR}/lib/libarmv8_c_lib.a" "${DIST_DIR}/lib" -fi -cp -p -L "${NSPR_BUILD_DIR}/dist/lib/libplc4.a" "${DIST_DIR}/lib" -cp -p -L "${NSPR_BUILD_DIR}/dist/lib/libplds4.a" "${DIST_DIR}/lib" -cp -p -L "${NSPR_BUILD_DIR}/dist/lib/libnspr4.a" "${DIST_DIR}/lib" - -cp -p -L -R "${BUILD_DIR}/public/nss/"* "${DIST_DIR}/include/nss" -cp -p -L -R "${NSPR_BUILD_DIR}/dist/include/nspr/"* "${DIST_DIR}/include/nss" +# Assemble the DIST_DIR with relevant libraries and headers +./copy-nss-libs.sh \ + "ios" \ + "${ARCH}" \ + "${DIST_DIR}" \ + "${BUILD_DIR}/lib" \ + "${NSPR_BUILD_DIR}/dist/lib" \ + "${BUILD_DIR}/public/nss" \ + "${NSPR_BUILD_DIR}/dist/include/nspr" diff --git a/libs/copy-nss-libs.sh b/libs/copy-nss-libs.sh new file mode 100755 index 0000000000..ad3b6f8fb9 --- /dev/null +++ b/libs/copy-nss-libs.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +# Common script to copy NSS and NSPR libraries to a distribution directory +# Usage: copy-nss-libs.sh + +set -euvx + +if [[ "${#}" -ne 7 ]] +then + echo "Usage:" + echo "./copy-nss-libs.sh " + exit 1 +fi + +TARGET_OS=${1} +ARCH=${2} +DIST_DIR=${3} +NSS_LIB_DIR=${4} +NSPR_LIB_DIR=${5} +NSS_INCLUDE_DIR=${6} +NSPR_INCLUDE_DIR=${7} + +mkdir -p "${DIST_DIR}/include/nss" +mkdir -p "${DIST_DIR}/lib" + +# NSPR libraries +cp -p -L "${NSPR_LIB_DIR}/libplc4.a" "${DIST_DIR}/lib" +cp -p -L "${NSPR_LIB_DIR}/libplds4.a" "${DIST_DIR}/lib" +cp -p -L "${NSPR_LIB_DIR}/libnspr4.a" "${DIST_DIR}/lib" + +# NSS libraries +cp -p -L "${NSS_LIB_DIR}/libcertdb.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libcerthi.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libcryptohi.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libfreebl_static.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libnss_static.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libmozpkix.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libnssb.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libnssdev.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libnsspki.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libnssutil.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libpk11wrap_static.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libpkcs12.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libpkcs7.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libsmime.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libsoftokn_static.a" "${DIST_DIR}/lib" +cp -p -L "${NSS_LIB_DIR}/libssl.a" "${DIST_DIR}/lib" + +# Architecture or Platform specific libraries +# https://searchfox.org/firefox-main/rev/7d8644b9d4470a675bf670c2dc7664cc01f14ece/security/nss/lib/freebl/freebl.gyp +if [[ "${ARCH}" == "x86_64" ]]; then + cp -p -L "${NSS_LIB_DIR}/libhw-acc-crypto-avx.a" "${DIST_DIR}/lib" + cp -p -L "${NSS_LIB_DIR}/libhw-acc-crypto-avx2.a" "${DIST_DIR}/lib" + cp -p -L "${NSS_LIB_DIR}/libgcm-aes-x86_c_lib.a" "${DIST_DIR}/lib" + cp -p -L "${NSS_LIB_DIR}/libsha-x86_c_lib.a" "${DIST_DIR}/lib" +fi +if [[ "${ARCH}" == "aarch64" ]] || [[ "${ARCH}" == "arm64" ]]; then + cp -p -L "${NSS_LIB_DIR}/libarmv8_c_lib.a" "${DIST_DIR}/lib" + cp -p -L "${NSS_LIB_DIR}/libgcm-aes-aarch64_c_lib.a" "${DIST_DIR}/lib" +fi +if [[ "${TARGET_OS}" == "linux" ]]; then + cp -p -L "${NSS_LIB_DIR}/libintel-gcm-wrap_c_lib.a" "${DIST_DIR}/lib" + cp -p -L "${NSS_LIB_DIR}/libintel-gcm-s_lib.a" "${DIST_DIR}/lib" +fi + +# Copy headers +cp -p -L -R "${NSS_INCLUDE_DIR}/"* "${DIST_DIR}/include/nss" +cp -p -L -R "${NSPR_INCLUDE_DIR}/"* "${DIST_DIR}/include/nss" From 9d874b1dccb059fa987188f7837bbbc6daaef735 Mon Sep 17 00:00:00 2001 From: Ted Campbell Date: Tue, 23 Dec 2025 00:23:37 -0500 Subject: [PATCH 2/4] 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. --- libs/build-all.sh | 4 +- libs/build-nss-desktop.sh | 6 +-- taskcluster/kinds/module-build/kind.yml | 2 +- .../scripts/toolchain/cross-compile-setup.sh | 49 +++++++++++++------ .../scripts/toolchain/desktop-macos.sh | 2 +- 5 files changed, 41 insertions(+), 22 deletions(-) diff --git a/libs/build-all.sh b/libs/build-all.sh index 14a1f37238..64f3eb7cbf 100755 --- a/libs/build-all.sh +++ b/libs/build-all.sh @@ -18,7 +18,7 @@ fi if [[ "${#}" -ne 1 ]] then echo "Usage:" - echo "./build-all.sh [ios|android|desktop]" + echo "./build-all.sh [ios|android|desktop|darwin-x86-64]" exit 1 fi @@ -110,7 +110,7 @@ then elif [[ "${PLATFORM}" == "desktop" ]] then ./build-nss-desktop.sh "${NSS_SRC_PATH}" -elif [[ "${PLATFORM}" == "darwin" ]] +elif [[ "${PLATFORM}" == "darwin-x86-64" ]] then ./build-nss-desktop.sh "${NSS_SRC_PATH}" "${PLATFORM}" else diff --git a/libs/build-nss-desktop.sh b/libs/build-nss-desktop.sh index 970b47d405..63ca9f6431 100755 --- a/libs/build-nss-desktop.sh +++ b/libs/build-nss-desktop.sh @@ -21,8 +21,8 @@ if [[ -n "${CROSS_COMPILE_TARGET}" ]] && [[ "$(uname -s)" != "Linux" ]]; then exit 1 fi -if [[ "${CROSS_COMPILE_TARGET}" =~ "darwin" ]]; then - DIST_DIR=$(abspath "desktop/darwin/nss") +if [[ "${CROSS_COMPILE_TARGET}" == "darwin-x86-64" ]]; then + DIST_DIR=$(abspath "desktop/darwin-x86-64/nss") TARGET_OS="macos" TARGET_ARCH="x86_64" elif [[ -n "${CROSS_COMPILE_TARGET}" ]]; then @@ -55,7 +55,7 @@ fi # We do not know how to cross compile these, so we pull pre-built versions from NSS CI # https://github.com/mozilla/application-services/issues/962 -if [[ "${CROSS_COMPILE_TARGET}" =~ "darwin" ]]; then +if [[ "${CROSS_COMPILE_TARGET}" == "darwin-x86-64" ]]; then if [[ "${MOZ_AUTOMATION}" == "1" ]]; then # run-task has already downloaded + extracted the dependency NSS_DIST_DIR="${MOZ_FETCHES_DIR}/dist" diff --git a/taskcluster/kinds/module-build/kind.yml b/taskcluster/kinds/module-build/kind.yml index 59388b40ae..a684e79c1c 100644 --- a/taskcluster/kinds/module-build/kind.yml +++ b/taskcluster/kinds/module-build/kind.yml @@ -32,7 +32,7 @@ task-defaults: - [source, taskcluster/scripts/toolchain/setup-fetched-rust-toolchain.sh] - [source, taskcluster/scripts/toolchain/cross-compile-setup.sh] - [source, taskcluster/scripts/toolchain/copy-libs-dir.sh, libs] - - [bash, '-c', 'echo "rust.targets=arm,arm64,x86_64,darwin,linux-x86-64\n" > local.properties'] + - [bash, '-c', 'echo "rust.targets=arm,arm64,x86_64,darwin-x86-64,linux-x86-64\n" > local.properties'] gradlew: - ':{module_name}:assembleRelease' - ':{module_name}:publish' diff --git a/taskcluster/scripts/toolchain/cross-compile-setup.sh b/taskcluster/scripts/toolchain/cross-compile-setup.sh index e8d1b651d8..8154a07769 100755 --- a/taskcluster/scripts/toolchain/cross-compile-setup.sh +++ b/taskcluster/scripts/toolchain/cross-compile-setup.sh @@ -2,20 +2,39 @@ set -eux -export PATH=$PATH:/builds/worker/clang/bin -export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_NSS_STATIC=1 -export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_NSS_DIR=/builds/worker/checkouts/vcs/libs/desktop/darwin/nss -# x86_64 Darwin -export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_CC=/builds/worker/clang/bin/clang-20 -export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_TOOLCHAIN_PREFIX=/builds/worker/cctools/bin -export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_AR=/builds/worker/cctools/bin/x86_64-apple-darwin-ar -export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_RANLIB=/builds/worker/cctools/bin/x86_64-apple-darwin-ranlib -export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_LD_LIBRARY_PATH=/builds/worker/clang/lib -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" -# For ring's use of `cc`. -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" -# Pass bindgen a `--sysroot` argument so that it can find the include files when cross-compiling. -export ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_X86_64_APPLE_DARWIN_BINDGEN_EXTRA_CLANG_ARGS="--sysroot /tmp/MacOSX11.0.sdk" +SYSROOT="/tmp/MacOSX11.0.sdk" +CHECKOUT="/builds/worker/checkouts/vcs" +CLANG_BIN="/builds/worker/clang/bin" +CLANG_LIB="/builds/worker/clang/lib" +CCTOOL_BIN="/builds/worker/cctools/bin" + +export PATH=$PATH:$CLANG_BIN + +# Setup environment variables for rust-android-gradle plugin. +# shellcheck disable=SC2086 +for TARGET in x86_64-apple-darwin aarch64-apple-darwin; do + case "$TARGET" in + x86_64-apple-darwin) + BUILD_PATH="darwin-x86-64" + ;; + aarch64-apple-darwin) + BUILD_PATH="darwin-aarch64" + ;; + esac + + RUST_ANDROID_PREFIX=$(echo "ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_${TARGET}" | tr '[:lower:]-' '[:upper:]_') + + export ${RUST_ANDROID_PREFIX}_NSS_STATIC=1 + export ${RUST_ANDROID_PREFIX}_NSS_DIR=${CHECKOUT}/libs/desktop/darwin-${BUILD_PATH}/nss + export ${RUST_ANDROID_PREFIX}_CC=${CLANG_BIN}/clang-20 + export ${RUST_ANDROID_PREFIX}_TOOLCHAIN_PREFIX=${CCTOOL_BIN} + export ${RUST_ANDROID_PREFIX}_AR=${CCTOOL_BIN}/${TARGET}-ar + export ${RUST_ANDROID_PREFIX}_RANLIB=${CCTOOL_BIN}/${TARGET}-ranlib + export ${RUST_ANDROID_PREFIX}_LD_LIBRARY_PATH=${CLANG_LIB} + 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" + export ${RUST_ANDROID_PREFIX}_CFLAGS_${TARGET//-/_}="-B ${CCTOOL_BIN} -target ${TARGET} -isysroot ${SYSROOT} -Wl,-syslibroot,${SYSROOT} -Wl,-dead_strip" + export ${RUST_ANDROID_PREFIX}_BINDGEN_EXTRA_CLANG_ARGS="--sysroot ${SYSROOT}" +done # x86_64 Windows # The wrong linker gets used otherwise: https://github.com/rust-lang/rust/issues/33465. @@ -47,7 +66,7 @@ pushd /tmp || exit tooltool.py \ --url=http://taskcluster/tooltool.mozilla-releng.net/ \ - --manifest="/builds/worker/checkouts/vcs/libs/macos-cc-tools.manifest" \ + --manifest="${CHECKOUT}/libs/macos-cc-tools.manifest" \ fetch # tooltool doesn't know how to unpack zstd-files, # so we do it manually. diff --git a/taskcluster/scripts/toolchain/desktop-macos.sh b/taskcluster/scripts/toolchain/desktop-macos.sh index ec8bba066b..271d13e367 100755 --- a/taskcluster/scripts/toolchain/desktop-macos.sh +++ b/taskcluster/scripts/toolchain/desktop-macos.sh @@ -5,7 +5,7 @@ git submodule update --init ./taskcluster/scripts/toolchain/setup-fetched-rust-toolchain.sh . ./taskcluster/scripts/toolchain/cross-compile-setup.sh pushd libs -./build-all.sh darwin +./build-all.sh darwin-x86-64 popd mkdir -p "$UPLOAD_DIR" tar -czf "$UPLOAD_DIR"/macos.tar.gz libs/desktop From ab47e791da3a9be553dcef0d4f916b3448d78715 Mon Sep 17 00:00:00 2001 From: Ted Campbell Date: Mon, 22 Dec 2025 20:56:54 -0500 Subject: [PATCH 3/4] Support cross-compiling to aarch64-darwin from linux in CI Build the android unit-test megazords with support for darwin-aarch64 to make it easier to run tests locally that use Nimbus, etc. Since our NSS CI doesn't have darwin-aarch64 artifacts, this patch builds NSPR/NSS directly similar to how libs/build-nss-ios.sh does. --- libs/build-all.sh | 5 +- libs/build-nss-macos-cross.sh | 114 ++++++++++++++++++ megazords/full/android/build.gradle | 2 +- taskcluster/kinds/module-build/kind.yml | 2 +- .../scripts/toolchain/build-rust-toolchain.sh | 1 + .../scripts/toolchain/cross-compile-setup.sh | 3 +- .../scripts/toolchain/desktop-macos.sh | 1 + 7 files changed, 124 insertions(+), 4 deletions(-) create mode 100755 libs/build-nss-macos-cross.sh diff --git a/libs/build-all.sh b/libs/build-all.sh index 64f3eb7cbf..7f972bfea6 100755 --- a/libs/build-all.sh +++ b/libs/build-all.sh @@ -18,7 +18,7 @@ fi if [[ "${#}" -ne 1 ]] then echo "Usage:" - echo "./build-all.sh [ios|android|desktop|darwin-x86-64]" + echo "./build-all.sh [ios|android|desktop|darwin-x86-64|darwin-aarch64]" exit 1 fi @@ -113,6 +113,9 @@ then elif [[ "${PLATFORM}" == "darwin-x86-64" ]] then ./build-nss-desktop.sh "${NSS_SRC_PATH}" "${PLATFORM}" +elif [[ "${PLATFORM}" == "darwin-aarch64" ]] +then + ./build-nss-macos-cross.sh "${NSS_SRC_PATH}" "${PLATFORM}" else echo "Unrecognized platform" exit 1 diff --git a/libs/build-nss-macos-cross.sh b/libs/build-nss-macos-cross.sh new file mode 100755 index 0000000000..9e5f46b0c7 --- /dev/null +++ b/libs/build-nss-macos-cross.sh @@ -0,0 +1,114 @@ +#!/usr/bin/env bash + +# This script cross-compiles NSS and NSPR for macOS from Linux. +# It is specifically designed for darwin cross-compilation in CI. + +set -euvx + +if [[ "${#}" -lt 1 ]] || [[ "${#}" -gt 2 ]] +then + echo "Usage:" + echo "./build-nss-macos-cross.sh [CROSS_COMPILE_TARGET]" + exit 1 +fi + +NSS_SRC_DIR=${1} +CROSS_COMPILE_TARGET=${2:-darwin-aarch64} + +# Set architecture-specific variables based on target +if [[ "${CROSS_COMPILE_TARGET}" == "darwin-aarch64" ]]; then + DIST_DIR=$(abspath "desktop/darwin-aarch64/nss") + NSS_TARGET="aarch64-apple-darwin" + GYP_ARCH="arm64" +elif [[ "${CROSS_COMPILE_TARGET}" == "darwin-x86-64" ]]; then + DIST_DIR=$(abspath "desktop/darwin-x86-64/nss") + NSS_TARGET="x86_64-apple-darwin" + GYP_ARCH="x64" +else + echo "Unsupported cross-compile target: ${CROSS_COMPILE_TARGET}" + exit 1 +fi + +if [[ -d "${DIST_DIR}" ]]; then + echo "${DIST_DIR} folder already exists. Skipping build." + exit 0 +fi + +# Read toolchain configuration from ORG_GRADLE_PROJECT environment variables +# These are set by cross-compile-setup.sh in CI +RUST_ANDROID_PREFIX=$(echo "ORG_GRADLE_PROJECT_RUST_ANDROID_GRADLE_TARGET_${NSS_TARGET}" | tr '[:lower:]-' '[:upper:]_') + +# Check that NSS_DIR is set to detect CI environment +nss_dir_var="${RUST_ANDROID_PREFIX}_NSS_DIR" +if [[ -z "${!nss_dir_var}" ]]; then + echo "Error: ${nss_dir_var} is not set" + echo "This script must be run in a CI environment with cross-compile-setup.sh sourced" + exit 1 +fi + +# Use toolchain configuration from environment +eval "CC=\$${RUST_ANDROID_PREFIX}_CC" +eval "AR=\$${RUST_ANDROID_PREFIX}_AR" +eval "RANLIB=\$${RUST_ANDROID_PREFIX}_RANLIB" +eval "STRIP=\$${RUST_ANDROID_PREFIX}_TOOLCHAIN_PREFIX/${NSS_TARGET}-strip" +eval "CFLAGS=\$${RUST_ANDROID_PREFIX}_CFLAGS_${NSS_TARGET//-/_}" +eval "LDFLAGS=\$${RUST_ANDROID_PREFIX}_LDFLAGS_${NSS_TARGET//-/_}" + +# Build NSPR +NSPR_BUILD_DIR=$(mktemp -d) +pushd "${NSPR_BUILD_DIR}" +"${NSS_SRC_DIR}"/nspr/configure \ + STRIP="${STRIP}" \ + RANLIB="${RANLIB}" \ + AR="${AR}" \ + AS="${AS:-${AR}}" \ + LD="${LD:-${AR}}" \ + CC="${CC}" \ + CCC="${CC}" \ + CFLAGS="${CFLAGS}" \ + LDFLAGS="${LDFLAGS}" \ + --target="${NSS_TARGET}" \ + --enable-64bit \ + --disable-debug \ + --enable-optimize +make +popd + +# Build NSS using gyp +NSS_BUILD_DIR=$(mktemp -d) +rm -rf "${NSS_SRC_DIR}/nss/out" + +gyp -f ninja "${NSS_SRC_DIR}/nss/nss.gyp" \ + --depth "${NSS_SRC_DIR}/nss/" \ + --generator-output=. \ + -DOS=mac \ + -Dnspr_lib_dir="${NSPR_BUILD_DIR}/dist/lib" \ + -Dnspr_include_dir="${NSPR_BUILD_DIR}/dist/include/nspr" \ + -Dnss_dist_dir="${NSS_BUILD_DIR}" \ + -Dnss_dist_obj_dir="${NSS_BUILD_DIR}" \ + -Dhost_arch="${GYP_ARCH}" \ + -Dtarget_arch="${GYP_ARCH}" \ + -Dstatic_libs=1 \ + -Ddisable_dbm=1 \ + -Dsign_libs=0 \ + -Denable_sslkeylogfile=0 \ + -Ddisable_tests=1 \ + -Ddisable_libpkix=1 \ + -Dpython=python3 + +GENERATED_DIR="${NSS_SRC_DIR}/nss/out/Release/" +ninja -C "${GENERATED_DIR}" + +# Assemble the DIST_DIR with relevant libraries and headers +./copy-nss-libs.sh \ + "mac" \ + "${GYP_ARCH}" \ + "${DIST_DIR}" \ + "${NSS_BUILD_DIR}/lib" \ + "${NSPR_BUILD_DIR}/dist/lib" \ + "${NSS_BUILD_DIR}/public/nss" \ + "${NSPR_BUILD_DIR}/dist/include/nspr" + +# Cleanup +rm -rf "${NSS_BUILD_DIR}" +rm -rf "${NSPR_BUILD_DIR}" diff --git a/megazords/full/android/build.gradle b/megazords/full/android/build.gradle index 625ecff4ac..f2c5d9f063 100644 --- a/megazords/full/android/build.gradle +++ b/megazords/full/android/build.gradle @@ -47,7 +47,7 @@ configurations { // For libmegazord, we copy the desktop libs from the // [rust-android-gradle plugin](https://github.com/mozilla/rust-android-gradle), which is // configurable via `local.properties`. The official packages are built in taskcluster include - // `linux-x86-64` and `darwin-x86-64` and the list is controlled by + // `linux-x86-64`, `darwin-x86-64`, and `darwin-aarch64` and the list is controlled by // taskcluster/kinds/module-build/kind.yml // // For libjnidispatch, we include all libraries included in the official JAR file. diff --git a/taskcluster/kinds/module-build/kind.yml b/taskcluster/kinds/module-build/kind.yml index a684e79c1c..85b4acf55a 100644 --- a/taskcluster/kinds/module-build/kind.yml +++ b/taskcluster/kinds/module-build/kind.yml @@ -32,7 +32,7 @@ task-defaults: - [source, taskcluster/scripts/toolchain/setup-fetched-rust-toolchain.sh] - [source, taskcluster/scripts/toolchain/cross-compile-setup.sh] - [source, taskcluster/scripts/toolchain/copy-libs-dir.sh, libs] - - [bash, '-c', 'echo "rust.targets=arm,arm64,x86_64,darwin-x86-64,linux-x86-64\n" > local.properties'] + - [bash, '-c', 'echo "rust.targets=arm,arm64,x86_64,darwin-x86-64,darwin-aarch64,linux-x86-64\n" > local.properties'] gradlew: - ':{module_name}:assembleRelease' - ':{module_name}:publish' diff --git a/taskcluster/scripts/toolchain/build-rust-toolchain.sh b/taskcluster/scripts/toolchain/build-rust-toolchain.sh index 3635332c3f..286ab417de 100755 --- a/taskcluster/scripts/toolchain/build-rust-toolchain.sh +++ b/taskcluster/scripts/toolchain/build-rust-toolchain.sh @@ -28,6 +28,7 @@ cd "$VCS_PATH" rustup --version # cross-compilation targets rustup target add x86_64-apple-darwin +rustup target add aarch64-apple-darwin rustup target add x86_64-pc-windows-gnu rustup target add x86_64-unknown-linux-musl rustup target add aarch64-unknown-linux-gnu diff --git a/taskcluster/scripts/toolchain/cross-compile-setup.sh b/taskcluster/scripts/toolchain/cross-compile-setup.sh index 8154a07769..c8dbf38db6 100755 --- a/taskcluster/scripts/toolchain/cross-compile-setup.sh +++ b/taskcluster/scripts/toolchain/cross-compile-setup.sh @@ -32,7 +32,8 @@ for TARGET in x86_64-apple-darwin aarch64-apple-darwin; do export ${RUST_ANDROID_PREFIX}_RANLIB=${CCTOOL_BIN}/${TARGET}-ranlib export ${RUST_ANDROID_PREFIX}_LD_LIBRARY_PATH=${CLANG_LIB} 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" - export ${RUST_ANDROID_PREFIX}_CFLAGS_${TARGET//-/_}="-B ${CCTOOL_BIN} -target ${TARGET} -isysroot ${SYSROOT} -Wl,-syslibroot,${SYSROOT} -Wl,-dead_strip" + export ${RUST_ANDROID_PREFIX}_CFLAGS_${TARGET//-/_}="-B ${CCTOOL_BIN} -target ${TARGET} -isysroot ${SYSROOT}" + export ${RUST_ANDROID_PREFIX}_LDFLAGS_${TARGET//-/_}="-B ${CCTOOL_BIN} -target ${TARGET} -isysroot ${SYSROOT} -Wl,-syslibroot,${SYSROOT} -Wl,-dead_strip" export ${RUST_ANDROID_PREFIX}_BINDGEN_EXTRA_CLANG_ARGS="--sysroot ${SYSROOT}" done diff --git a/taskcluster/scripts/toolchain/desktop-macos.sh b/taskcluster/scripts/toolchain/desktop-macos.sh index 271d13e367..8511a094c2 100755 --- a/taskcluster/scripts/toolchain/desktop-macos.sh +++ b/taskcluster/scripts/toolchain/desktop-macos.sh @@ -6,6 +6,7 @@ git submodule update --init . ./taskcluster/scripts/toolchain/cross-compile-setup.sh pushd libs ./build-all.sh darwin-x86-64 +./build-all.sh darwin-aarch64 popd mkdir -p "$UPLOAD_DIR" tar -czf "$UPLOAD_DIR"/macos.tar.gz libs/desktop From 150a3d943154e40ee77936db1e1b13a0515dce59 Mon Sep 17 00:00:00 2001 From: Ted Campbell Date: Tue, 23 Dec 2025 02:44:06 -0500 Subject: [PATCH 4/4] debugging ci --- libs/build-nss-desktop.sh | 6 ++ libs/build-nss-ios.sh | 2 + libs/build-nss-macos-cross.sh | 92 +++++++++++++++++-- .../scripts/toolchain/cross-compile-setup.sh | 5 +- .../scripts/toolchain/desktop-macos.sh | 2 +- 5 files changed, 97 insertions(+), 10 deletions(-) diff --git a/libs/build-nss-desktop.sh b/libs/build-nss-desktop.sh index 63ca9f6431..7b725fcdd4 100755 --- a/libs/build-nss-desktop.sh +++ b/libs/build-nss-desktop.sh @@ -78,6 +78,12 @@ elif [[ "$(uname -s)" == "Darwin" ]] || [[ "$(uname -s)" == "Linux" ]]; then -Dsign_libs=0 \ -Ddisable_libpkix=1 NSS_DIST_DIR="${NSS_SRC_DIR}/dist" + + # Debug output for CI + if [[ -f "${NSS_SRC_DIR}/nss/out/Release/build.ninja" ]]; then + echo "=== Dumping build.ninja for nss-desktop ===" + cat "${NSS_SRC_DIR}/nss/out/Release/build.ninja" + fi fi # Assemble the DIST_DIR with relevant libraries and headers diff --git a/libs/build-nss-ios.sh b/libs/build-nss-ios.sh index 2f4699282b..eb612da9ce 100755 --- a/libs/build-nss-ios.sh +++ b/libs/build-nss-ios.sh @@ -93,6 +93,8 @@ gyp -f ninja "${NSS_SRC_DIR}/nss/nss.gyp" \ -Dpython=python3 GENERATED_DIR="${NSS_SRC_DIR}/nss/out/Release-$(echo ${OS_COMPILER} | tr '[:upper:]' '[:lower:]')/" +echo "=== Dumping build.ninja for nss-ios ===" +cat "${GENERATED_DIR}/build.ninja" ninja -C "${GENERATED_DIR}" # Assemble the DIST_DIR with relevant libraries and headers diff --git a/libs/build-nss-macos-cross.sh b/libs/build-nss-macos-cross.sh index 9e5f46b0c7..8bafa99001 100755 --- a/libs/build-nss-macos-cross.sh +++ b/libs/build-nss-macos-cross.sh @@ -47,12 +47,86 @@ if [[ -z "${!nss_dir_var}" ]]; then fi # Use toolchain configuration from environment -eval "CC=\$${RUST_ANDROID_PREFIX}_CC" +eval "BASE_CC=\$${RUST_ANDROID_PREFIX}_CC" eval "AR=\$${RUST_ANDROID_PREFIX}_AR" +eval "AS=\$${RUST_ANDROID_PREFIX}_AS" eval "RANLIB=\$${RUST_ANDROID_PREFIX}_RANLIB" +eval "LD=\$${RUST_ANDROID_PREFIX}_LD" eval "STRIP=\$${RUST_ANDROID_PREFIX}_TOOLCHAIN_PREFIX/${NSS_TARGET}-strip" +eval "TOOLCHAIN_BIN=\$${RUST_ANDROID_PREFIX}_TOOLCHAIN_PREFIX" eval "CFLAGS=\$${RUST_ANDROID_PREFIX}_CFLAGS_${NSS_TARGET//-/_}" -eval "LDFLAGS=\$${RUST_ANDROID_PREFIX}_LDFLAGS_${NSS_TARGET//-/_}" + +# Create a wrapper directory for fake tools and compiler wrappers +WRAPPER_DIR=$(mktemp -d) + +# Create compiler wrapper scripts that filter out incompatible Apple-specific flags +# and add C++ standard library include paths for cross-compilation +cat > "${WRAPPER_DIR}/cc-wrapper" << 'EOF' +#!/usr/bin/env bash +# Filter out -fasm-blocks and -mpascal-strings which clang-20 doesn't support for cross-compilation +args=() +for arg in "$@"; do + if [[ "$arg" != "-fasm-blocks" && "$arg" != "-mpascal-strings" ]]; then + args+=("$arg") + fi +done +# Add clang's C++ standard library include path +args+=("-I/builds/worker/clang/include/c++/v1") +# REAL_CC may contain spaces (e.g., "clang-20 -target ..."), so we need to use eval +eval exec "${REAL_CC}" '"${args[@]}"' +EOF +chmod +x "${WRAPPER_DIR}/cc-wrapper" + +# Set CC and CXX to use the wrapper with all flags baked in +export REAL_CC="${BASE_CC} ${CFLAGS}" +CC="${WRAPPER_DIR}/cc-wrapper" +CXX="${WRAPPER_DIR}/cc-wrapper" +export CC CXX + +# Create a fake xcodebuild script and tool wrappers to allow gyp to use the mac flavor +# This tricks gyp into thinking Xcode is installed so it generates macOS-style build rules +cat > "${WRAPPER_DIR}/xcodebuild" << 'EOF' +#!/usr/bin/env bash +# Fake xcodebuild that returns a version for gyp's mac flavor +# Xcode 12.2 corresponds to macOS SDK 11.0 (Big Sur) and adds Apple Silicon support +echo "Xcode 12.2" +echo "Build version 12B45b" +EOF +chmod +x "${WRAPPER_DIR}/xcodebuild" + +# Create unprefixed symlinks to cctools binaries that gyp's mac flavor expects +# The mac flavor expects tools like 'otool', 'libtool', 'lipo' without the target prefix +ln -s "${TOOLCHAIN_BIN}/${NSS_TARGET}-otool" "${WRAPPER_DIR}/otool" +ln -s "${TOOLCHAIN_BIN}/${NSS_TARGET}-libtool" "${WRAPPER_DIR}/libtool" +ln -s "${TOOLCHAIN_BIN}/${NSS_TARGET}-lipo" "${WRAPPER_DIR}/lipo" +ln -s "${TOOLCHAIN_BIN}/${NSS_TARGET}-nm" "${WRAPPER_DIR}/nm" + +export PATH="${WRAPPER_DIR}:${PATH}" + +# Work around Python 3 bug in Ubuntu 22.04 gyp package +# Create a wrapper that monkey-patches GetStdoutQuiet to fix bytes/str handling +GYP_WRAPPER=$(mktemp) +cat > "${GYP_WRAPPER}" << 'EOFGYP' +#!/usr/bin/env python3 +import sys +import gyp.xcode_emulation + +# Monkey-patch GetStdoutQuiet to fix Python 3 bytes/str bug +original_GetStdoutQuiet = gyp.xcode_emulation.GetStdoutQuiet +def patched_GetStdoutQuiet(cmdlist): + import subprocess + job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out = job.communicate()[0] + if job.returncode != 0: + return None + return out.rstrip(b'\n').decode('utf-8') +gyp.xcode_emulation.GetStdoutQuiet = patched_GetStdoutQuiet + +# Now run gyp normally +import gyp +sys.exit(gyp.script_main()) +EOFGYP +chmod +x "${GYP_WRAPPER}" # Build NSPR NSPR_BUILD_DIR=$(mktemp -d) @@ -61,12 +135,10 @@ pushd "${NSPR_BUILD_DIR}" STRIP="${STRIP}" \ RANLIB="${RANLIB}" \ AR="${AR}" \ - AS="${AS:-${AR}}" \ - LD="${LD:-${AR}}" \ + AS="${AS}" \ + LD="${LD}" \ CC="${CC}" \ CCC="${CC}" \ - CFLAGS="${CFLAGS}" \ - LDFLAGS="${LDFLAGS}" \ --target="${NSS_TARGET}" \ --enable-64bit \ --disable-debug \ @@ -78,7 +150,7 @@ popd NSS_BUILD_DIR=$(mktemp -d) rm -rf "${NSS_SRC_DIR}/nss/out" -gyp -f ninja "${NSS_SRC_DIR}/nss/nss.gyp" \ +"${GYP_WRAPPER}" -f ninja-mac "${NSS_SRC_DIR}/nss/nss.gyp" \ --depth "${NSS_SRC_DIR}/nss/" \ --generator-output=. \ -DOS=mac \ @@ -97,6 +169,11 @@ gyp -f ninja "${NSS_SRC_DIR}/nss/nss.gyp" \ -Dpython=python3 GENERATED_DIR="${NSS_SRC_DIR}/nss/out/Release/" +echo "=== Dumping build.ninja for nss-macos-cross ===" +cat "${GENERATED_DIR}/build.ninja" + +# With the mac flavor, we can build all targets including shared libraries +# The generated ninja rules will use macOS-style linker flags (e.g., -install_name instead of -soname) ninja -C "${GENERATED_DIR}" # Assemble the DIST_DIR with relevant libraries and headers @@ -112,3 +189,4 @@ ninja -C "${GENERATED_DIR}" # Cleanup rm -rf "${NSS_BUILD_DIR}" rm -rf "${NSPR_BUILD_DIR}" +rm -rf "${WRAPPER_DIR}" diff --git a/taskcluster/scripts/toolchain/cross-compile-setup.sh b/taskcluster/scripts/toolchain/cross-compile-setup.sh index c8dbf38db6..0fa15aee07 100755 --- a/taskcluster/scripts/toolchain/cross-compile-setup.sh +++ b/taskcluster/scripts/toolchain/cross-compile-setup.sh @@ -29,11 +29,12 @@ for TARGET in x86_64-apple-darwin aarch64-apple-darwin; do export ${RUST_ANDROID_PREFIX}_CC=${CLANG_BIN}/clang-20 export ${RUST_ANDROID_PREFIX}_TOOLCHAIN_PREFIX=${CCTOOL_BIN} export ${RUST_ANDROID_PREFIX}_AR=${CCTOOL_BIN}/${TARGET}-ar + export ${RUST_ANDROID_PREFIX}_AS=${CCTOOL_BIN}/${TARGET}-as export ${RUST_ANDROID_PREFIX}_RANLIB=${CCTOOL_BIN}/${TARGET}-ranlib + export ${RUST_ANDROID_PREFIX}_LD=${CCTOOL_BIN}/${TARGET}-ld export ${RUST_ANDROID_PREFIX}_LD_LIBRARY_PATH=${CLANG_LIB} 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" - export ${RUST_ANDROID_PREFIX}_CFLAGS_${TARGET//-/_}="-B ${CCTOOL_BIN} -target ${TARGET} -isysroot ${SYSROOT}" - export ${RUST_ANDROID_PREFIX}_LDFLAGS_${TARGET//-/_}="-B ${CCTOOL_BIN} -target ${TARGET} -isysroot ${SYSROOT} -Wl,-syslibroot,${SYSROOT} -Wl,-dead_strip" + export ${RUST_ANDROID_PREFIX}_CFLAGS_${TARGET//-/_}="-B ${CCTOOL_BIN} -target ${TARGET} -isysroot ${SYSROOT} -fuse-ld=${CCTOOL_BIN}/${TARGET}-ld" export ${RUST_ANDROID_PREFIX}_BINDGEN_EXTRA_CLANG_ARGS="--sysroot ${SYSROOT}" done diff --git a/taskcluster/scripts/toolchain/desktop-macos.sh b/taskcluster/scripts/toolchain/desktop-macos.sh index 8511a094c2..c029676976 100755 --- a/taskcluster/scripts/toolchain/desktop-macos.sh +++ b/taskcluster/scripts/toolchain/desktop-macos.sh @@ -5,8 +5,8 @@ git submodule update --init ./taskcluster/scripts/toolchain/setup-fetched-rust-toolchain.sh . ./taskcluster/scripts/toolchain/cross-compile-setup.sh pushd libs -./build-all.sh darwin-x86-64 ./build-all.sh darwin-aarch64 +./build-all.sh darwin-x86-64 popd mkdir -p "$UPLOAD_DIR" tar -czf "$UPLOAD_DIR"/macos.tar.gz libs/desktop