git: 38b400901089 - main - www/tailwindcss4: fix build on powerpc64*

From: Piotr Kubaj <pkubaj_at_FreeBSD.org>
Date: Sat, 31 Oct 2026 21:34:02 UTC
The branch main has been updated by pkubaj:

URL: https://cgit.FreeBSD.org/ports/commit/?id=38b400901089f386517feb07662a31aa820c3cd8

commit 38b400901089f386517feb07662a31aa820c3cd8
Author:     Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: 2026-10-30 09:02:35 +0000
Commit:     Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: 2026-10-31 21:33:12 +0000

    www/tailwindcss4: fix build on powerpc64*
    
    Build oxide and lightningcss from source like on aarch64. The oxide
    loader only knows x64 and arm64 on FreeBSD, so make it load the module
    for whatever arch node reports.
---
 www/tailwindcss4/Makefile                         | 62 ++++++++++++++---------
 www/tailwindcss4/{pkg-plist.aarch64 => pkg-plist} | 18 +++----
 2 files changed, 46 insertions(+), 34 deletions(-)

diff --git a/www/tailwindcss4/Makefile b/www/tailwindcss4/Makefile
index 2c0d3dec7483..79882d21f0ab 100644
--- a/www/tailwindcss4/Makefile
+++ b/www/tailwindcss4/Makefile
@@ -17,7 +17,7 @@ WWW=		https://tailwindcss.com/
 
 LICENSE=	MIT
 
-ONLY_FOR_ARCHS=	aarch64 amd64 # internal .node libraries not supported elsewhere
+ONLY_FOR_ARCHS=	aarch64 amd64 powerpc64 powerpc64le # internal .node libraries not supported elsewhere
 BUILD_DEPENDS=	corepack:www/corepack \
 		npm:www/npm-node${_NODE_VERSION}
 USES=		nodejs:${_NODE_VERSION},build,run python:build tar:txz
@@ -25,6 +25,7 @@ USES=		nodejs:${_NODE_VERSION},build,run python:build tar:txz
 CONFLICTS_INSTALL=	tailwindcss*
 
 _LCSS_VER=	1.32.0
+_NODE_ARCH=	${ARCH:S/aarch64/arm64/:C/powerpc64.*/ppc64/}
 _NODE_VERSION=	26
 _TAILWIND_VER=	${DISTVERSION}
 _WATCHER_VER=	2.5.1
@@ -42,9 +43,12 @@ _CARGO_VENDOR=	${WRKDIR}/cargo-vendor
 
 .include <bsd.port.pre.mk>
 
-PLIST=		${.CURDIR}/pkg-plist.${ARCH}
+.if ${ARCH} == amd64
+PLIST=		${.CURDIR}/pkg-plist.amd64
+.endif
+PLIST_SUB=	NODE_ARCH=${_NODE_ARCH}
 
-# oxide & lightningcss need to be built from source crates on aarch64
+# oxide & lightningcss need to be built from source crates on all but amd64
 DISTFILES+=	tailwindcss-v${DISTVERSION}.tar.gz:twsrc \
 		lightningcss-v${_LCSS_VER}.tar.gz:lcsssrc \
 		${_CARGO_ARCHIVE}:cargo
@@ -53,7 +57,7 @@ BUILD_DEPENDS+=	rust>0:lang/rust
 do-extract:
 	@${MKDIR} ${_NPM_CACHE}
 	${TAR} -xf ${_DISTDIR}/${_NPM_ARCHIVE} -C ${_NPM_CACHE}
-.if ${ARCH} == aarch64
+.if ${ARCH} != amd64
 	${TAR} -xf ${_DISTDIR}/tailwindcss-v${DISTVERSION}.tar.gz -C ${WRKDIR}
 	${TAR} -xf ${_DISTDIR}/lightningcss-v${_LCSS_VER}.tar.gz -C ${WRKDIR}
 	${MKDIR} ${_CARGO_VENDOR}
