|
26 | 26 | # Location of the JDK `/bin` directory, which contains `java/`javac`/etc. |
27 | 27 |
|
28 | 28 | OS ?= $(shell uname) |
29 | | -JI_JAVAC_PATH = javac |
30 | | -JI_JAR_PATH = jar |
31 | 29 |
|
32 | | -JI_JDK_BIN_PATH = $(dir $(shell which java)) |
| 30 | +_INCLUDE_MK = bin/Build$(CONFIGURATION)/JdkInfo.mk |
33 | 31 |
|
| 32 | +prepare:: $(_INCLUDE_MK) |
34 | 33 |
|
35 | | -# Filter on <= JI_MAX_JDK |
36 | | -ifneq ($(JI_MAX_JDK),) |
37 | | -_VERSION_MAX := | awk '$$1 <= $(JI_MAX_JDK)' |
38 | | -endif #JI_MAX_JDK |
39 | | - |
40 | | -# Sort numerically on version numbers with `sort -n`, filtering on $(JI_MAX_JDK) if needed |
41 | | -# Replace each line so it starts with a number (sed 's/...'\1 &/), sort on the leading number, then remove the leading number. |
42 | | -# Grab the last path name printed. |
43 | | -_VERSION_SORT := sed 's/[^0-9]*\([0-9.]*\)/\1 &/' $(_VERSION_MAX) | sort -n | sed 's/^[0-9.]* //g' | tail -1 |
| 34 | +-include $(_INCLUDE_MK) |
44 | 35 |
|
45 | 36 | ifeq ($(OS),Darwin) |
46 | | - |
47 | | -_MONO_BITNESS = $(shell file `which $(word 1, $(RUNTIME))` | awk 'BEGIN { val = "32-bit" } /64-bit/ { val = "64-bit" } END { print val; }') |
48 | | - |
49 | | -ifeq ($(_MONO_BITNESS),32-bit) |
50 | | -# The only 32-bit JVM I know of is the Apple-provided one. |
51 | | -JI_JVM_PATH = /System/Library/Frameworks/JavaVM.framework/JavaVM |
52 | | -endif # 32-bit |
53 | | - |
54 | | -# Darwin supports three possible search locations: |
55 | | -# |
56 | | -# 1. `/Library/Java/JavaVirtualMachines/jdk*` |
57 | | -# These are where 3rd party JDKs are installed, such as the Oracle JDK. |
58 | | -# This is the preferred search directory. |
59 | | -# |
60 | | -# 2. The Xcode.app MacOSX.platform SDK, which is for the ancient JDK6 that |
61 | | -# continues to be available |
62 | | -# |
63 | | -# 3. A "locally" hosted .pkg, in case Xcode.app isn't installed. |
64 | | - |
65 | | -_DARWIN_JDK_FALLBACK_DIRS = $(wildcard /Library/Java/JavaVirtualMachines/jdk*) |
66 | | -_DARWIN_JDK_JNI_INCLUDE_DIR = Contents/Home/include |
67 | | -_DARWIN_JDK_JNI_OS_INCLUDE_DIR = $(_DARWIN_JDK_JNI_INCLUDE_DIR)/darwin |
68 | | - |
69 | | -_XCODE_APP_JAVAVM_FRAMEWORK_PATH = \ |
70 | | - $(word 1, $(wildcard /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX*.sdk/System/Library/Frameworks/JavaVM.framework/Headers)) |
71 | | - |
72 | | - |
73 | | -_LOCAL_JDK_PKG = JavaDeveloper-2013005_dp__11m4609.pkg |
74 | | -_LOCAL_JDK_URL = http://storage.bos.xamarin.com/android-sdk-tool/archives/$(FALLBACK_JDK_PKG) |
75 | | -_LOCAL_JDK_HEADERS = LocalJDK/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers |
76 | | - |
77 | | -# Ancient source for (3) |
78 | | -_APPLE_JDK6_URL = http://adcdownload.apple.com/Developer_Tools/java_for_os_x_2013005_developer_package/java_for_os_x_2013005_dp__11m4609.dmg |
79 | | - |
80 | | -ifneq ($(_DARWIN_JDK_FALLBACK_DIRS),) |
81 | | -_DARWIN_JDK_ROOT := $(shell ls -dtr $(_DARWIN_JDK_FALLBACK_DIRS) | $(_VERSION_SORT)) |
82 | | -JI_JDK_BIN_PATH = $(_DARWIN_JDK_ROOT)/Contents/Home/bin |
83 | | -JI_JAVAC_PATH = $(_DARWIN_JDK_ROOT)/Contents/Home/bin/javac |
84 | | -JI_JAR_PATH = $(_DARWIN_JDK_ROOT)/Contents/Home/bin/jar |
85 | | -JI_JDK_INCLUDE_PATHS = \ |
86 | | - $(_DARWIN_JDK_ROOT)/$(_DARWIN_JDK_JNI_INCLUDE_DIR) \ |
87 | | - $(_DARWIN_JDK_ROOT)/$(_DARWIN_JDK_JNI_OS_INCLUDE_DIR) |
88 | | - |
89 | | -ifeq ($(_MONO_BITNESS),64-bit) |
90 | | -JI_JVM_PATH = $(shell find $(_DARWIN_JDK_ROOT)/Contents/Home -name libjli.dylib) |
91 | | -endif # 64-bit |
92 | | - |
93 | | -else # (1) failed; try Xcode.app's copy? |
94 | | -ifneq ($(_XCODE_APP_JAVAVM_FRAMEWORK_PATH),) |
95 | | -JI_JDK_INCLUDE_PATHS = $(_XCODE_APP_JAVAVM_FRAMEWORK_PATH) |
96 | | -else # (2) failed; hail mary pass! |
97 | | -JI_JDK_INCLUDE_PATHS = LocalJDK/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers |
98 | | - |
99 | | -bin/Build$(CONFIGURATION)/JdkHeaders.props: $(JI_JDK_INCLUDE_PATHS)/jni.h |
100 | | - |
101 | | -$(JI_JDK_INCLUDE_PATHS)/jni.h: |
102 | | - @if [ ! -f $(_LOCAL_JDK_PKG) ]; then \ |
103 | | - curl -o $(_LOCAL_JDK_PKG) $(_LOCAL_JDK_URL) ; \ |
104 | | - fi |
105 | | - -mkdir LocalJDK |
106 | | - _jdk="$$(cd `dirname "$(_LOCAL_JDK_PKG)"`; pwd)/`basename "$(_LOCAL_JDK_PKG)"`" ; \ |
107 | | - (cd LocalJDK; xar -xf $$_jdk) |
108 | | - (cd LocalJDK; gunzip -c JavaEssentialsDev.pkg/Payload | cpio -i) |
109 | | -endif # (3) |
110 | | -endif # (1) |
111 | | - |
112 | | -endif # Darwin |
113 | | - |
| 37 | +_JDKS_ROOT := /Library/Java/JavaVirtualMachines |
| 38 | +endif # $(OS)=Darwin |
114 | 39 |
|
115 | 40 | ifeq ($(OS),Linux) |
| 41 | +_JDKS_ROOT := /usr/lib/jvm |
| 42 | +endif # $(OS)=Linux |
116 | 43 |
|
117 | | -# This is for all linux distributions with which and java installed |
118 | | -_DEFAULT_LINUX_JAVA_ROOT = $(shell java -XshowSettings:properties -help 2>&1 | grep java.home | sed 's/^.*java.home = //g')/../ |
119 | | -_DEFAULT_LINUX_JAVA_INCLUDE_DIRS = $(_DEFAULT_LINUX_JAVA_ROOT)/include/ |
120 | | -_LINUX_JAVA_FALLBACK_DIRS = /usr/lib/jvm/java* |
121 | | -_LINUX_JAVA_JNI_INCLUDE_DIR = include |
122 | | -_LINUX_JAVA_ROOT = $(_DEFAULT_LINUX_JAVA_ROOT) |
123 | | -_LINUX_JAVA_ARCH_64 = amd64 |
124 | | -_LINUX_JAVA_ARCH_32 = i386 |
125 | | - |
126 | | -_DESKTOP_JAVA_INCLUDE_DIRS = $(_DEFAULT_LINUX_JAVA_INCLUDE_DIRS) |
127 | | - |
128 | | -ifeq ($(wildcard $(_DESKTOP_JAVA_INCLUDE_DIRS)),) |
129 | | -_DESKTOP_JAVA_INCLUDE_DIRS = $(wildcard $(JAVA_HOME)/include) |
130 | | -_LINUX_JAVA_ROOT = $(JAVA_HOME) |
131 | | -endif # No default Java location, $JAVA_HOME check |
132 | | - |
133 | | -ifeq ($(wildcard $(_DESKTOP_JAVA_INCLUDE_DIRS)),) |
134 | | -LATEST_JDK := $(shell ls -dtr $(_LINUX_JAVA_FALLBACK_DIRS) | $(_VERSION_SORT)) |
135 | | -_DESKTOP_JAVA_INCLUDE_DIRS = $(LATEST_JDK)/$(_LINUX_JAVA_JNI_INCLUDE_DIR) |
136 | | -_LINUX_JAVA_ROOT = $(LATEST_JDK) |
137 | | -endif # No $JAVA_HOME, find the latest version |
138 | | - |
139 | | -JI_JDK_INCLUDE_PATHS = $(_DESKTOP_JAVA_INCLUDE_DIRS) $(_DESKTOP_JAVA_INCLUDE_DIRS)/linux |
140 | | - |
141 | | -ifneq ($(wildcard $(_LINUX_JAVA_ROOT)/jre/lib/$(_LINUX_JAVA_ARCH_64)/server/libjvm.so),) |
142 | | -JI_JVM_PATH = $(_LINUX_JAVA_ROOT)/jre/lib/$(_LINUX_JAVA_ARCH_64)/server/libjvm.so |
143 | | -endif # Find 64-bit libjvm |
144 | | - |
145 | | -ifeq ($(JI_JVM_PATH),) # (1) No 64-bit java arch |
146 | | -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 |
147 | | -JI_JVM_PATH = $(_LINUX_JAVA_ROOT)/jre/lib/$(_LINUX_JAVA_ARCH_32)/server/libjvm.so |
148 | | -endif # (2) |
149 | | -endif # (1) |
150 | | - |
151 | | -JI_JDK_BIN_PATH = $(_LINUX_JAVA_ROOT)/bin |
152 | | -JI_JAVAC_PATH = $(_LINUX_JAVA_ROOT)/bin/javac |
153 | | -JI_JAR_PATH = $(_LINUX_JAVA_ROOT)/bin/jar |
154 | | - |
155 | | -endif # Linux |
156 | | - |
157 | | -$(JI_JVM_PATH): |
158 | | - @echo "error: No JVM found\!"; |
159 | | - @exit 1 |
160 | | - |
161 | | -bin/Build$(CONFIGURATION)/JdkInfo.props: $(JI_JDK_INCLUDE_PATHS) $(JI_JVM_PATH) |
162 | | - -mkdir -p `dirname "$@"` |
163 | | - -rm "$@" |
164 | | - echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' > "$@" |
165 | | - echo ' <Choose>' >> "$@" |
166 | | - echo " <When Condition=\" '\$$(JdkJvmPath)' == '' \">" >> "$@" |
167 | | - echo ' <PropertyGroup>' >> "$@" |
168 | | - echo " <JdkJvmPath>$(JI_JVM_PATH)</JdkJvmPath>" >> "$@" |
169 | | - echo ' </PropertyGroup>' >> "$@" |
170 | | - echo ' <ItemGroup>' >> "$@" |
171 | | - for p in $(JI_JDK_INCLUDE_PATHS); do \ |
172 | | - echo " <JdkIncludePath Include=\"$$p\" />" >> "$@"; \ |
173 | | - done |
174 | | - echo ' </ItemGroup>' >> "$@" |
175 | | - echo ' </When>' >> "$@" |
176 | | - echo ' </Choose>' >> "$@" |
177 | | - echo ' <PropertyGroup>' >> "$@" |
178 | | - echo " <JdkBinPath Condition=\" '\$$(JdkBinPath)' == '' \">$(JI_JDK_BIN_PATH)</JdkBinPath>" >> "$@" |
179 | | - echo " <JavaCPath Condition=\" '\$$(JavaCPath)' == '' \">$(JI_JAVAC_PATH)</JavaCPath>" >> "$@" |
180 | | - echo " <JarPath Condition=\" '\$$(JarPath)' == '' \">$(JI_JAR_PATH)</JarPath>" >> "$@" |
181 | | - echo ' </PropertyGroup>' >> "$@" |
182 | | - echo '</Project>' >> "$@" |
| 44 | +$(_INCLUDE_MK): bin/Build$(CONFIGURATION)/Java.Interop.BootstrapTasks.dll |
| 45 | + $(MSBUILD) $(MSBUILD_FLAGS) build-tools/scripts/jdk.targets /t:GetPreferredJdkRoot \ |
| 46 | + /p:JdksRoot="$(_JDKS_ROOT)" \ |
| 47 | + $(if $(JI_MAX_JDK),"/p:MaximumJdkVersion=$(JI_MAX_JDK)") |
0 commit comments