Last active 1774194376

use on FreeBSD arm64 to build a native npm-based tailwindcss CLI

Revision 4827290e925f060c66e001c5614f2adc54f2e559

Makefile Raw
1BASE?=$(HOME)/src
2TAILWIND = $(BASE)/tailwind
3LCSS = $(BASE)/lightningcss
4NODE_ARCH != node -p "process.arch"
5
6.PHONY: all clean deps
7
8all: $(TAILWIND)/.cli-built
9
10$(TAILWIND)/node_modules: $(TAILWIND)
11 cd $(TAILWIND) && doas corepack enable && doas corepack install --global pnpm && pnpm install --ignore-scripts
12
13$(TAILWIND):
14 git clone https://github.com/tailwindlabs/tailwindcss.git $@
15
16$(LCSS):
17 git clone https://github.com/parcel-bundler/lightningcss.git $@
18
19$(TAILWIND)/.lcss-built: $(LCSS) $(TAILWIND)/node_modules
20 LCSS_DIR=$$(ls $(TAILWIND)/node_modules/.pnpm | grep "^lightningcss@" | head -1); \
21 LCSS_VER=$$(echo $$LCSS_DIR | sed 's/lightningcss@\([0-9.]*\).*/\1/'); \
22 LCSS_PKGS=$(TAILWIND)/node_modules/.pnpm/$$LCSS_DIR/node_modules; \
23 LCSS_NATIVE=$$LCSS_PKGS/lightningcss-freebsd-$(NODE_ARCH); \
24 git -C $(LCSS) checkout v$$LCSS_VER; \
25 cd $(LCSS) && cargo build --release -p lightningcss_node && \
26 mkdir -p $$LCSS_NATIVE && \
27 cp target/release/liblightningcss_node.so $$LCSS_NATIVE/lightningcss.freebsd-$(NODE_ARCH).node && \
28 printf '{"name":"lightningcss-freebsd-$(NODE_ARCH)","version":"%s","main":"lightningcss.freebsd-$(NODE_ARCH).node"}\n' $$LCSS_VER \
29 > $$LCSS_NATIVE/package.json && \
30 node -e "require('$$LCSS_PKGS/lightningcss')" && \
31 touch $@
32
33$(TAILWIND)/.oxide-built: $(TAILWIND)/node_modules
34 cd $(TAILWIND) && cargo build --release -p tailwind-oxide && \
35 cp target/release/libtailwind_oxide.so \
36 "$(TAILWIND)/crates/node/tailwindcss-oxide.freebsd-$(NODE_ARCH).node" && \
37 cd $(TAILWIND)/crates/node && pnpm run build:platform && \
38 touch $@
39
40$(TAILWIND)/.parcel-built: $(TAILWIND)/node_modules
41 for dir in $$(ls -d $(TAILWIND)/node_modules/.pnpm/@parcel+watcher@*/node_modules/@parcel/watcher); do \
42 WATCHER_VER=$$(node -p "require('$$dir/package.json').version"); \
43 WATCHER_NATIVE=$$dir/../watcher-freebsd-$(NODE_ARCH); \
44 rm -rf $$dir/build; \
45 cd $$dir && node-gyp rebuild --python=python3.13 || true; \
46 mkdir -p $$WATCHER_NATIVE; \
47 cp $$dir/build/Release/watcher.node $$WATCHER_NATIVE/; \
48 printf '{"name":"@parcel/watcher-freebsd-$(NODE_ARCH)","version":"%s","main":"watcher.node"}\n' $$WATCHER_VER \
49 > $$WATCHER_NATIVE/package.json; \
50 node -e "require('$$dir')" || true; \
51 done && touch $@
52
53$(TAILWIND)/.pkg-fixed: $(TAILWIND)
54 sed -i.bak 's|"import": "./src/index.ts"|"import": "./dist/lib.mjs"|' \
55 $(TAILWIND)/packages/tailwindcss/package.json && \
56 touch $@
57
58$(TAILWIND)/.tailwindcss-built: $(TAILWIND)/.pkg-fixed $(TAILWIND)/.lcss-built
59 cd $(TAILWIND)/packages/tailwindcss && pnpm run build && \
60 touch $@
61
62$(TAILWIND)/.node-built: $(TAILWIND)/.tailwindcss-built $(TAILWIND)/.oxide-built $(TAILWIND)/.parcel-built
63 cd $(TAILWIND)/packages/@tailwindcss-node && pnpm run build && \
64 touch $@
65
66$(TAILWIND)/.cli-built: $(TAILWIND)/.node-built
67 cd $(TAILWIND)/packages/@tailwindcss-cli && pnpm run build && \
68 touch $@
69
70clean:
71 rm -rf $(TAILWIND) $(LCSS)
72
73deps:
74 doas pkg install -yr FreeBSD-ports devel/git devel/pkgconf \
75 lang/gcc lang/python lang/rust www/npm-node24
76