@@ -47,38 +47,68 @@ if [[ -z "${!nss_dir_var}" ]]; then
4747fi
4848
4949# Use toolchain configuration from environment
50- eval " CC =\$ ${RUST_ANDROID_PREFIX} _CC"
50+ eval " BASE_CC =\$ ${RUST_ANDROID_PREFIX} _CC"
5151eval " AR=\$ ${RUST_ANDROID_PREFIX} _AR"
52+ eval " AS=\$ ${RUST_ANDROID_PREFIX} _AS"
5253eval " RANLIB=\$ ${RUST_ANDROID_PREFIX} _RANLIB"
54+ eval " LD=\$ ${RUST_ANDROID_PREFIX} _LD"
5355eval " STRIP=\$ ${RUST_ANDROID_PREFIX} _TOOLCHAIN_PREFIX/${NSS_TARGET} -strip"
56+ eval " TOOLCHAIN_BIN=\$ ${RUST_ANDROID_PREFIX} _TOOLCHAIN_PREFIX"
5457eval " CFLAGS=\$ ${RUST_ANDROID_PREFIX} _CFLAGS_${NSS_TARGET// -/ _} "
55- eval " LDFLAGS=\$ ${RUST_ANDROID_PREFIX} _LDFLAGS_${NSS_TARGET// -/ _} "
58+
59+ # Bake all compiler/linker flags into CC like build-nss-ios.sh does
60+ # This ensures ninja picks up the flags for both compilation and linking
61+ CC=" ${BASE_CC} ${CFLAGS} "
62+ export CC
5663
5764# Build NSPR
5865NSPR_BUILD_DIR=$( mktemp -d)
5966pushd " ${NSPR_BUILD_DIR} "
60- " ${NSS_SRC_DIR} " /nspr/configure \
67+ if ! " ${NSS_SRC_DIR} " /nspr/configure \
6168 STRIP=" ${STRIP} " \
6269 RANLIB=" ${RANLIB} " \
6370 AR=" ${AR} " \
64- AS=" ${AS:- ${AR} } " \
65- LD=" ${LD:- ${AR} } " \
71+ AS=" ${AS} " \
72+ LD=" ${LD} " \
6673 CC=" ${CC} " \
6774 CCC=" ${CC} " \
68- CFLAGS=" ${CFLAGS} " \
69- LDFLAGS=" ${LDFLAGS} " \
7075 --target=" ${NSS_TARGET} " \
7176 --enable-64bit \
7277 --disable-debug \
73- --enable-optimize
78+ --enable-optimize; then
79+ echo " === NSPR configure failed, dumping config.log ==="
80+ cat config.log
81+ exit 1
82+ fi
7483make
7584popd
7685
7786# Build NSS using gyp
7887NSS_BUILD_DIR=$( mktemp -d)
7988rm -rf " ${NSS_SRC_DIR} /nss/out"
8089
81- gyp -f ninja " ${NSS_SRC_DIR} /nss/nss.gyp" \
90+ # Create a fake xcodebuild script and tool wrappers to allow gyp to use the mac flavor
91+ # This tricks gyp into thinking Xcode is installed so it generates macOS-style build rules
92+ FAKE_XCODE_DIR=$( mktemp -d)
93+ cat > " ${FAKE_XCODE_DIR} /xcodebuild" << 'EOF '
94+ #!/bin/bash
95+ # Fake xcodebuild that returns a version for gyp's mac flavor
96+ # Xcode 12.2 corresponds to macOS SDK 11.0 (Big Sur) and adds Apple Silicon support
97+ echo "Xcode 12.2"
98+ echo "Build version 12B45b"
99+ EOF
100+ chmod +x " ${FAKE_XCODE_DIR} /xcodebuild"
101+
102+ # Create unprefixed symlinks to cctools binaries that gyp's mac flavor expects
103+ # The mac flavor expects tools like 'otool', 'libtool', 'lipo' without the target prefix
104+ ln -s " ${TOOLCHAIN_BIN} /${NSS_TARGET} -otool" " ${FAKE_XCODE_DIR} /otool"
105+ ln -s " ${TOOLCHAIN_BIN} /${NSS_TARGET} -libtool" " ${FAKE_XCODE_DIR} /libtool"
106+ ln -s " ${TOOLCHAIN_BIN} /${NSS_TARGET} -lipo" " ${FAKE_XCODE_DIR} /lipo"
107+ ln -s " ${TOOLCHAIN_BIN} /${NSS_TARGET} -nm" " ${FAKE_XCODE_DIR} /nm"
108+
109+ export PATH=" ${FAKE_XCODE_DIR} :${PATH} "
110+
111+ gyp -f ninja-mac " ${NSS_SRC_DIR} /nss/nss.gyp" \
82112 --depth " ${NSS_SRC_DIR} /nss/" \
83113 --generator-output=. \
84114 -DOS=mac \
@@ -97,6 +127,11 @@ gyp -f ninja "${NSS_SRC_DIR}/nss/nss.gyp" \
97127 -Dpython=python3
98128
99129GENERATED_DIR=" ${NSS_SRC_DIR} /nss/out/Release/"
130+ echo " === Dumping build.ninja for nss-macos-cross ==="
131+ cat " ${GENERATED_DIR} /build.ninja"
132+
133+ # With the mac flavor, we can build all targets including shared libraries
134+ # The generated ninja rules will use macOS-style linker flags (e.g., -install_name instead of -soname)
100135ninja -C " ${GENERATED_DIR} "
101136
102137# Assemble the DIST_DIR with relevant libraries and headers
@@ -112,3 +147,4 @@ ninja -C "${GENERATED_DIR}"
112147# Cleanup
113148rm -rf " ${NSS_BUILD_DIR} "
114149rm -rf " ${NSPR_BUILD_DIR} "
150+ rm -rf " ${FAKE_XCODE_DIR} "
0 commit comments