gdp / lang / java / makefile @ master
History | View | Annotate | Download (10.4 KB)
1 |
# Makefile org.terraswarm Global Data Plane sources |
---|---|
2 |
# |
3 |
# @Version: $Id: makefile 72425 2015-05-27 21:01:46Z cxh $ |
4 |
# @Author: Christopher Brooks |
5 |
# |
6 |
# @Copyright (c) 2014-2016 The Regents of the University of California. |
7 |
# All rights reserved. |
8 |
# |
9 |
# Permission is hereby granted, without written agreement and without |
10 |
# license or royalty fees, to use, copy, modify, and distribute this |
11 |
# software and its documentation for any purpose, provided that the |
12 |
# above copyright notice and the following two paragraphs appear in all |
13 |
# copies of this software. |
14 |
# |
15 |
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY |
16 |
# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES |
17 |
# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF |
18 |
# THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF |
19 |
# SUCH DAMAGE. |
20 |
# |
21 |
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, |
22 |
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
23 |
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE |
24 |
# PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF |
25 |
# CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, |
26 |
# ENHANCEMENTS, OR MODIFICATIONS. |
27 |
# |
28 |
# PT_COPYRIGHT_VERSION_2 |
29 |
# COPYRIGHTENDKEY |
30 |
########################################################################## |
31 |
|
32 |
# To update the GDP version, see ../../gdp/gdp_version.h |
33 |
# |
34 |
# If you change the GDP version, see the instructions in package.html |
35 |
# |
36 |
GDPLIBMAJVER=2 |
37 |
GDPLIBMINVER=1 |
38 |
GDP_PATCH_VERSION=2 |
39 |
|
40 |
GDP_MAJOR_MINOR_VERSION=$(GDPLIBMAJVER).$(GDPLIBMINVER) |
41 |
|
42 |
all: jclass |
43 |
|
44 |
# JNA will look for the GDP shared library in the classpath. |
45 |
|
46 |
# https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md |
47 |
# says that JNA will look in os-arch/library, where os-arch is JNA's |
48 |
# canonical prefix for the platform. The shared library is |
49 |
# automatically extracted. |
50 |
|
51 |
|
52 |
GDP_JAR=gdp-$(GDP_MAJOR_MINOR_VERSION)-$(GDP_PATCH_VERSION).jar |
53 |
# The format of the gdp library version must be the same on all |
54 |
# platforms. See org/terraswarm/gdp/GdpNLibrary.java, where N is the |
55 |
# version number. |
56 |
DARWIN_LIB=libgdp.$(GDP_MAJOR_MINOR_VERSION).dylib |
57 |
LINUX_LIB=libgdp.$(GDP_MAJOR_MINOR_VERSION).so |
58 |
LINUX_LIB2=libgdp.so$($(GDP_MAJOR_MINOR_VERSION) |
59 |
LINUX_DASH_LIB=libgdp-$(GDP_MAJOR_MINOR_VERSION).so |
60 |
|
61 |
install: all darwin/$(DARWIN_LIB) linux-x86-64-rhel/$(LINUX_LIB) linux-x86-64/$(LINUX_LIB) |
62 |
jar cf $(GDP_JAR) org/terraswarm/gdp/*.class darwin linux-x86-64-rhel linux-x86-64 |
63 |
|
64 |
darwin/$(DARWIN_LIB): |
65 |
if [ ! -d darwin ]; then mkdir darwin; fi |
66 |
if [ -f ../../libs/$(DARWIN_LIB) ]; then \ |
67 |
echo "Copying ../../libs/$(DARWIN_LIB) to $@"; \ |
68 |
cp ../../libs/$(DARWIN_LIB) $@; \ |
69 |
else \ |
70 |
if [ -f $(PTII)/lib/$(DARWIN_LIB) ]; then \ |
71 |
echo "Copying $(PTII)/lib/$(DARWIN_LIB) to $@"; \ |
72 |
cp $(PTII)/lib/$(DARWIN_LIB) $@; \ |
73 |
else \ |
74 |
echo "Could not find the Darwin GDP shared library, so the jar file will not contain it."; \ |
75 |
fi \ |
76 |
fi |
77 |
|
78 |
linux-x86-64-rhel/$(LINUX_LIB): |
79 |
if [ ! -d linux-x86-64-rhel ]; then mkdir linux-x86-64-rhel; fi |
80 |
if [ -f /etc/redhat-release -a -f ../../libs/$(LINUX_DASH_LIB) ]; then \ |
81 |
echo "Copying ../../libs/$(LINUX_DASH_LIB) to $@"; \ |
82 |
cp ../../libs/$(LINUX_DASH_LIB) $@; \ |
83 |
else \ |
84 |
if [ -f $(PTII)/lib/linux-x86-64-rhel/$(LINUX_LIB) ]; then \ |
85 |
echo "Copying $(PTII)/lib/linux-x86-64-rhel/$(LINUX_LIB) to $@"; \ |
86 |
cp $(PTII)/lib/linux-x86-64-rhel/$(LINUX_LIB) $@; \ |
87 |
else \ |
88 |
echo "Could not find the Linux GDP RHEL shared library, so the jar file will not contain it."; \ |
89 |
fi \ |
90 |
fi |
91 |
|
92 |
linux-x86-64/$(LINUX_LIB): |
93 |
if [ ! -d linux-x86-64 ]; then mkdir linux-x86-64; fi |
94 |
if [ ! -f /etc/redhat-release -a -f ../../libs/$(LINUX_LIB2) ]; then \ |
95 |
echo "Copying ../../libs/$(LINUX_LIB2) to $@"; \ |
96 |
cp ../../libs/$(LINUX_LIB2) $@; \ |
97 |
else \ |
98 |
if [ -f $(PTII)/lib/$(LINUX_LIB) ]; then \ |
99 |
echo "Copying $(PTII)/lib/$(LINUX_LIB) to $@"; \ |
100 |
cp $(PTII)/lib/$(LINUX_LIB) $@; \ |
101 |
else \ |
102 |
echo "Could not find the Linux GDP non-RHEL shared library, so the jar file will not contain it."; \ |
103 |
fi \ |
104 |
fi |
105 |
|
106 |
############################## |
107 |
JNA_JAR = jna-4.2.2.jar |
108 |
JNAERATOR_VERSION = 0.12 |
109 |
JNAERATOR_JAR = jnaerator-$(JNAERATOR_VERSION)-shaded.jar |
110 |
JNAERATOR_RUNTIME_JAR = jnaerator-runtime-$(JNAERATOR_VERSION).jar |
111 |
|
112 |
BUILD_JARS=$(JNA_JAR) $(JNAERATOR_JAR) $(JNAERATOR_RUNTIME_JAR) |
113 |
|
114 |
### Download required files. If there is an updated version of these, it needs |
115 |
### to be manually updated. |
116 |
|
117 |
$(JNA_JAR): |
118 |
echo "Fetching $@ from maven repositories. If this fails, you might have to update paths and such."; \ |
119 |
wget 'https://repo1.maven.org/maven2/net/java/dev/jna/jna/4.2.2/$@' -O $@; \ |
120 |
status=$$?; \ |
121 |
if [ $$status -ne 0 ]; then \ |
122 |
echo "Failed to get $@ from maven.java.net."; \ |
123 |
fi |
124 |
|
125 |
$(JNAERATOR_JAR): |
126 |
echo "Fetching $@ from maven repositories. If this fails, you might have to update paths and such."; \ |
127 |
wget 'https://repo1.maven.org/maven2/com/nativelibs4java/jnaerator/$(JNAERATOR_VERSION)/$@' -O $@; \ |
128 |
status=$$?; \ |
129 |
if [ $$status -ne 0 ]; then \ |
130 |
echo "Failed to get $@ from maven.java.net."; \ |
131 |
fi |
132 |
|
133 |
$(JNAERATOR_RUNTIME_JAR): |
134 |
echo "Fetching $@ from maven repositories. If this fails, you might have to update paths and such."; \ |
135 |
wget 'https://repo1.maven.org/maven2/com/nativelibs4java/jnaerator-runtime/$(JNAERATOR_VERSION)/$@' -O $@; \ |
136 |
status=$$?; \ |
137 |
if [ $$status -ne 0 ]; then \ |
138 |
echo "Failed to get $@ from maven.java.net."; \ |
139 |
fi |
140 |
|
141 |
|
142 |
############################## |
143 |
|
144 |
## Header files that we need to interpret the compiled library |
145 |
## Apparently -I has no effect on JNA, and it fails to find event2/buffer.h |
146 |
## from the system default paths |
147 |
|
148 |
|
149 |
ROOT = ../.. |
150 |
GDP_SRC = $(ROOT) |
151 |
EVENT_HDRS = $(shell if [ -e /usr/include/event2/buffer.h ]; then echo /usr/include; \ |
152 |
elif [ -e /usr/local/include/event2/buffer.h ]; then echo /usr/local/include; \ |
153 |
elif [ -e /opt/local/include/event2/buffer.h ]; then echo /opt/local/include; \ |
154 |
else echo unknown; fi ) |
155 |
PWD = $(ROOT)/lang/java/ |
156 |
|
157 |
GDP_H_FILES = \ |
158 |
$(GDP_SRC)/gdp/gdp.h \ |
159 |
$(GDP_SRC)/gdp/gdp_buf.h \ |
160 |
$(GDP_SRC)/ep/ep.h \ |
161 |
$(GDP_SRC)/ep/ep_dbg.h \ |
162 |
$(GDP_SRC)/ep/ep_thr.h |
163 |
|
164 |
LIBEVENT_H_FILES = \ |
165 |
$(EVENT_HDRS)/event2/buffer.h |
166 |
|
167 |
|
168 |
### Auto-generating java files |
169 |
|
170 |
# We define gdp_datum_t and gdp_datum as void * so that JNAerator does not generate gdp_datum.java, which would refer to pthreads. |
171 |
jna: $(JNAERATOR_JAR) $(JNAERATOR_RUNTIME_JAR) $(GDP_H_FILES) $(LIBEVENT_H_FILES) |
172 |
java -jar $(JNAERATOR_JAR) -runtime JNA -f \ |
173 |
-Dgdp_datum_t="void *" -Dgdp_datum="void *" \ |
174 |
-library gdp.$(GDP_MAJOR_MINOR_VERSION) -I ../../gdp -I ../.. \ |
175 |
$(GDP_H_FILES) $(LIBEVENT_H_FILES) \ |
176 |
-o . -library event2 -I/usr/include -I/usr/local/include \ |
177 |
-package org.terraswarm.gdp -v -noJar -noComp |
178 |
# Fix up NativeSize. We want our included version of NativeSize be used, instead of JNAerator's version: |
179 |
# We use sed -i here, which varies between Mac OS X and RHEL. However calling sed twice like this works. |
180 |
for file in org/terraswarm/gdp/*.java org/terraswarm/gdp/*/*.java; do \ |
181 |
echo "Fixing $$file"; \ |
182 |
sed -i -e "s@Gdp[0-9]*Library@Gdp${GDPLIBMAJVER}${GDPLIBMINVER}Library@" $$file; \ |
183 |
sed -i -e 's@com.ochafik.lang.jnaerator.runtime.NativeSize@org.terraswarm.gdp.NativeSize@' $$file; \ |
184 |
done |
185 |
# Empty target. See https://www.gnu.org/software/make/manual/html_node/Empty-Targets.html |
186 |
touch jna |
187 |
|
188 |
|
189 |
### Compiling .java files to .class files |
190 |
|
191 |
JSRCS_LIB = $(wildcard org/terraswarm/gdp/*.java) |
192 |
JSRCS_APPS = $(wildcard org/terraswarm/gdp/apps/*.java) |
193 |
JSRCS = $(JSRCS_LIB) $(JSRCS_APPS) |
194 |
|
195 |
# Java rules |
196 |
CLASSPATH = $(JNA_JAR):$(JNAERATOR_RUNTIME_JAR):$(PWD) |
197 |
|
198 |
JAVAC = javac |
199 |
# JFLAGS = -Xlint:deprecation |
200 |
|
201 |
.SUFFIXES: .class .java |
202 |
.java.class: |
203 |
CLASSPATH="$(CLASSPATH):$(PWD)" "$(JAVAC)" $(JFLAGS) $< |
204 |
|
205 |
JCLASS = $(JSRCS:%.java=%.class) |
206 |
|
207 |
jclass: jna $(JNA_JAR) $(JSRCS) $(JCLASS) |
208 |
|
209 |
|
210 |
### apps |
211 |
|
212 |
JAVA = java |
213 |
LOG_NAME = logjava # You probably want to override this on command-line. |
214 |
LOGD_NAME = docker.gdplogd # You probably want to override this on command-line. |
215 |
KEYFILE = non-existent.pem # You probably want to override this on command-line. |
216 |
|
217 |
runCreateTest: all |
218 |
DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.CreateTest $(LOG_NAME) $(LOGD_NAME) |
219 |
runCreateTestWithKey: all |
220 |
DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.CreateTestWithKey $(LOG_NAME) $(KEYFILE) $(LOGD_NAME) |
221 |
runNameTest: all |
222 |
DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.NameTest |
223 |
runHelloWorld: all |
224 |
DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.HelloWorld $(LOG_NAME) |
225 |
runReaderTestSubscribe: all |
226 |
DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.ReaderTestSubscribe $(LOG_NAME) |
227 |
|
228 |
# |
229 |
#runReaderTest: org/terraswarm/gdp/apps/ReaderTest.class |
230 |
# DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.ReaderTest $(LOG_NAME) |
231 |
# |
232 |
#runReaderTestPtIILib: org/terraswarm/gdp/apps/ReaderTest.class |
233 |
# DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.ReaderTest $(LOG_NAME) |
234 |
# |
235 |
#runReaderTestSubscriber: org/terraswarm/gdp/apps/ReaderTest.class |
236 |
# DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.ReaderTest -s $(LOG_NAME) |
237 |
# |
238 |
#runWriterTest: org/terraswarm/gdp/apps/WriterTest.class |
239 |
# DYLD_LIBRARY_PATH=$(GDP_SRC)/libs LD_LIBRARY_PATH=$(GDP_SRC)/libs $(JAVA) -Djna.debug_load=true -Djna.dump_memory=true -classpath $(CLASSPATH) org.terraswarm.gdp.apps.WriterTest $(LOG_NAME) |
240 |
# |
241 |
|
242 |
### |
243 |
|
244 |
clean: |
245 |
cp org/terraswarm/gdp/EP_CRYPTO_KEY.java /tmp/EP_CRYPTO_KEY.java ; rm -f jna _* org/terraswarm/gdp/*.class org/terraswarm/gdp/EP* org/terraswarm/gdp/e* org/terraswarm/gdp/*Library.java org/terraswarm/gdp/apps/*.class $(GDP_JAR).jar ; mv /tmp/EP_CRYPTO_KEY.java org/terraswarm/gdp/. |
246 |
rm -rf darwin linux-x86-64-rhel linux-x86-64 |
247 |
@echo "Run 'make distclean' to remove $(BUILD_JARS)" |
248 |
|
249 |
distclean: clean |
250 |
rm -f *.jar |