forked from yaml/yamlscript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
103 lines (89 loc) · 2.82 KB
/
Makefile
File metadata and controls
103 lines (89 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
include ../common/base.mk
include $(COMMON)/java.mk
include $(COMMON)/clojure.mk
include $(COMMON)/docker.mk
LIBYAMLSCRIPT_JAR_PATH := target/libyamlscript-$(YS_VERSION)-standalone.jar
LYS_SOURCES := \
src/libyamlscript/core.clj \
src/libyamlscript/API.java \
HEADERS := \
$(LIBRARY_PATH)/graal_isolate.h \
$(LIBYAMLSCRIPT_SO_NAME).$(YS_VERSION).h \
BUILD_TARGETS := \
$(LIBYAMLSCRIPT_SO_FQNP) \
$(HEADERS) \
# Avoid rebuild in ephemerally created Docker container.
ifdef DOCKERENV
ifneq (,$(wildcard $(LIBYAMLSCRIPT_SO_FQNP)))
LIBYAMLSCRIPT_JAR_PATH :=
endif
endif
#------------------------------------------------------------------------------
build:: $(BUILD_TARGETS)
jar: $(LIBYAMLSCRIPT_JAR_PATH)
install:: $(BUILD_TARGETS)
mkdir -p $(PREFIX)/include/
install -m 644 $(HEADERS) $(PREFIX)/include/
mkdir -p $(PREFIX)/lib/
install -m 644 $< $(PREFIX)/lib/
ln -fs $(notdir $<) $(PREFIX)/lib/$(notdir $(LIBYAMLSCRIPT_SO_BASE))
ln -fs $(notdir $<) $(PREFIX)/lib/$(notdir $(LIBYAMLSCRIPT_SO_APIP))
ln -fs $(notdir $<) $(PREFIX)/lib/$(notdir $(LIBYAMLSCRIPT_SO_VERS))
realclean::
$(RM) -r lib/
$(RM) src/libyamlscript/Core.class
test:: $(LIBYAMLSCRIPT_SO_FQNP)
ls -lh lib
repl-deps:: $(LIBYAMLSCRIPT_JAR_PATH)
$(LIBYAMLSCRIPT_SO_FQNP): $(JAVA_INSTALLED) $(LIBYAMLSCRIPT_JAR_PATH)
ifneq (true,$(LIBZ))
$(error *** The 'libz.$(SO)' library is required by native-image but not installed)
endif
mkdir -p $(dir $@)
# The next command may take a long time (a minute or so)
$(TIME) \
native-image \
-O$(GRAALVM_O) \
--verbose \
--native-image-info \
--no-fallback \
\
--initialize-at-build-time \
--enable-preview \
\
-H:ReflectionConfigurationFiles=reflection.json \
-H:+ReportExceptionStackTraces \
-H:IncludeResources=SCI_VERSION \
-H:Log=registerResource: \
-J-Dclojure.spec.skip-macros=true \
-J-Dclojure.compiler.direct-linking=true \
-J-Xmx3g \
\
--shared \
-jar $(LIBYAMLSCRIPT_JAR_PATH) \
-H:Name=$(LIBYAMLSCRIPT_SO_NAME)
mv $(LIBYAMLSCRIPT_SO_BASE) $@
mv $(LIBYAMLSCRIPT_SO_NAME).h $(LIBYAMLSCRIPT_SO_NAME).$(YS_VERSION).h
ln -fs $(notdir $@) $(LIBYAMLSCRIPT_SO_APIP)
ln -fs $(notdir $@) $(LIBYAMLSCRIPT_SO_VERS)
ln -fs $(notdir $@) $(LIBYAMLSCRIPT_SO_BASE)
ifeq (true,$(IS_ROOT))
$(LIBYAMLSCRIPT_JAR_PATH):
ifeq (true,$(IS_ROOT))
$(error *** YAMLScript 'make build' must be run as non-root user)
endif
else
$(LIBYAMLSCRIPT_JAR_PATH): $(LEIN) $(YAMLSCRIPT_CORE_INSTALLED) $(LYS_SOURCES)
$< uberjar
endif
Dockerfile:: $(COMMON) Makefile
cat \
$</docker-from-ubuntu.dockerfile \
$</docker-apt-base.dockerfile \
$</docker-useradd.dockerfile \
$</docker-apt-clojure.dockerfile \
$</docker-install-graalvm.dockerfile \
$</docker-copy-project-deps.dockerfile \
$</docker-deps-clojure.dockerfile \
$</docker-apt-dev.dockerfile \
> $@