aboutsummaryrefslogtreecommitdiff
path: root/Scripts/build-parser.sh
diff options
context:
space:
mode:
authorDavid Czihak <git@dcz.at>2026-05-07 14:33:19 +0200
committerDavid Czihak <git@dcz.at>2026-05-07 14:33:19 +0200
commitddf2de739068b5ff0866ccb1d067f3cb53a4fc55 (patch)
tree1a77efe9d73a6172be3c37d29b321eadd4efe379 /Scripts/build-parser.sh
Initial commitv0.1.7
Diffstat (limited to 'Scripts/build-parser.sh')
-rwxr-xr-xScripts/build-parser.sh53
1 files changed, 53 insertions, 0 deletions
diff --git a/Scripts/build-parser.sh b/Scripts/build-parser.sh
new file mode 100755
index 0000000..3b93a1c
--- /dev/null
+++ b/Scripts/build-parser.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+#
+# build-parser.sh — Compile the Nova-compatible tree-sitter-zig parser.
+#
+# Purpose:
+# Build vendor/tree-sitter-zig/src/parser.c into a universal macOS dylib
+# that Nova loads via its private SyntaxKit framework.
+#
+# What it does:
+# - clang -dynamiclib for arm64 + x86_64
+# - links against Nova’s SyntaxKit framework (from /Applications/Nova.app)
+# - sets rpath @loader_path/../Frameworks so the dylib finds SyntaxKit
+# when Nova loads it from the bundled extension
+# - ad-hoc codesigns the dylib (Gatekeeper requirement)
+# - writes the result to Syntaxes/libtree-sitter-zig.dylib
+#
+# Usage:
+# ./Scripts/build-parser.sh
+#
+# Environment overrides:
+# NOVA_APP Path to Nova.app (default: /Applications/Nova.app)
+# SDKROOT macOS SDK path (default: `xcrun --show-sdk-path`)
+#
+# Requirements:
+# macOS, Xcode Command Line Tools (clang + xcrun), Nova installed.
+
+set -eu
+
+ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
+VENDOR_DIR="$ROOT/vendor/tree-sitter-zig"
+BUILD_DIR="$ROOT/build"
+OUTPUT="$ROOT/Syntaxes/libtree-sitter-zig.dylib"
+NOVA_APP="${NOVA_APP:-/Applications/Nova.app}"
+SDKROOT="${SDKROOT:-$(xcrun --show-sdk-path)}"
+
+mkdir -p "$BUILD_DIR"
+
+clang \
+ -dynamiclib \
+ -O2 \
+ -fPIC \
+ -arch arm64 \
+ -arch x86_64 \
+ -isysroot "$SDKROOT" \
+ -I"$VENDOR_DIR/src" \
+ -F"$NOVA_APP/Contents/Frameworks" \
+ -framework SyntaxKit \
+ -Wl,-rpath,@loader_path/../Frameworks \
+ -o "$BUILD_DIR/libtree-sitter-zig.dylib" \
+ "$VENDOR_DIR/src/parser.c"
+
+codesign --force --sign - "$BUILD_DIR/libtree-sitter-zig.dylib"
+cp "$BUILD_DIR/libtree-sitter-zig.dylib" "$OUTPUT"