|
1 | 1 | include ../common/init.mk |
2 | | -include $M/graalvm.mk |
3 | | -include $M/lein.mk |
| 2 | +include $M/gloat.mk |
4 | 3 | include ../common/common.mk |
5 | | -include ../common/native.mk |
6 | 4 |
|
7 | 5 | MAKES-CLEAN := \ |
8 | | - target \ |
9 | | - .lein-* \ |
10 | | - src/libyamlstar/*.class \ |
11 | | - |
12 | | -MAKES-REALCLEAN := \ |
13 | 6 | lib \ |
14 | 7 |
|
15 | 8 | # Library paths and names |
16 | | -API-VERSION := 0 |
17 | | - |
18 | | -# JAR files still use -SNAPSHOT (from project.clj) |
19 | | -# but .so files use clean version |
20 | 9 | LIB-DIR := lib |
21 | 10 | LIB-NAME := $(LIB-DIR)/libyamlstar |
22 | 11 | LIB-SO := $(LIB-NAME).$(SO) |
23 | | -LIB-SO-VERSIONED := $(LIB-NAME).$(SO).$(LIBYAMLSTAR-VERSION) |
24 | | -LIB-JAR := target/libyamlstar-$(LIBYAMLSTAR-VERSION)-SNAPSHOT-standalone.jar |
| 12 | +LIB-HEADER := $(LIB-NAME).h |
25 | 13 |
|
26 | | -# Core dependency jar in local maven repository |
27 | | -CORE-JAR := $(MAVEN-REPOSITORY)/yamlstar/core/$(LIBYAMLSTAR-VERSION)-SNAPSHOT/core-$(LIBYAMLSTAR-VERSION)-SNAPSHOT.jar |
| 14 | +CORE-YAMLSTAR := ../core/src/yamlstar |
28 | 15 |
|
29 | | -# Header files generated by native-image --shared |
30 | | -LIB-HEADERS := \ |
31 | | - $(LIB-DIR)/graal_isolate.h \ |
32 | | - $(LIB-NAME).h \ |
| 16 | +# Clojure source files compiled by gloat (order matters for namespaces) |
| 17 | +GLOAT-SRCS := \ |
| 18 | + $(CORE-YAMLSTAR)/parser/prelude.clj \ |
| 19 | + $(CORE-YAMLSTAR)/parser/parser.clj \ |
| 20 | + $(CORE-YAMLSTAR)/parser/receiver.clj \ |
| 21 | + $(CORE-YAMLSTAR)/parser/grammar.clj \ |
| 22 | + $(CORE-YAMLSTAR)/parser.clj \ |
| 23 | + $(CORE-YAMLSTAR)/composer.clj \ |
| 24 | + $(CORE-YAMLSTAR)/resolver.clj \ |
| 25 | + $(CORE-YAMLSTAR)/constructor.clj \ |
| 26 | + $(CORE-YAMLSTAR)/core.clj \ |
| 27 | + src/libyamlstar.clj \ |
33 | 28 |
|
34 | 29 |
|
35 | 30 | build: $(LIB-SO) |
36 | 31 |
|
37 | 32 | test: |
38 | 33 |
|
39 | | -jar: $(LIB-JAR) |
40 | | - |
41 | 34 | install: $(LIB-SO) |
42 | | - mkdir -p $(PREFIX)/include/ |
43 | | - install -m 644 $(LIB-HEADERS) $(PREFIX)/include/ |
44 | 35 | mkdir -p $(PREFIX)/lib/ |
45 | | - install -m 644 $(LIB-SO-VERSIONED) $(PREFIX)/lib/ |
46 | | - ln -sf $(notdir $(LIB-SO-VERSIONED)) $(PREFIX)/lib/$(notdir $(LIB-SO)) |
47 | | - ln -sf $(notdir $(LIB-SO-VERSIONED)) $(PREFIX)/lib/$(notdir $(LIB-SO)).$(API-VERSION) |
| 36 | + install -m 644 $(LIB-SO) $(PREFIX)/lib/ |
| 37 | + install -m 644 $(LIB-HEADER) $(PREFIX)/include/ 2>/dev/null || true |
48 | 38 |
|
49 | | -$(CORE-JAR): |
50 | | - $(MAKE) -C ../core install |
51 | | - |
52 | | -$(LIB-JAR): $(CORE-JAR) $(LEIN) |
53 | | - lein uberjar |
54 | | - |
55 | | -$(LIB-SO): $(LIB-JAR) $(REFLECTION-JSON) $(GRAALVM) |
56 | | - @echo "Building shared library..." |
| 39 | +$(LIB-SO): $(GLOAT-SRCS) | $(GLOAT-DIR) |
| 40 | + @echo "Building shared library with gloat..." |
57 | 41 | mkdir -p $(LIB-DIR) |
58 | | - $(GRAALVM) \ |
59 | | - $(NATIVE-OPTS) \ |
60 | | - --shared \ |
61 | | - -jar $< \ |
62 | | - -o $(LIB-NAME) |
63 | | - mv $(LIB-SO) $(LIB-SO-VERSIONED) |
64 | | - ln -sf $(notdir $(LIB-SO-VERSIONED)) $(LIB-SO) |
65 | | - ln -sf $(notdir $(LIB-SO-VERSIONED)) $(LIB-SO).$(API-VERSION) |
66 | | - @echo "Shared library created at: $(LIB-SO)" |
67 | | - @echo "Headers: $(LIB-HEADERS)" |
68 | | - |
69 | | -# Declare that these files are created as side effects of building $(LIB-SO) |
70 | | -$(LIB-SO-VERSIONED): $(LIB-SO) |
71 | | -$(LIB-NAME).h: $(LIB-SO) |
72 | | -$(LIB-DIR)/graal_isolate.h: $(LIB-SO) |
| 42 | + env -u GOROOT $(GLOAT-BIN)/gloat $(GLOAT-SRCS) -o $@ |
| 43 | + @echo "Shared library created at: $@" |
0 commit comments