Skip to content

Commit

Permalink
[build] Allow tests to run on Linux (#155)
Browse files Browse the repository at this point in the history
In order to do so we need to configure everything so that the
native `libjvm` is found by the runtime. This patch adds detection
logic as well as modifies the dllmap to work on Linux in addition
to macOS.
  • Loading branch information
grendello authored and jonpryor committed Jun 13, 2017
1 parent 57e9501 commit 43c0273
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 5 deletions.
4 changes: 3 additions & 1 deletion Makefile
Expand Up @@ -5,9 +5,11 @@ CONFIGURATION = Debug

ifeq ($(OS),Darwin)
NATIVE_EXT = .dylib
DLLMAP_OS_NAME = osx
endif
ifeq ($(OS),Linux)
NATIVE_EXT = .so
DLLMAP_OS_NAME = linux
endif

XA_CONFIGURATION = XAIntegrationDebug
Expand Down Expand Up @@ -70,7 +72,7 @@ $(PACKAGES) $(NUNIT_CONSOLE):

src/Java.Runtime.Environment/Java.Runtime.Environment.dll.config: src/Java.Runtime.Environment/Java.Runtime.Environment.dll.config.in \
bin/Build$(CONFIGURATION)/JdkInfo.props
sed 's#@JI_JVM_PATH@#$(JI_JVM_PATH)#g' < $< > $@
sed -e 's#@JI_JVM_PATH@#$(JI_JVM_PATH)#g' -e 's#@OS_NAME@#$(DLLMAP_OS_NAME)#g' < $< > $@

xa-fxcop: lib/gendarme-2.10/gendarme.exe bin/$(XA_CONFIGURATION)/Java.Interop.dll
$(RUNTIME) $< --html xa-gendarme.html $(if @(GENDARME_XML),--xml xa-gendarme.xml) --ignore gendarme-ignore.txt bin/$(XA_CONFIGURATION)/Java.Interop.dll
Expand Down
23 changes: 20 additions & 3 deletions build-tools/scripts/jdk.mk
Expand Up @@ -92,22 +92,39 @@ endif # Darwin
ifeq ($(OS),Linux)

# This is for Ubuntu and derivatives (possibly Debian too)
_DEFAULT_LINUX_JAVA_INCLUDE_DIRS = /usr/lib/jvm/default-java/include/
_DEFAULT_LINUX_JAVA_ROOT = /usr/lib/jvm/default-java
_DEFAULT_LINUX_JAVA_INCLUDE_DIRS = $(_DEFAULT_LINUX_JAVA_ROOT)/include/
_LINUX_JAVA_FALLBACK_DIRS = /usr/lib/jvm/java*
_LINUX_JAVA_JNI_INCLUDE_DIR = include
_LINUX_JAVA_ROOT = $(_DEFAULT_LINUX_JAVA_ROOT)
_LINUX_JAVA_ARCH_64 = amd64
_LINUX_JAVA_ARCH_32 = i386

_DESKTOP_JAVA_INCLUDE_DIRS = $(_DEFAULT_LINUX_JAVA_INCLUDE_DIRS)

ifeq ($(wildcard $(_DESKTOP_JAVA_INCLUDE_DIRS)),)
_DESKTOP_JAVA_INCLUDE_DIRS = $(wildcard $(JAVA_HOME)/include)
endif
_LINUX_JAVA_ROOT = $(JAVA_HOME)
endif # No default Java location, $JAVA_HOME check

ifeq ($(wildcard $(_DESKTOP_JAVA_INCLUDE_DIRS)),)
LATEST_JDK := $(shell ls -dtr $(_LINUX_JAVA_FALLBACK_DIRS) | sort | tail -1)
_DESKTOP_JAVA_INCLUDE_DIRS = $(LATEST_JDK)/$(_LINUX_JAVA_JNI_INCLUDE_DIR)
endif
_LINUX_JAVA_ROOT = $(LATEST_JDK)
endif # No $JAVA_HOME, find the latest version

JI_JDK_INCLUDE_PATHS = $(_DESKTOP_JAVA_INCLUDE_DIRS) $(_DESKTOP_JAVA_INCLUDE_DIRS)/linux

ifneq ($(wildcard $(_LINUX_JAVA_ROOT)/jre/lib/$(_LINUX_JAVA_ARCH_64)/server/libjvm.so),)
JI_JVM_PATH = $(_LINUX_JAVA_ROOT)/jre/lib/$(_LINUX_JAVA_ARCH_64)/server/libjvm.so
endif # Find 64-bit libjvm

ifeq ($(JI_JVM_PATH),) # (1) No 64-bit java arch
ifneq ($(wildcard $(_LINUX_JAVA_ROOT)/jre/lib/$(_LINUX_JAVA_ARCH_32)/server/libjvm.so),) # (2) check 32-bit instead, even on a 64-bit system
JI_JVM_PATH = $(_LINUX_JAVA_ROOT)/jre/lib/$(_LINUX_JAVA_ARCH_32)/server/libjvm.so
endif # (2)
endif # (1)

endif # Linux

$(JI_JVM_PATH):
Expand Down
@@ -1,3 +1,3 @@
<configuration>
<dllmap dll="jvm.dll" os="osx" target="@JI_JVM_PATH@"/>
<dllmap dll="jvm.dll" os="@OS_NAME@" target="@JI_JVM_PATH@"/>
</configuration>

0 comments on commit 43c0273

Please sign in to comment.