« Home

Source. Makefile [source-AMSK]

Hook grammars into your default target, then add languages by listing them in TS_LANGS.

# tree-sitter grammars
TS_LANGS := go
TS_BUILD := _tmp/ts-grammars-src

.PHONY: grammars
grammars:
        @for lang in $(TS_LANGS); do \
          out=ts-grammars/$$lang; \
          if [ -f $$out/$$lang.dylib ]; then echo "✓ grammar $$lang"; continue; fi; \
          case $$lang in \
            *) repo=https://github.com/tree-sitter/tree-sitter-$$lang ;; \
          esac; \
          echo "building grammar $$lang from $$repo"; \
          mkdir -p $$out $(TS_BUILD); \
          test -d $(TS_BUILD)/tree-sitter-$$lang || git clone --depth 1 $$repo $(TS_BUILD)/tree-sitter-$$lang; \
          src=$(TS_BUILD)/tree-sitter-$$lang/src; \
          if [ -f $$src/scanner.cc ]; then \
            cc  -c -fPIC -O2 -I $$src $$src/parser.c   -o $(TS_BUILD)/$$lang-parser.o; \
            c++ -c -fPIC -O2 -I $$src $$src/scanner.cc -o $(TS_BUILD)/$$lang-scanner.o; \
            c++ -shared $(TS_BUILD)/$$lang-parser.o $(TS_BUILD)/$$lang-scanner.o -o $$out/$$lang.dylib; \
          else \
            files="$$src/parser.c"; \
            [ -f $$src/scanner.c ] && files="$$files $$src/scanner.c"; \
            cc -shared -fPIC -O2 -I $$src $$files -o $$out/$$lang.dylib; \
          fi; \
          cp $(TS_BUILD)/tree-sitter-$$lang/queries/highlights.scm $$out/highlights.scm; \
          echo "✓ grammar $$lang"; \
        done