|
| 1 | +ifeq ($(OS),Windows_NT) |
| 2 | +$(error Windows is not supported) |
| 3 | +endif |
| 4 | + |
| 5 | +LANGUAGE_NAME := tree-sitter-elixir |
| 6 | +HOMEPAGE_URL := https://github.com/elixir-lang/tree-sitter-elixir |
1 | 7 | VERSION := 0.3.4
|
2 | 8 |
|
3 |
| -# Repository |
| 9 | +# repository |
4 | 10 | SRC_DIR := src
|
5 | 11 |
|
6 |
| -PARSER_REPO_URL := $(shell git -C $(SRC_DIR) remote get-url origin ) |
7 |
| - |
8 |
| -ifeq (, $(PARSER_NAME)) |
9 |
| - PARSER_NAME := $(shell basename $(PARSER_REPO_URL)) |
10 |
| - PARSER_NAME := $(subst tree-sitter-,,$(PARSER_NAME)) |
11 |
| - PARSER_NAME := $(subst .git,,$(PARSER_NAME)) |
12 |
| -endif |
13 |
| - |
14 |
| -ifeq (, $(PARSER_URL)) |
15 |
| - PARSER_URL := $(subst :,/,$(PARSER_REPO_URL)) |
16 |
| - PARSER_URL := $(subst git@,https://,$(PARSER_URL)) |
17 |
| - PARSER_URL := $(subst .git,,$(PARSER_URL)) |
18 |
| -endif |
19 |
| - |
20 |
| -UPPER_PARSER_NAME := $(shell echo $(PARSER_NAME) | tr a-z A-Z ) |
| 12 | +TS ?= tree-sitter |
21 | 13 |
|
22 | 14 | # install directory layout
|
23 | 15 | PREFIX ?= /usr/local
|
24 | 16 | INCLUDEDIR ?= $(PREFIX)/include
|
25 | 17 | LIBDIR ?= $(PREFIX)/lib
|
26 | 18 | PCLIBDIR ?= $(LIBDIR)/pkgconfig
|
27 | 19 |
|
28 |
| -# collect C++ sources, and link if necessary |
29 |
| -CPPSRC := $(wildcard $(SRC_DIR)/*.cc) |
| 20 | +# source/object files |
| 21 | +PARSER := $(SRC_DIR)/parser.c |
| 22 | +EXTRAS := $(filter-out $(PARSER),$(wildcard $(SRC_DIR)/*.c)) |
| 23 | +OBJS := $(patsubst %.c,%.o,$(PARSER) $(EXTRAS)) |
30 | 24 |
|
31 |
| -ifeq (, $(CPPSRC)) |
32 |
| - ADDITIONALLIBS := |
33 |
| -else |
34 |
| - ADDITIONALLIBS := -lc++ |
35 |
| -endif |
36 |
| - |
37 |
| -# collect sources |
38 |
| -SRC := $(wildcard $(SRC_DIR)/*.c) |
39 |
| -SRC += $(CPPSRC) |
40 |
| -OBJ := $(addsuffix .o,$(basename $(SRC))) |
| 25 | +# flags |
| 26 | +ARFLAGS ?= rcs |
| 27 | +override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC |
41 | 28 |
|
42 | 29 | # ABI versioning
|
43 |
| -SONAME_MAJOR := 0 |
44 |
| -SONAME_MINOR := 0 |
45 |
| - |
46 |
| -CFLAGS ?= -O3 -Wall -Wextra -I$(SRC_DIR) |
47 |
| -CXXFLAGS ?= -O3 -Wall -Wextra -I$(SRC_DIR) |
48 |
| -override CFLAGS += -std=gnu99 -fPIC |
49 |
| -override CXXFLAGS += -fPIC |
| 30 | +SONAME_MAJOR = $(shell sed -n 's/\#define LANGUAGE_VERSION //p' $(PARSER)) |
| 31 | +SONAME_MINOR = $(word 1,$(subst ., ,$(VERSION))) |
50 | 32 |
|
51 | 33 | # OS-specific bits
|
52 | 34 | ifeq ($(shell uname),Darwin)
|
53 | 35 | SOEXT = dylib
|
54 |
| - SOEXTVER_MAJOR = $(SONAME_MAJOR).dylib |
55 |
| - SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).dylib |
56 |
| - LINKSHARED := $(LINKSHARED)-dynamiclib -Wl, |
57 |
| - ifneq ($(ADDITIONALLIBS),) |
58 |
| - LINKSHARED := $(LINKSHARED)$(ADDITIONALLIBS), |
59 |
| - endif |
60 |
| - LINKSHARED := $(LINKSHARED)-install_name,$(LIBDIR)/libtree-sitter-$(PARSER_NAME).$(SONAME_MAJOR).dylib,-rpath,@executable_path/../Frameworks |
| 36 | + SOEXTVER_MAJOR = $(SONAME_MAJOR).$(SOEXT) |
| 37 | + SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).$(SOEXT) |
| 38 | + LINKSHARED = -dynamiclib -Wl,-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SOEXTVER),-rpath,@executable_path/../Frameworks |
61 | 39 | else
|
62 | 40 | SOEXT = so
|
63 |
| - SOEXTVER_MAJOR = so.$(SONAME_MAJOR) |
64 |
| - SOEXTVER = so.$(SONAME_MAJOR).$(SONAME_MINOR) |
65 |
| - LINKSHARED := $(LINKSHARED)-shared -Wl, |
66 |
| - ifneq ($(ADDITIONALLIBS),) |
67 |
| - LINKSHARED := $(LINKSHARED)$(ADDITIONALLIBS), |
68 |
| - endif |
69 |
| - LINKSHARED := $(LINKSHARED)-soname,libtree-sitter-$(PARSER_NAME).so.$(SONAME_MAJOR) |
| 41 | + SOEXTVER_MAJOR = $(SOEXT).$(SONAME_MAJOR) |
| 42 | + SOEXTVER = $(SOEXT).$(SONAME_MAJOR).$(SONAME_MINOR) |
| 43 | + LINKSHARED = -shared -Wl,-soname,lib$(LANGUAGE_NAME).$(SOEXTVER) |
70 | 44 | endif
|
71 |
| -ifneq (,$(filter $(shell uname),FreeBSD NetBSD DragonFly)) |
| 45 | +ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),) |
72 | 46 | PCLIBDIR := $(PREFIX)/libdata/pkgconfig
|
73 | 47 | endif
|
74 | 48 |
|
75 |
| -all: libtree-sitter-$(PARSER_NAME).a libtree-sitter-$(PARSER_NAME).$(SOEXTVER) bindings/c/$(PARSER_NAME).h bindings/c/tree-sitter-$(PARSER_NAME).pc |
| 49 | +all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc |
76 | 50 |
|
77 |
| -libtree-sitter-$(PARSER_NAME).a: $(OBJ) |
78 |
| - $(AR) rcs $@ $^ |
| 51 | +lib$(LANGUAGE_NAME).a: $(OBJS) |
| 52 | + $(AR) $(ARFLAGS) $@ $^ |
79 | 53 |
|
80 |
| -libtree-sitter-$(PARSER_NAME).$(SOEXTVER): $(OBJ) |
| 54 | +lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS) |
81 | 55 | $(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@
|
82 |
| - ln -sf $@ libtree-sitter-$(PARSER_NAME).$(SOEXT) |
83 |
| - ln -sf $@ libtree-sitter-$(PARSER_NAME).$(SOEXTVER_MAJOR) |
84 |
| - |
85 |
| -bindings/c/$(PARSER_NAME).h: |
86 |
| - sed -e 's|@UPPER_PARSERNAME@|$(UPPER_PARSER_NAME)|' \ |
87 |
| - -e 's|@PARSERNAME@|$(PARSER_NAME)|' \ |
88 |
| - bindings/c/tree-sitter.h.in > $@ |
89 |
| - |
90 |
| -bindings/c/tree-sitter-$(PARSER_NAME).pc: |
91 |
| - sed -e 's|@LIBDIR@|$(LIBDIR)|;s|@INCLUDEDIR@|$(INCLUDEDIR)|;s|@VERSION@|$(VERSION)|' \ |
92 |
| - -e 's|=$(PREFIX)|=$${prefix}|' \ |
93 |
| - -e 's|@PREFIX@|$(PREFIX)|' \ |
94 |
| - -e 's|@ADDITIONALLIBS@|$(ADDITIONALLIBS)|' \ |
95 |
| - -e 's|@PARSERNAME@|$(PARSER_NAME)|' \ |
96 |
| - -e 's|@PARSERURL@|$(PARSER_URL)|' \ |
97 |
| - bindings/c/tree-sitter.pc.in > $@ |
| 56 | +ifneq ($(STRIP),) |
| 57 | + $(STRIP) $@ |
| 58 | +endif |
| 59 | + |
| 60 | +$(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in |
| 61 | + sed -e 's|@PROJECT_VERSION@|$(VERSION)|' \ |
| 62 | + -e 's|@CMAKE_INSTALL_LIBDIR@|$(LIBDIR:$(PREFIX)/%=%)|' \ |
| 63 | + -e 's|@CMAKE_INSTALL_INCLUDEDIR@|$(INCLUDEDIR:$(PREFIX)/%=%)|' \ |
| 64 | + -e 's|@PROJECT_DESCRIPTION@|$(DESCRIPTION)|' \ |
| 65 | + -e 's|@PROJECT_HOMEPAGE_URL@|$(HOMEPAGE_URL)|' \ |
| 66 | + -e 's|@CMAKE_INSTALL_PREFIX@|$(PREFIX)|' $< > $@ |
| 67 | + |
| 68 | +$(PARSER): $(SRC_DIR)/grammar.json |
| 69 | + $(TS) generate $^ |
98 | 70 |
|
99 | 71 | install: all
|
100 |
| - install -d '$(DESTDIR)$(LIBDIR)' |
101 |
| - install -m755 libtree-sitter-$(PARSER_NAME).a '$(DESTDIR)$(LIBDIR)'/libtree-sitter-$(PARSER_NAME).a |
102 |
| - install -m755 libtree-sitter-$(PARSER_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter-$(PARSER_NAME).$(SOEXTVER) |
103 |
| - ln -sf libtree-sitter-$(PARSER_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter-$(PARSER_NAME).$(SOEXTVER_MAJOR) |
104 |
| - ln -sf libtree-sitter-$(PARSER_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter-$(PARSER_NAME).$(SOEXT) |
105 |
| - install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter |
106 |
| - install -m644 bindings/c/$(PARSER_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/ |
107 |
| - install -d '$(DESTDIR)$(PCLIBDIR)' |
108 |
| - install -m644 bindings/c/tree-sitter-$(PARSER_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/ |
| 72 | + install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)' |
| 73 | + install -m644 bindings/c/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h |
| 74 | + install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc |
| 75 | + install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a |
| 76 | + install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) |
| 77 | + ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) |
| 78 | + ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) |
| 79 | + |
| 80 | +uninstall: |
| 81 | + $(RM) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a \ |
| 82 | + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) \ |
| 83 | + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) \ |
| 84 | + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) \ |
| 85 | + '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h \ |
| 86 | + '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc |
109 | 87 |
|
110 | 88 | clean:
|
111 |
| - rm -f $(OBJ) libtree-sitter-$(PARSER_NAME).a libtree-sitter-$(PARSER_NAME).$(SOEXT) libtree-sitter-$(PARSER_NAME).$(SOEXTVER_MAJOR) libtree-sitter-$(PARSER_NAME).$(SOEXTVER) |
112 |
| - rm -f bindings/c/$(PARSER_NAME).h bindings/c/tree-sitter-$(PARSER_NAME).pc |
| 89 | + $(RM) $(OBJS) $(LANGUAGE_NAME).pc lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) |
| 90 | + |
| 91 | +test: |
| 92 | + $(TS) test |
113 | 93 |
|
114 |
| -.PHONY: all install clean |
| 94 | +.PHONY: all install uninstall clean test |
0 commit comments