From dcee2c84e13df504a088affb7420c1749a82454a Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Fri, 5 Jun 2020 14:55:03 -0400 Subject: [PATCH] [build] JavacSourceVersion JavacTargetVersion Harmonization (#4771) Context: https://github.com/xamarin/xamarin-android/pull/4567 In order to support using JDK 11 to build Xamarin.Android, we need to consistently use `javac -source 1.8 -target 1.8` ~everywhere, because we also require `javac --boot-class-path`, and JDK11 doesn't support `javac --boot-class-path` unless targeting < JDK 1.9: % javac --boot-class-path ~/android-toolchain/sdk/platforms/android-29/android.jar Example.java error: option --boot-class-path not allowed with target 11 The `` task use `javac --boot-class-path` to compile Java code, so that Android's `android.jar` provides everything: Task "Javac" (TaskId:154) Task Parameter:JavaPlatformJarPath=/Users/runner/Library/Android/sdk/platforms/android-29/android.jar Task Parameter:ClassesOutputDirectory=obj/Release/android/bin/classes/ Task Parameter:ClassesZip=obj/Release/android/bin/classes.zip Task Parameter:StubSourceDirectory=obj/Release/android/src/ Task Parameter:ToolPath=/Users/runner/Library/Android/jdk/bin Task Parameter: Jars= /Library/Frameworks/Mono.framework/External/xbuild-frameworks/MonoAndroid/v10.0/mono.android.jar /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/java_runtime.jar /Users/runner/Library/Android/jdk/bin/javac -J-Dfile.encoding=UTF8 "@/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp2eba46d8.tmp" JAVAC : error : option --boot-class-path not allowed with target 11 The command exited with code 2. (TaskId:154) Harmonize provisioning of `javac -source` and `javac -target` values: * Add `$(JavacSourceVersion)` and `$(JavacTargetVersion)` MSBuild properties to `Configuration.props`. * Update the `src/manifestmerger` and `src/r8` builds so that `$(JavacSourceVersion)` and `$(JavacTargetVersion)` are used to control the `.class` files that they create. * Update `build-tools/scripts/Jar.targets` to use the values from `Configuration.props`, instead of separate values. * Fix errant invocations of `javac -target $(JavacSourceVersion)`, which should be `javac -target $(JavacTargetVersion)`. --- Configuration.props | 4 ++++ build-tools/scripts/Jar.targets | 6 +----- build-tools/scripts/JavaCallableWrappers.targets | 2 +- .../Xamarin.Android.Common.props.in | 3 +++ src/java-runtime/java-runtime.targets | 2 +- src/manifestmerger/build.gradle | 8 ++++++++ src/manifestmerger/manifestmerger.targets | 2 +- src/r8/build.gradle | 8 ++++++++ src/r8/r8.targets | 2 +- 9 files changed, 28 insertions(+), 9 deletions(-) diff --git a/Configuration.props b/Configuration.props index 855924fee4c..e1756533195 100644 --- a/Configuration.props +++ b/Configuration.props @@ -117,6 +117,10 @@ i686-w64-mingw32 x86_64-w64-mingw32 + + 1.8 + 1.8 + $([System.IO.Path]::GetFullPath ('$(AndroidMxeInstallPrefix)')) $([System.IO.Path]::GetFullPath ('$(AndroidNdkDirectory)')) diff --git a/build-tools/scripts/Jar.targets b/build-tools/scripts/Jar.targets index 91552910d10..75a0c533218 100644 --- a/build-tools/scripts/Jar.targets +++ b/build-tools/scripts/Jar.targets @@ -3,10 +3,6 @@ - <_JavacSourceVersion Condition="$(_JdkVersion.StartsWith ('9'))">1.8 - <_JavacSourceVersion Condition=" '$(_JavacSourceVersion)' == '' ">1.5 - <_JavacTargetVersion Condition="$(_JdkVersion.StartsWith ('9'))">1.8 - <_JavacTargetVersion Condition=" '$(_JavacTargetVersion)' == '' ">1.6 $(JavaSdkDirectory)\bin\jar $(JavaSdkDirectory)\bin\javac @@ -35,7 +31,7 @@ <_Javac>"$(JavaCPath)" <_Jar>"$(JarPath)" - <_Targets>-source $(_JavacSourceVersion) -target $(_JavacTargetVersion) + <_Targets>-source $(JavacSourceVersion) -target $(JavacTargetVersion) <_DestDir>$(IntermediateOutputPath)__CreateTestJarFile-bin <_AndroidJar>-bootclasspath "$(AndroidSdkDirectory)\platforms\android-$(_AndroidApiLevelName)\android.jar" <_CP>-cp "$(_JavaInteropJarPath)" diff --git a/build-tools/scripts/JavaCallableWrappers.targets b/build-tools/scripts/JavaCallableWrappers.targets index df18fa9cc69..129215795fe 100644 --- a/build-tools/scripts/JavaCallableWrappers.targets +++ b/build-tools/scripts/JavaCallableWrappers.targets @@ -31,7 +31,7 @@ Overwrite="True" /> - <_Target>-source $(JavacSourceVersion) -target $(JavacSourceVersion) + <_Target>-source $(JavacSourceVersion) -target $(JavacTargetVersion) <_D>-d "$(IntermediateOutputPath)jcw\bin" <_AndroidJar>"$(AndroidToolchainDirectory)\sdk\platforms\android-$(AndroidPlatformId)\android.jar" <_MonoAndroidJar>$(OutputPath)mono.android.jar diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in index f38b659fb58..6e5ebd1ed88 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in @@ -21,6 +21,9 @@ @BUNDLETOOL_VERSION@ <_XamarinAndroidMSBuildDirectory>$(MSBuildThisFileDirectory) + 1.8 + 1.8 + true diff --git a/src/java-runtime/java-runtime.targets b/src/java-runtime/java-runtime.targets index fe8c0b579fb..8085411e704 100644 --- a/src/java-runtime/java-runtime.targets +++ b/src/java-runtime/java-runtime.targets @@ -33,7 +33,7 @@ Overwrite="True" /> - <_Target Condition="'$(JavacSourceVersion)' != ''">-source $(JavacSourceVersion) -target $(JavacSourceVersion) + <_Target Condition="'$(JavacSourceVersion)' != ''">-source $(JavacSourceVersion) -target $(JavacTargetVersion) <_AndroidJar>"$(AndroidToolchainDirectory)\sdk\platforms\android-$(AndroidFirstPlatformId)\android.jar" diff --git a/src/r8/build.gradle b/src/r8/build.gradle index 040ff22d430..f35587d71ac 100644 --- a/src/r8/build.gradle +++ b/src/r8/build.gradle @@ -1,6 +1,14 @@ apply plugin: 'java' apply plugin: 'idea' +java { + ext.javaSourceVer = project.hasProperty('javaSourceVer') ? JavaVersion.toVersion(project.getProperty('javaSourceVer')) : JavaVersion.VERSION_1_8 + ext.javaTargetVer = project.hasProperty('javaTargetVer') ? JavaVersion.toVersion(project.getProperty('javaTargetVer')) : JavaVersion.VERSION_1_8 + + sourceCompatibility = ext.javaSourceVer + targetCompatibility = ext.javaTargetVer +} + // See: https://r8.googlesource.com/r8/+/refs/tags/1.6.82/build.gradle#55 repositories { maven { diff --git a/src/r8/r8.targets b/src/r8/r8.targets index 0935a8fbe29..0ba8b71855e 100644 --- a/src/r8/r8.targets +++ b/src/r8/r8.targets @@ -18,7 +18,7 @@ Inputs="$(MSBuildThisFile);build.gradle" Outputs="$(_Destination)">