summaryrefslogtreecommitdiff
path: root/admin/notes/tree-sitter/build-module
diff options
context:
space:
mode:
Diffstat (limited to 'admin/notes/tree-sitter/build-module')
-rw-r--r--admin/notes/tree-sitter/build-module/README17
-rwxr-xr-xadmin/notes/tree-sitter/build-module/batch.sh20
-rwxr-xr-xadmin/notes/tree-sitter/build-module/build.sh62
3 files changed, 99 insertions, 0 deletions
diff --git a/admin/notes/tree-sitter/build-module/README b/admin/notes/tree-sitter/build-module/README
new file mode 100644
index 00000000000..ee6076c119c
--- /dev/null
+++ b/admin/notes/tree-sitter/build-module/README
@@ -0,0 +1,17 @@
+To build the language definition for a particular language, run
+
+ ./build.sh <language>
+
+eg,
+
+ ./build.sh html
+
+The dynamic module will be in /dist directory
+
+To build all modules at once, run
+
+ ./batch.sh
+
+This gives you C, JSON, Go, HTML, Javascript, CSS, Python, Typescript,
+C#, C++, Rust. More can be added to batch.sh unless it's directory
+strucure is not standard. \ No newline at end of file
diff --git a/admin/notes/tree-sitter/build-module/batch.sh b/admin/notes/tree-sitter/build-module/batch.sh
new file mode 100755
index 00000000000..deed18978a1
--- /dev/null
+++ b/admin/notes/tree-sitter/build-module/batch.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+languages=(
+ 'c'
+ 'cpp'
+ 'css'
+ 'c-sharp'
+ 'go'
+ 'html'
+ 'javascript'
+ 'json'
+ 'python'
+ 'rust'
+ 'typescript'
+)
+
+for language in "${languages[@]}"
+do
+ ./build.sh $language
+done
diff --git a/admin/notes/tree-sitter/build-module/build.sh b/admin/notes/tree-sitter/build-module/build.sh
new file mode 100755
index 00000000000..16792d05cbb
--- /dev/null
+++ b/admin/notes/tree-sitter/build-module/build.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+lang=$1
+
+if [ $(uname) == "Darwin" ]
+then
+ soext="dylib"
+else
+ soext="so"
+fi
+
+echo "Building ${lang}"
+
+# Retrieve sources.
+git clone "https://github.com/tree-sitter/tree-sitter-${lang}.git" \
+ --depth 1 --quiet
+if [ "${lang}" == "typescript" ]
+then
+ lang="typescript/tsx"
+fi
+cp tree-sitter-lang.in "tree-sitter-${lang}/src"
+cp emacs-module.h "tree-sitter-${lang}/src"
+cp "tree-sitter-${lang}/grammar.js" "tree-sitter-${lang}/src"
+cd "tree-sitter-${lang}/src"
+
+if [ "${lang}" == "typescript/tsx" ]
+then
+ lang="typescript"
+fi
+
+# Build.
+cc -c -I. parser.c
+# Compile scanner.c.
+if test -f scanner.c
+then
+ cc -fPIC -c -I. scanner.c
+fi
+# Compile scanner.cc.
+if test -f scanner.cc
+then
+ c++ -fPIC -I. -c scanner.cc
+fi
+# Link.
+if test -f scanner.cc
+then
+ c++ -fPIC -shared *.o -o "libtree-sitter-${lang}.${soext}"
+else
+ cc -fPIC -shared *.o -o "libtree-sitter-${lang}.${soext}"
+fi
+
+# Copy out.
+
+if [ "${lang}" == "typescript" ]
+then
+ cp "libtree-sitter-${lang}.${soext}" ..
+ cd ..
+fi
+
+mkdir -p ../../dist
+cp "libtree-sitter-${lang}.${soext}" ../../dist
+cd ../../
+rm -rf "tree-sitter-${lang}"