@@ -67,17 +71,17 @@ do-build:
 # npm's self-update check ignores offline=true; keep the build off the network
 	${ECHO_CMD} update-notifier=false >> ${WRKDIR}/.npmrc
 	${ECHO_CMD} python=${PYTHON_CMD} >> ${WRKDIR}/.npmrc
-.if ${ARCH} == aarch64
+.if ${ARCH} != amd64
 # configure cargo for offline vendored build
 	${MKDIR} ${WRKDIR}/.cargo
 	${PRINTF} '[source.crates-io]\nreplace-with = "vendor"\n[source.vendor]\ndirectory = "%s"\n' \
 		${_CARGO_VENDOR} > ${WRKDIR}/.cargo/config.toml
-# build tailwind-oxide Rust NAPI module for freebsd-arm64
+# build tailwind-oxide Rust NAPI module for freebsd-${_NODE_ARCH}
 	(cd ${_TAILWIND_SRC} && \
 		${SETENV} CARGO_HOME=${WRKDIR}/.cargo CARGO_NET_OFFLINE=true \
 		cargo build --release -p tailwind-oxide && \
-		${CP} target/release/libtailwind_oxide.so crates/node/tailwindcss-oxide.freebsd-arm64.node)
-# build lightningcss Rust NAPI module for freebsd-arm64
+		${CP} target/release/libtailwind_oxide.so crates/node/tailwindcss-oxide.freebsd-${_NODE_ARCH}.node)
+# build lightningcss Rust NAPI module for freebsd-${_NODE_ARCH}
 	(cd ${_LCSS_SRC} && \
 		${SETENV} CARGO_HOME=${WRKDIR}/.cargo CARGO_NET_OFFLINE=true \
 		cargo build --release -p lightningcss_node)
@@ -114,34 +118,42 @@ do-install:
 	config.gypi watcher.target.mk
 	${RM} -rf ${STAGEDIR}${PREFIX}/lib/node_modules/@parcel/watcher/build/${file}
 .endfor
