Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,15 @@ xa-all: $(PACKAGES) $(XA_INTEGRATION_OUTPUTS)

run-all-tests: run-tests run-test-jnimarshal run-test-generator-core run-ptests

prepare:: prepare-external
include build-tools/scripts/msbuild.mk

prepare:: prepare-bootstrap prepare-external

prepare-bootstrap: bin/Build$(CONFIGURATION)/Java.Interop.BootstrapTasks.dll

bin/Build$(CONFIGURATION)/Java.Interop.BootstrapTasks.dll: src/Java.Interop.BootstrapTasks/Java.Interop.BootstrapTasks.csproj \
$(wildcard src/Java.Interop.BootstrapTasks/Java.Interop.BootstrapTasks/*.cs)
$(MSBUILD) $(MSBUILD_FLAGS) src/Java.Interop.BootstrapTasks/Java.Interop.BootstrapTasks.csproj

prepare-external: $(PACKAGES) $(NUNIT_CONSOLE)
git submodule update --init --recursive
Expand All @@ -65,7 +73,6 @@ clean:

include build-tools/scripts/mono.mk
include build-tools/scripts/jdk.mk
include build-tools/scripts/msbuild.mk

$(PACKAGES) $(NUNIT_CONSOLE):
nuget restore
Expand Down
8 changes: 6 additions & 2 deletions build-tools/scripts/PrepareWindows.targets
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,12 @@
DestinationFiles="$(_NuGet)"
/>
<Exec Command="$(_NuGet) restore Java.Interop.sln" WorkingDirectory="$(_TopDir)" />
<JdkInfo Output="$(_TopDir)\bin\Build$(Configuration)\JdkInfo.props">
<Output TaskParameter="JavaSdkDirectory" PropertyName="_JavaSdkDirectory" />
<JdkInfo
JdksRoot="$(ProgramFiles)\Java"
MakeFragmentFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\JdkInfo.mk"
MaximumJdkVersion="$(JI_MAX_MDK)"
PropertyFile="$(_TopDir)\bin\Build$(Configuration)\JdkInfo.props">
<Output TaskParameter="JavaHomePath" PropertyName="_JavaSdkDirectory" />
</JdkInfo>
</Target>
</Project>
157 changes: 11 additions & 146 deletions build-tools/scripts/jdk.mk
Original file line number Diff line number Diff line change
Expand Up @@ -26,157 +26,22 @@
# Location of the JDK `/bin` directory, which contains `java/`javac`/etc.

OS ?= $(shell uname)
JI_JAVAC_PATH = javac
JI_JAR_PATH = jar

JI_JDK_BIN_PATH = $(dir $(shell which java))
_INCLUDE_MK = bin/Build$(CONFIGURATION)/JdkInfo.mk

prepare:: $(_INCLUDE_MK)

# Filter on <= JI_MAX_JDK
ifneq ($(JI_MAX_JDK),)
_VERSION_MAX := | awk '$$1 <= $(JI_MAX_JDK)'
endif #JI_MAX_JDK

# Sort numerically on version numbers with `sort -n`, filtering on $(JI_MAX_JDK) if needed
# Replace each line so it starts with a number (sed 's/...'\1 &/), sort on the leading number, then remove the leading number.
# Grab the last path name printed.
_VERSION_SORT := sed 's/[^0-9]*\([0-9.]*\)/\1 &/' $(_VERSION_MAX) | sort -n | sed 's/^[0-9.]* //g' | tail -1
-include $(_INCLUDE_MK)

ifeq ($(OS),Darwin)

_MONO_BITNESS = $(shell file `which $(word 1, $(RUNTIME))` | awk 'BEGIN { val = "32-bit" } /64-bit/ { val = "64-bit" } END { print val; }')

ifeq ($(_MONO_BITNESS),32-bit)
# The only 32-bit JVM I know of is the Apple-provided one.
JI_JVM_PATH = /System/Library/Frameworks/JavaVM.framework/JavaVM
endif # 32-bit

# Darwin supports three possible search locations:
#
# 1. `/Library/Java/JavaVirtualMachines/jdk*`
# These are where 3rd party JDKs are installed, such as the Oracle JDK.
# This is the preferred search directory.
#
# 2. The Xcode.app MacOSX.platform SDK, which is for the ancient JDK6 that
# continues to be available
#
# 3. A "locally" hosted .pkg, in case Xcode.app isn't installed.

_DARWIN_JDK_FALLBACK_DIRS = $(wildcard /Library/Java/JavaVirtualMachines/jdk*)
_DARWIN_JDK_JNI_INCLUDE_DIR = Contents/Home/include
_DARWIN_JDK_JNI_OS_INCLUDE_DIR = $(_DARWIN_JDK_JNI_INCLUDE_DIR)/darwin

_XCODE_APP_JAVAVM_FRAMEWORK_PATH = \
$(word 1, $(wildcard /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX*.sdk/System/Library/Frameworks/JavaVM.framework/Headers))


_LOCAL_JDK_PKG = JavaDeveloper-2013005_dp__11m4609.pkg
_LOCAL_JDK_URL = http://storage.bos.xamarin.com/android-sdk-tool/archives/$(FALLBACK_JDK_PKG)
_LOCAL_JDK_HEADERS = LocalJDK/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers

# Ancient source for (3)
_APPLE_JDK6_URL = http://adcdownload.apple.com/Developer_Tools/java_for_os_x_2013005_developer_package/java_for_os_x_2013005_dp__11m4609.dmg

ifneq ($(_DARWIN_JDK_FALLBACK_DIRS),)
_DARWIN_JDK_ROOT := $(shell ls -dtr $(_DARWIN_JDK_FALLBACK_DIRS) | $(_VERSION_SORT))
JI_JDK_BIN_PATH = $(_DARWIN_JDK_ROOT)/Contents/Home/bin
JI_JAVAC_PATH = $(_DARWIN_JDK_ROOT)/Contents/Home/bin/javac
JI_JAR_PATH = $(_DARWIN_JDK_ROOT)/Contents/Home/bin/jar
JI_JDK_INCLUDE_PATHS = \
$(_DARWIN_JDK_ROOT)/$(_DARWIN_JDK_JNI_INCLUDE_DIR) \
$(_DARWIN_JDK_ROOT)/$(_DARWIN_JDK_JNI_OS_INCLUDE_DIR)

ifeq ($(_MONO_BITNESS),64-bit)
JI_JVM_PATH = $(shell find $(_DARWIN_JDK_ROOT)/Contents/Home -name libjli.dylib)
endif # 64-bit

else # (1) failed; try Xcode.app's copy?
ifneq ($(_XCODE_APP_JAVAVM_FRAMEWORK_PATH),)
JI_JDK_INCLUDE_PATHS = $(_XCODE_APP_JAVAVM_FRAMEWORK_PATH)
else # (2) failed; hail mary pass!
JI_JDK_INCLUDE_PATHS = LocalJDK/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers

bin/Build$(CONFIGURATION)/JdkHeaders.props: $(JI_JDK_INCLUDE_PATHS)/jni.h

$(JI_JDK_INCLUDE_PATHS)/jni.h:
@if [ ! -f $(_LOCAL_JDK_PKG) ]; then \
curl -o $(_LOCAL_JDK_PKG) $(_LOCAL_JDK_URL) ; \
fi
-mkdir LocalJDK
_jdk="$$(cd `dirname "$(_LOCAL_JDK_PKG)"`; pwd)/`basename "$(_LOCAL_JDK_PKG)"`" ; \
(cd LocalJDK; xar -xf $$_jdk)
(cd LocalJDK; gunzip -c JavaEssentialsDev.pkg/Payload | cpio -i)
endif # (3)
endif # (1)

endif # Darwin

_JDKS_ROOT := /Library/Java/JavaVirtualMachines
endif # $(OS)=Darwin

ifeq ($(OS),Linux)
_JDKS_ROOT := /usr/lib/jvm
endif # $(OS)=Linux

# This is for all linux distributions with which and java installed
_DEFAULT_LINUX_JAVA_ROOT = $(shell java -XshowSettings:properties -help 2>&1 | grep java.home | sed 's/^.*java.home = //g')/../
_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)
_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) | $(_VERSION_SORT))
_DESKTOP_JAVA_INCLUDE_DIRS = $(LATEST_JDK)/$(_LINUX_JAVA_JNI_INCLUDE_DIR)
_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)

JI_JDK_BIN_PATH = $(_LINUX_JAVA_ROOT)/bin
JI_JAVAC_PATH = $(_LINUX_JAVA_ROOT)/bin/javac
JI_JAR_PATH = $(_LINUX_JAVA_ROOT)/bin/jar

endif # Linux

$(JI_JVM_PATH):
@echo "error: No JVM found\!";
@exit 1

bin/Build$(CONFIGURATION)/JdkInfo.props: $(JI_JDK_INCLUDE_PATHS) $(JI_JVM_PATH)
-mkdir -p `dirname "$@"`
-rm "$@"
echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' > "$@"
echo ' <Choose>' >> "$@"
echo " <When Condition=\" '\$$(JdkJvmPath)' == '' \">" >> "$@"
echo ' <PropertyGroup>' >> "$@"
echo " <JdkJvmPath>$(JI_JVM_PATH)</JdkJvmPath>" >> "$@"
echo ' </PropertyGroup>' >> "$@"
echo ' <ItemGroup>' >> "$@"
for p in $(JI_JDK_INCLUDE_PATHS); do \
echo " <JdkIncludePath Include=\"$$p\" />" >> "$@"; \
done
echo ' </ItemGroup>' >> "$@"
echo ' </When>' >> "$@"
echo ' </Choose>' >> "$@"
echo ' <PropertyGroup>' >> "$@"
echo " <JdkBinPath Condition=\" '\$$(JdkBinPath)' == '' \">$(JI_JDK_BIN_PATH)</JdkBinPath>" >> "$@"
echo " <JavaCPath Condition=\" '\$$(JavaCPath)' == '' \">$(JI_JAVAC_PATH)</JavaCPath>" >> "$@"
echo " <JarPath Condition=\" '\$$(JarPath)' == '' \">$(JI_JAR_PATH)</JarPath>" >> "$@"
echo ' </PropertyGroup>' >> "$@"
echo '</Project>' >> "$@"
$(_INCLUDE_MK): bin/Build$(CONFIGURATION)/Java.Interop.BootstrapTasks.dll
$(MSBUILD) $(MSBUILD_FLAGS) build-tools/scripts/jdk.targets /t:GetPreferredJdkRoot \
/p:JdksRoot="$(_JDKS_ROOT)" \
$(if $(JI_MAX_JDK),"/p:MaximumJdkVersion=$(JI_MAX_JDK)")
13 changes: 13 additions & 0 deletions build-tools/scripts/jdk.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="Java.Interop.BootstrapTasks.JdkInfo" AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\Java.Interop.BootstrapTasks.dll" />
<Target Name="GetPreferredJdkRoot">
<JdkInfo
JdksRoot="$(JdksRoot)"
MakeFragmentFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\JdkInfo.mk"
MaximumJdkVersion="$(MaximumJdkVersion)"
PropertyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\JdkInfo.props">
<Output TaskParameter="JavaHomePath" PropertyName="_JavaHome"/>
</JdkInfo>
</Target>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,17 @@
<Reference Include="System" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="Microsoft.Build.Framework" />
<Reference Include="Microsoft.Build.Utilities.v4.0" />
</ItemGroup>
<ItemGroup>
<Compile Include="Java.Interop.BootstrapTasks\DownloadUri.cs" />
<Compile Include="Java.Interop.BootstrapTasks\JdkInfo.cs" />
<Compile Include="Java.Interop.BootstrapTasks\OS.cs" />
<Compile Include="Java.Interop.BootstrapTasks\RegistryEx.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Java.Interop.BootstrapTasks\SetEnvironmentVariable.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
Loading