Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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