From 2b502c81fe918ea1d77d7dc229cde0a66064f6ec Mon Sep 17 00:00:00 2001 From: Arnaud Soulard Date: Fri, 30 Jan 2015 10:02:08 +0100 Subject: [PATCH] arm64-v8a APP_ABI is now supported by android-maven-plugin --- .../maven/plugins/android/AndroidNdk.java | 34 ++++++++++++++++--- .../NDKArchitectureToolchainMappings.java | 13 ++++++- .../android/phase05compile/NdkBuildMojo.java | 23 +++++++------ 3 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/jayway/maven/plugins/android/AndroidNdk.java b/src/main/java/com/jayway/maven/plugins/android/AndroidNdk.java index 3d11c866a..fb8853ebe 100644 --- a/src/main/java/com/jayway/maven/plugins/android/AndroidNdk.java +++ b/src/main/java/com/jayway/maven/plugins/android/AndroidNdk.java @@ -45,6 +45,11 @@ public class AndroidNdk public static final String[] ARM_TOOLCHAIN = { "arm-linux-androideabi-4.9", "arm-linux-androideabi-4.8", "arm-linux-androideabi-4.7", "arm-linux-androideabi-4.6", "arm-linux-androideabi-4.4.3" }; + /** + * Arm64 toolchain implementations. + */ + public static final String[] ARM64_TOOLCHAIN = { "aarch64-linux-android-4.9" }; + /** * x86 toolchain implementations. */ @@ -110,6 +115,10 @@ else if ( SystemUtils.IS_OS_MAC || SystemUtils.IS_OS_MAC_OSX ) { fileName = "arm-linux-androideabi-strip" + extension; } + else if ( toolchain.startsWith( "aarch64" ) ) + { + fileName = "aarch64-linux-android-strip" + extension; + } else if ( toolchain.startsWith( "x86" ) ) { fileName = "i686-linux-android-strip" + extension; @@ -177,10 +186,14 @@ public String getToolchain( File file ) throws MojoExecutionException // try to resolve the toolchain now String ndkArchitecture = file.getParentFile().getName(); - if ( ndkArchitecture.startsWith( "arm" ) ) + if ( ndkArchitecture.startsWith( "armeabi" ) ) { resolvedNdkToolchain = resolveNdkToolchain( ARM_TOOLCHAIN ); } + else if ( ndkArchitecture.startsWith( "arm64" ) ) + { + resolvedNdkToolchain = resolveNdkToolchain( ARM64_TOOLCHAIN ); + } else if ( ndkArchitecture.startsWith( "x86" ) ) { resolvedNdkToolchain = resolveNdkToolchain( X86_TOOLCHAIN ); @@ -220,11 +233,16 @@ public File getGdbServer( String ndkArchitecture ) throws MojoExecutionException { // create a list of possible gdb server parent folder locations List gdbServerLocations = new ArrayList(); - if ( ndkArchitecture.startsWith( "arm" ) ) + if ( ndkArchitecture.startsWith( "armeabi" ) ) { - gdbServerLocations.add( "android-arm" ); + gdbServerLocations.add( "android-armeabi" ); gdbServerLocations.addAll( Arrays.asList( ARM_TOOLCHAIN ) ); } + else if ( ndkArchitecture.startsWith( "arm64" ) ) + { + gdbServerLocations.add( "android-arm64" ); + gdbServerLocations.addAll( Arrays.asList( ARM64_TOOLCHAIN ) ); + } else if ( ndkArchitecture.startsWith( "x86" ) ) { gdbServerLocations.add( "android-x86" ); @@ -270,7 +288,7 @@ public String getToolchainFromArchitecture( final String ndkArchitecture, final NDKArchitectureToolchainMappings ndkArchitectureToolchainMappings ) throws MojoExecutionException { - if ( ndkArchitecture.startsWith( "arm" ) ) + if ( ndkArchitecture.startsWith( "armeabi" ) ) { if ( ndkArchitectureToolchainMappings != null ) { @@ -278,6 +296,14 @@ public String getToolchainFromArchitecture( final String ndkArchitecture, } return AndroidNdk.ARM_TOOLCHAIN[0]; } + else if ( ndkArchitecture.startsWith( "arm64" ) ) + { + if ( ndkArchitectureToolchainMappings != null ) + { + return ndkArchitectureToolchainMappings.getArm64(); + } + return AndroidNdk.ARM64_TOOLCHAIN[0]; + } else if ( ndkArchitecture.startsWith( "x86" ) ) { if ( ndkArchitectureToolchainMappings != null ) diff --git a/src/main/java/com/jayway/maven/plugins/android/configuration/NDKArchitectureToolchainMappings.java b/src/main/java/com/jayway/maven/plugins/android/configuration/NDKArchitectureToolchainMappings.java index 076bb39e0..c3881211c 100644 --- a/src/main/java/com/jayway/maven/plugins/android/configuration/NDKArchitectureToolchainMappings.java +++ b/src/main/java/com/jayway/maven/plugins/android/configuration/NDKArchitectureToolchainMappings.java @@ -9,7 +9,8 @@ public class NDKArchitectureToolchainMappings { String x86 = AndroidNdk.X86_TOOLCHAIN[0]; String armeabi = AndroidNdk.ARM_TOOLCHAIN[0]; - String mips = AndroidNdk.ARM_TOOLCHAIN[0]; + String arm64 = AndroidNdk.ARM64_TOOLCHAIN[0]; + String mips = AndroidNdk.MIPS_TOOLCHAIN[0]; public String getArmeabi() { @@ -21,6 +22,16 @@ public void setArmeabi( final String armeabi ) this.armeabi = armeabi; } + public String getArm64() + { + return arm64; + } + + public void setArm64( final String arm64 ) + { + this.arm64 = arm64; + } + public String getMips() { return mips; diff --git a/src/main/java/com/jayway/maven/plugins/android/phase05compile/NdkBuildMojo.java b/src/main/java/com/jayway/maven/plugins/android/phase05compile/NdkBuildMojo.java index 5b7677ddf..4031fbce7 100644 --- a/src/main/java/com/jayway/maven/plugins/android/phase05compile/NdkBuildMojo.java +++ b/src/main/java/com/jayway/maven/plugins/android/phase05compile/NdkBuildMojo.java @@ -264,7 +264,7 @@ public class NdkBuildMojo extends AbstractAndroidMojo /** - * Specifies the final name of the library output by the build (this allows + * Specifies the final name of the library output by the build (this allows * the pom to override the default artifact name). The value should not * include the 'lib' prefix or filename extension (e.g. '.so'). */ @@ -519,6 +519,7 @@ private void configureNdkToolchain( String architecture, List commands ) // // x86-4.6 // x86-4.6 + // aarch64-4.9 // final String toolchainFromArchitecture = getAndroidNdk().getToolchainFromArchitecture( architecture, ndkArchitectureToolchainMappings ); @@ -572,7 +573,7 @@ private File findNativeLibrary( File nativeLibDirectory ) throws MojoExecutionEx public boolean accept( final File dir, final String name ) { String libraryName = ndkFinalLibraryName; - + if ( libraryName == null || libraryName.isEmpty() ) { libraryName = project.getArtifactId(); @@ -622,7 +623,7 @@ public boolean accept( final File dir, final String name ) } return files[ 0 ]; } - + private File nativeLibraryFromName( File nativeLibDirectory ) throws MojoExecutionException { final File libraryFile; @@ -661,7 +662,7 @@ private File nativeLibraryFromName( File nativeLibDirectory ) throws MojoExecuti return libraryFile; } - + private CommandExecutor.ErrorListener getNdkErrorListener() { return new CommandExecutor.ErrorListener() @@ -839,9 +840,9 @@ private void setupNativeLibraryEnvironment( MakefileHelper makefileHelper, Comma if ( NativeHelper.hasStaticNativeLibraryArtifact( resolveNativeLibraryArtifacts, getUnpackedLibsDirectory(), architecture ) ) { - String staticlibs = makefileHelper.createLibraryList( resolveNativeLibraryArtifacts, + String staticlibs = makefileHelper.createLibraryList( resolveNativeLibraryArtifacts, architecture, - true ); + true ); executor.addEnvironment( "ANDROID_MAVEN_PLUGIN_LOCAL_STATIC_LIBRARIES", staticlibs ); getLog().debug( "Set ANDROID_MAVEN_PLUGIN_LOCAL_STATIC_LIBRARIES = " + staticlibs ); } @@ -850,14 +851,14 @@ private void setupNativeLibraryEnvironment( MakefileHelper makefileHelper, Comma if ( NativeHelper.hasSharedNativeLibraryArtifact( resolveNativeLibraryArtifacts, getUnpackedLibsDirectory(), architecture ) ) { - String sharedlibs = makefileHelper.createLibraryList( resolveNativeLibraryArtifacts, + String sharedlibs = makefileHelper.createLibraryList( resolveNativeLibraryArtifacts, architecture, - false ); + false ); executor.addEnvironment( "ANDROID_MAVEN_PLUGIN_LOCAL_SHARED_LIBRARIES", sharedlibs ); getLog().debug( "Set ANDROID_MAVEN_PLUGIN_LOCAL_SHARED_LIBRARIES = " + sharedlibs ); } } - + private Set findNativeLibraryDependencies() throws MojoExecutionException { final NativeHelper nativeHelper = getNativeHelper(); @@ -865,7 +866,7 @@ private Set findNativeLibraryDependencies() throws MojoExecutionExcept .getNativeDependenciesArtifacts( this, getUnpackedLibsDirectory(), false ); final Set sharedLibraryArtifacts = nativeHelper .getNativeDependenciesArtifacts( this, getUnpackedLibsDirectory(), true ); - + final Set mergedArtifacts = new LinkedHashSet(); filterNativeDependencies( mergedArtifacts, staticLibraryArtifacts ); filterNativeDependencies( mergedArtifacts, sharedLibraryArtifacts ); @@ -891,7 +892,7 @@ private void filterNativeDependencies( Set targetSet, Set so { for ( Artifact a : source ) { - if ( project.getGroupId().equals( a.getGroupId() ) + if ( project.getGroupId().equals( a.getGroupId() ) && project.getArtifactId().equals( a.getArtifactId() ) ) { getLog().warn( "Excluding native dependency attached by this build" );