diff options
Diffstat (limited to 'gradle')
8 files changed, 82 insertions, 21 deletions
diff --git a/gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java b/gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java index 5372005..18e3277 100644 --- a/gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java +++ b/gradle/src/build-test/groovy/com/android/build/gradle/AutomatedBuildTest.java @@ -37,8 +37,8 @@ public class AutomatedBuildTest extends BuildTest { "aidl", "api", "applibtest", "assets", "attrOrder", "basic", "dependencies", "dependencyChecker", "flavored", "flavorlib", "flavors", "genFolderApi", "libProguardJarDep", "libProguardLibDep", "libTestDep", "libsTest", "localJars", - "migrated", "multiproject", "multires", "ndkSanAngeles", "overlay1", "overlay2", - "pkgOverride", "proguard", "proguardLib", "renderscript", "renderscriptInLib", + "migrated", "multiproject", "multires", "ndkSanAngeles", "ndkJniLib", "overlay1", + "overlay2", "pkgOverride", "proguard", "proguardLib", "renderscript", "renderscriptInLib", "renderscriptMultiSrc", "rsSupportMode", "sameNamedLibs", "tictactoe" /*, "autorepo"*/ }; diff --git a/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java b/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java index e025033..0e410f1 100644 --- a/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java +++ b/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java @@ -40,8 +40,8 @@ public class DeviceTest extends BuildTest { private static final String[] sBuiltProjects = new String[] { "api", "assets", "applibtest", "attrOrder", "basic", "dependencies", "flavored", "flavorlib", "flavors", "libProguardJarDep", "libProguardLibDep", "libTestDep", "libsTest", - "migrated", "multires", "overlay1", "overlay2", "pkgOverride", "proguard", "proguardLib", - "sameNamedLibs" + "migrated", "multires", "ndkJniLib", "overlay1", "overlay2", "pkgOverride", "proguard", + "proguardLib", "sameNamedLibs" }; public static Test suite() { diff --git a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy index a01bf7b..1e3605e 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy @@ -462,13 +462,21 @@ public abstract class BasePlugin { RenderscriptCompile) variantData.renderscriptCompileTask = renderscriptTask - variantData.sourceGenTask.dependsOn renderscriptTask + ProductFlavor mergedFlavor = config.mergedFlavor + boolean ndkMode = mergedFlavor.renderscriptNdkMode + + // only put this dependency if rs will generate Java code + if (!ndkMode) { + variantData.sourceGenTask.dependsOn renderscriptTask + } + renderscriptTask.dependsOn variantData.prepareDependenciesTask renderscriptTask.plugin = this renderscriptTask.variant = variantData - renderscriptTask.targetApi = config.mergedFlavor.renderscriptTargetApi - renderscriptTask.supportMode = config.mergedFlavor.renderscriptSupportMode + renderscriptTask.targetApi = mergedFlavor.renderscriptTargetApi + renderscriptTask.supportMode = mergedFlavor.renderscriptSupportMode + renderscriptTask.ndkMode = ndkMode renderscriptTask.debugBuild = config.buildType.renderscriptDebugBuild renderscriptTask.optimLevel = config.buildType.renderscriptOptimLevel @@ -737,7 +745,9 @@ public abstract class BasePlugin { sourceList.add({ variantData.processResourcesTask.sourceOutputDir }) sourceList.add({ variantData.generateBuildConfigTask.sourceOutputDir }) sourceList.add({ variantData.aidlCompileTask.sourceOutputDir }) - sourceList.add({ variantData.renderscriptCompileTask.sourceOutputDir }) + if (!config.mergedFlavor.renderscriptNdkMode) { + sourceList.add({ variantData.renderscriptCompileTask.sourceOutputDir }) + } if (config.getType() != VariantConfiguration.Type.TEST) { sourceList.add(((AndroidSourceSet) config.buildTypeSourceSet).java) @@ -808,7 +818,21 @@ public abstract class BasePlugin { VariantConfiguration variantConfig = variantData.variantConfiguration - ndkCompile.conventionMapping.sourceFolders = { variantConfig.jniSourceList } + if (variantConfig.mergedFlavor.renderscriptNdkMode) { + ndkCompile.ndkRenderScriptMode = true + ndkCompile.dependsOn variantData.renderscriptCompileTask + } else { + ndkCompile.ndkRenderScriptMode = false + } + + ndkCompile.conventionMapping.sourceFolders = { + List<File> sourceList = variantConfig.jniSourceList + if (variantConfig.mergedFlavor.renderscriptNdkMode) { + sourceList.add(variantData.renderscriptCompileTask.sourceOutputDir) + } + + return sourceList + } ndkCompile.conventionMapping.generatedMakefile = { project.file("$project.buildDir/ndk/${variantData.variantConfiguration.dirName}/Android.mk") @@ -1015,7 +1039,7 @@ public abstract class BasePlugin { // first the connected one. def connectedTask = createDeviceProviderInstrumentTestTask( hasFlavors ? - "${connectedRootName}${baseVariantData.variantConfiguration.fullName}" : connectedRootName, + "${connectedRootName}${baseVariantData.variantConfiguration.fullName.capitalize()}" : connectedRootName, "Installs and runs the tests for Build '${baseVariantData.variantConfiguration.fullName}' on connected devices.", isLibraryTest ? DeviceProviderInstrumentTestLibraryTask : @@ -1033,7 +1057,7 @@ public abstract class BasePlugin { for (DeviceProvider deviceProvider : providers) { DefaultTask providerTask = createDeviceProviderInstrumentTestTask( hasFlavors ? - "${deviceProvider.name}${INSTRUMENT_TEST.capitalize()}${baseVariantData.variantConfiguration.fullName}" : + "${deviceProvider.name}${INSTRUMENT_TEST.capitalize()}${baseVariantData.variantConfiguration.fullName.capitalize()}" : "${deviceProvider.name}${INSTRUMENT_TEST.capitalize()}", "Installs and runs the tests for Build '${baseVariantData.variantConfiguration.fullName}' using Provider '${deviceProvider.name.capitalize()}'.", isLibraryTest ? diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/NdkConfigDsl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/NdkConfigDsl.java index 87b6dcd..6b708e5 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/NdkConfigDsl.java +++ b/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/NdkConfigDsl.java @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.Set; /** + * Implementation of NdkConfig to be used in the gradle DSL. */ public class NdkConfigDsl implements NdkConfig, Serializable { private static final long serialVersionUID = 1L; diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy index 9bf6c46..41ec14f 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy @@ -275,8 +275,10 @@ public class ModelBuilder implements ToolingModelBuilder { folders.add(variantData.processResourcesTask.sourceOutputDir) folders.add(variantData.aidlCompileTask.sourceOutputDir) - folders.add(variantData.renderscriptCompileTask.sourceOutputDir) folders.add(variantData.generateBuildConfigTask.sourceOutputDir) + if (!variantData.variantConfiguration.mergedFlavor.renderscriptNdkMode) { + folders.add(variantData.renderscriptCompileTask.sourceOutputDir) + } List<File> extraFolders = variantData.extraGeneratedSourceFolders if (extraFolders != null) { diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java index cc7aad6..f00bd24 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java +++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ProductFlavorImpl.java @@ -39,6 +39,7 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { private int mTargetSdkVersion = -1; private int mRenderscriptTargetApi = -1; private boolean mRenderscriptSupportMode = false; + private boolean mRenderscriptNdkMode = false; private int mVersionCode = -1; private String mVersionName = null; private String mPackageName = null; @@ -56,6 +57,7 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { clonedFlavor.mTargetSdkVersion = productFlavor.getTargetSdkVersion(); clonedFlavor.mRenderscriptTargetApi = productFlavor.getRenderscriptTargetApi(); clonedFlavor.mRenderscriptSupportMode = productFlavor.getRenderscriptSupportMode(); + clonedFlavor.mRenderscriptNdkMode = productFlavor.getRenderscriptNdkMode(); clonedFlavor.mVersionCode = productFlavor.getVersionCode(); clonedFlavor.mVersionName = productFlavor.getVersionName(); @@ -116,6 +118,11 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { return mRenderscriptSupportMode; } + @Override + public boolean getRenderscriptNdkMode() { + return mRenderscriptNdkMode; + } + @Nullable @Override public String getTestPackageName() { @@ -173,6 +180,7 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { ", mTargetSdkVersion=" + mTargetSdkVersion + ", mRenderscriptTargetApi=" + mRenderscriptTargetApi + ", mRenderscriptSupportMode=" + mRenderscriptSupportMode + + ", mRenderscriptNdkMode=" + mRenderscriptNdkMode + ", mVersionCode=" + mVersionCode + ", mVersionName='" + mVersionName + '\'' + ", mPackageName='" + mPackageName + '\'' + diff --git a/gradle/src/main/groovy/com/android/build/gradle/tasks/NdkCompile.groovy b/gradle/src/main/groovy/com/android/build/gradle/tasks/NdkCompile.groovy index 4526371..eba8d72 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/tasks/NdkCompile.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/tasks/NdkCompile.groovy @@ -15,7 +15,6 @@ */ package com.android.build.gradle.tasks - import com.android.annotations.NonNull import com.android.build.gradle.internal.tasks.NdkTask import com.android.builder.model.NdkConfig @@ -51,6 +50,9 @@ class NdkCompile extends NdkTask { @OutputDirectory File objFolder + @Input + boolean ndkRenderScriptMode + @InputFiles FileTree getSource() { FileTree src = null @@ -117,26 +119,38 @@ class NdkCompile extends NdkTask { StringBuilder sb = new StringBuilder() sb.append( - "LOCAL_PATH := \$(call my-dir)\n" + - "include \$(CLEAR_VARS)\n\n") + 'LOCAL_PATH := $(call my-dir)\n' + + 'include \$(CLEAR_VARS)\n\n') - sb.append("LOCAL_MODULE := ").append(ndk.moduleName != null ? ndk.moduleName : project.name).append('\n') + sb.append('LOCAL_MODULE := ').append(ndk.moduleName != null ? ndk.moduleName : project.name).append('\n') if (ndk.cFlags != null) { - sb.append("LOCAL_CFLAGS := ").append(ndk.cFlags).append('\n') + sb.append('LOCAL_CFLAGS := ').append(ndk.cFlags).append('\n') } + List<String> fullLdlibs = Lists.newArrayList() if (ndk.ldLibs != null) { + fullLdlibs.addAll(ndk.ldLibs) + } + if (getNdkRenderScriptMode()) { + fullLdlibs.add("dl") + fullLdlibs.add("log") + fullLdlibs.add("jnigraphics") + fullLdlibs.add("RScpp_static") + fullLdlibs.add("cutils") + } + + if (!fullLdlibs.isEmpty()) { sb.append('LOCAL_LDLIBS := \\\n') - for (String lib : ndk.ldLibs) { + for (String lib : fullLdlibs) { sb.append('\t-l') .append(lib).append(' \\\n') } sb.append('\n') } - sb.append("LOCAL_SRC_FILES := \\\n") + sb.append('LOCAL_SRC_FILES := \\\n') for (File sourceFile : sourceFiles) { - sb.append('\t').append(sourceFile.absolutePath).append(" \\\n") + sb.append('\t').append(sourceFile.absolutePath).append(' \\\n') } sb.append('\n') @@ -144,8 +158,16 @@ class NdkCompile extends NdkTask { sb.append("LOCAL_C_INCLUDES += ${sourceFolder.absolutePath}\n") } + if (getNdkRenderScriptMode()) { + sb.append('LOCAL_LDFLAGS += -L$(call host-path,$(TARGET_C_INCLUDES)/../lib/rs)\n') + + sb.append('LOCAL_C_INCLUDES += $(TARGET_C_INCLUDES)/rs/cpp\n') + sb.append('LOCAL_C_INCLUDES += $(TARGET_C_INCLUDES)/rs\n') + sb.append('LOCAL_C_INCLUDES += $(TARGET_OBJS)/$(LOCAL_MODULE)\n') + } + sb.append( - "\ninclude \$(BUILD_SHARED_LIBRARY)\n") + '\ninclude \$(BUILD_SHARED_LIBRARY)\n') Files.write(sb.toString(), makefile, Charsets.UTF_8) } diff --git a/gradle/src/main/groovy/com/android/build/gradle/tasks/RenderscriptCompile.groovy b/gradle/src/main/groovy/com/android/build/gradle/tasks/RenderscriptCompile.groovy index 17985fc..a5f7986 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/tasks/RenderscriptCompile.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/tasks/RenderscriptCompile.groovy @@ -61,6 +61,9 @@ public class RenderscriptCompile extends NdkTask { @Input boolean debugBuild + @Input + boolean ndkMode + @TaskAction void taskAction() { // this is full run (always), clean the previous outputs @@ -91,6 +94,7 @@ public class RenderscriptCompile extends NdkTask { getTargetApi(), getDebugBuild(), getOptimLevel(), + getNdkMode(), getSupportMode(), getNdkConfig()?.abiFilters) } |