-.if ${ARCH} == aarch64
+.if ${ARCH} != amd64
 # drop x86 binaries in favour of our source-built ones
 	${RM} -rf ${_TW_MODULES}/@tailwindcss/oxide-freebsd-x64 \
 		${_TW_MODULES}/lightningcss-freebsd-x64 \
 		${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-x64
-	${MKDIR} ${_TW_MODULES}/@tailwindcss/oxide-freebsd-arm64
-	${INSTALL_DATA} ${_TAILWIND_SRC}/crates/node/tailwindcss-oxide.freebsd-arm64.node \
-		${_TW_MODULES}/@tailwindcss/oxide-freebsd-arm64/
-	${PRINTF} '{"name":"@tailwindcss/oxide-freebsd-arm64","version":"%s","main":"tailwindcss-oxide.freebsd-arm64.node"}\n' \
-		${_TAILWIND_VER} > ${_TW_MODULES}/@tailwindcss/oxide-freebsd-arm64/package.json
-	${MKDIR} ${_TW_MODULES}/lightningcss-freebsd-arm64
+	${MKDIR} ${_TW_MODULES}/@tailwindcss/oxide-freebsd-${_NODE_ARCH}
+	${INSTALL_DATA} ${_TAILWIND_SRC}/crates/node/tailwindcss-oxide.freebsd-${_NODE_ARCH}.node \
+		${_TW_MODULES}/@tailwindcss/oxide-freebsd-${_NODE_ARCH}/
+	${PRINTF} '{"name":"@tailwindcss/oxide-freebsd-${_NODE_ARCH}","version":"%s","main":"tailwindcss-oxide.freebsd-${_NODE_ARCH}.node"}\n' \
+		${_TAILWIND_VER} > ${_TW_MODULES}/@tailwindcss/oxide-freebsd-${_NODE_ARCH}/package.json
+	${MKDIR} ${_TW_MODULES}/lightningcss-freebsd-${_NODE_ARCH}
 	${INSTALL_DATA} ${_LCSS_SRC}/target/release/liblightningcss_node.so \
-		${_TW_MODULES}/lightningcss-freebsd-arm64/lightningcss.freebsd-arm64.node
-	${PRINTF} '{"name":"lightningcss-freebsd-arm64","version":"%s","main":"lightningcss.freebsd-arm64.node"}\n' \
-		${_LCSS_VER} > ${_TW_MODULES}/lightningcss-freebsd-arm64/package.json
-	${MKDIR} ${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-arm64
+		${_TW_MODULES}/lightningcss-freebsd-${_NODE_ARCH}/lightningcss.freebsd-${_NODE_ARCH}.node
+	${PRINTF} '{"name":"lightningcss-freebsd-${_NODE_ARCH}","version":"%s","main":"lightningcss.freebsd-${_NODE_ARCH}.node"}\n' \
+		${_LCSS_VER} > ${_TW_MODULES}/lightningcss-freebsd-${_NODE_ARCH}/package.json
+	${MKDIR} ${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-${_NODE_ARCH}
 	${INSTALL_DATA} ${_WATCHER_PKG}/build/Release/watcher.node \
-		${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-arm64/
-	${PRINTF} '{"name":"@parcel/watcher-freebsd-arm64","version":"%s","main":"watcher.node"}\n' \
-		${_WATCHER_VER} > ${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-arm64/package.json
+		${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-${_NODE_ARCH}/
+	${PRINTF} '{"name":"@parcel/watcher-freebsd-${_NODE_ARCH}","version":"%s","main":"watcher.node"}\n' \
+		${_WATCHER_VER} > ${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-${_NODE_ARCH}/package.json
 # the x86 shims we replaced shipped a LICENSE, keep one alongside ours. oxide &
 # lightningcss come from the source trees we built, watcher from its own package
 	${INSTALL_DATA} ${_TAILWIND_SRC}/LICENSE \
-		${_TW_MODULES}/@tailwindcss/oxide-freebsd-arm64/
+		${_TW_MODULES}/@tailwindcss/oxide-freebsd-${_NODE_ARCH}/
 	${INSTALL_DATA} ${_LCSS_SRC}/LICENSE \
-		${_TW_MODULES}/lightningcss-freebsd-arm64/
+		${_TW_MODULES}/lightningcss-freebsd-${_NODE_ARCH}/
 	${INSTALL_DATA} ${_WATCHER_PKG}/LICENSE \
-		${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-arm64/
+		${_WATCHER_PKG}/node_modules/@parcel/watcher-freebsd-${_NODE_ARCH}/
+# the napi-rs loader of oxide only probes x64 & arm64 on FreeBSD
+	@${REINPLACE_CMD} -e '/Unsupported architecture on FreeBSD/s|loadErrors\.push(.*)|try { return require(`@tailwindcss/oxide-freebsd-$${process.arch}`) } catch (e) { loadErrors.push(e) }|' \
+		${_TW_MODULES}/@tailwindcss/oxide/index.js
+	@${RM} ${_TW_MODULES}/@tailwindcss/oxide/index.js.bak
+	@if ! ${GREP} -q 'oxide-freebsd-$${process.arch}' ${_TW_MODULES}/@tailwindcss/oxide/index.js; then \
+		${ECHO_CMD} "===> oxide loader not patched; upstream layout changed"; \
+		exit 1; \
+	fi
 .endif
 # upstream JS plugin resolvers probe only .js/.json/.node/.ts
 # Phoenix & DaisyUI reference plugins by appending .mjs/.cjs to the resolver
diff --git a/www/tailwindcss4/pkg-plist.aarch64 b/www/tailwindcss4/pkg-plist
similarity index 99%
rename from www/tailwindcss4/pkg-plist.aarch64
rename to www/tailwindcss4/pkg-plist
index 9db24bcd2b81..5dfc6faf38f1 100644
--- a/www/tailwindcss4/pkg-plist.aarch64
+++ b/www/tailwindcss4/pkg-plist
@@ -8,9 +8,9 @@ lib/node_modules/@parcel/watcher/index.d.ts
 lib/node_modules/@parcel/watcher/index.js
 lib/node_modules/@parcel/watcher/index.js.flow
 lib/node_modules/@parcel/watcher/node_modules/.bin/detect-libc
-lib/node_modules/@parcel/watcher/node_modules/@parcel/watcher-freebsd-arm64/LICENSE
-lib/node_modules/@parcel/watcher/node_modules/@parcel/watcher-freebsd-arm64/package.json
-lib/node_modules/@parcel/watcher/node_modules/@parcel/watcher-freebsd-arm64/watcher.node
+lib/node_modules/@parcel/watcher/node_modules/@parcel/watcher-freebsd-%%NODE_ARCH%%/LICENSE
+lib/node_modules/@parcel/watcher/node_modules/@parcel/watcher-freebsd-%%NODE_ARCH%%/package.json
+lib/node_modules/@parcel/watcher/node_modules/@parcel/watcher-freebsd-%%NODE_ARCH%%/watcher.node
 lib/node_modules/@parcel/watcher/node_modules/braces/LICENSE
 lib/node_modules/@parcel/watcher/node_modules/braces/README.md
 lib/node_modules/@parcel/watcher/node_modules/braces/index.js
@@ -288,9 +288,9 @@ lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/node/dist/index.mjs
 lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/node/dist/require-cache.d.ts
 lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/node/dist/require-cache.js
 lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/node/package.json
-lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide-freebsd-arm64/LICENSE
-lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide-freebsd-arm64/package.json
-lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide-freebsd-arm64/tailwindcss-oxide.freebsd-arm64.node
+lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide-freebsd-%%NODE_ARCH%%/LICENSE
+lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide-freebsd-%%NODE_ARCH%%/package.json
+lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide-freebsd-%%NODE_ARCH%%/tailwindcss-oxide.freebsd-%%NODE_ARCH%%.node
 lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide/LICENSE
 lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide/index.d.ts
 lib/node_modules/@tailwindcss/cli/node_modules/@tailwindcss/oxide/index.js
@@ -384,9 +384,9 @@ lib/node_modules/@tailwindcss/cli/node_modules/jiti/lib/jiti.d.mts
 lib/node_modules/@tailwindcss/cli/node_modules/jiti/lib/jiti.mjs
 lib/node_modules/@tailwindcss/cli/node_modules/jiti/lib/types.d.ts
 lib/node_modules/@tailwindcss/cli/node_modules/jiti/package.json
-lib/node_modules/@tailwindcss/cli/node_modules/lightningcss-freebsd-arm64/LICENSE
-lib/node_modules/@tailwindcss/cli/node_modules/lightningcss-freebsd-arm64/lightningcss.freebsd-arm64.node
-lib/node_modules/@tailwindcss/cli/node_modules/lightningcss-freebsd-arm64/package.json
+lib/node_modules/@tailwindcss/cli/node_modules/lightningcss-freebsd-%%NODE_ARCH%%/LICENSE
+lib/node_modules/@tailwindcss/cli/node_modules/lightningcss-freebsd-%%NODE_ARCH%%/lightningcss.freebsd-%%NODE_ARCH%%.node
+lib/node_modules/@tailwindcss/cli/node_modules/lightningcss-freebsd-%%NODE_ARCH%%/package.json
 lib/node_modules/@tailwindcss/cli/node_modules/lightningcss/LICENSE
 lib/node_modules/@tailwindcss/cli/node_modules/lightningcss/README.md
 lib/node_modules/@tailwindcss/cli/node_modules/lightningcss/node/ast.d.ts