diff options
author | Xavier Ducrohet <xav@google.com> | 2013-11-13 14:43:16 -0800 |
---|---|---|
committer | Xavier Ducrohet <xav@google.com> | 2013-11-13 18:56:55 -0800 |
commit | 2e1f7810edd76d92cee8d3e06bc4dec0c288adea (patch) | |
tree | 2955ede4f3b63c7b04d7124b5aeffad59d9fcc66 /gradle | |
parent | d3cc5cac69f3e2229a353554f6f50d969610ce3d (diff) | |
download | build-2e1f7810edd76d92cee8d3e06bc4dec0c288adea.tar.gz |
Renderscript Support Mode.
Change-Id: If469c1edc5f38671cdebc5271b14a2e1b908f428
Diffstat (limited to 'gradle')
6 files changed, 86 insertions, 17 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 e06ae21..b7fcc98 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 @@ -39,7 +39,7 @@ public class AutomatedBuildTest extends BuildTest { "libProguardLibDep", "libTestDep", "libsTest", "localJars", "migrated", "multiproject", "multires", "ndkSanAngeles", "overlay1", "overlay2", "pkgOverride", "proguard", "proguardLib", "renderscript", "renderscriptInLib", "renderscriptMultiSrc", - "sameNamedLibs", "tictactoe" /*, "autorepo"*/ + "rsSupportMode", "sameNamedLibs", "tictactoe" /*, "autorepo"*/ }; private static final String[] sReportProjects = new String[] { 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 59d9192..bf799a6 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy @@ -445,6 +445,7 @@ public abstract class BasePlugin { renderscriptTask.variant = variantData renderscriptTask.targetApi = config.mergedFlavor.renderscriptTargetApi + renderscriptTask.supportMode = config.mergedFlavor.renderscriptSupportMode renderscriptTask.debugBuild = config.buildType.renderscriptDebugBuild renderscriptTask.optimLevel = config.buildType.renderscriptOptimLevel @@ -457,6 +458,30 @@ public abstract class BasePlugin { renderscriptTask.conventionMapping.resOutputDir = { project.file("$project.buildDir/res/rs/$variantData.dirName") } + renderscriptTask.conventionMapping.objOutputDir = { + project.file("$project.buildDir/rs/$variantData.dirName/obj") + } + renderscriptTask.conventionMapping.libOutputDir = { + project.file("$project.buildDir/rs/$variantData.dirName/lib") + } + renderscriptTask.conventionMapping.ndkConfig = { + + //noinspection GroovyAssignabilityCheck + NdkConfigDsl mergedConfig = new NdkConfigDsl(config.defaultConfig.ndkConfig) + if (config.hasFlavors()) { + for (DefaultProductFlavor flavorConfig : config.flavorConfigs) { + //noinspection GroovyAssignabilityCheck + mergedConfig.append(flavorConfig.ndkConfig) + } + } + if (config.getType() != VariantConfiguration.Type.TEST) { + //noinspection GroovyAssignabilityCheck + mergedConfig.append(config.buildType.ndkConfig) + } + + return mergedConfig + } + } protected void createMergeResourcesTask(@NonNull BaseVariantData variantData, @@ -689,11 +714,11 @@ public abstract class BasePlugin { // dependency. if (testedVariantData instanceof ApplicationVariantData) { compileTask.conventionMapping.classpath = { - project.files(config.compileClasspath) + testedVariantData.javaCompileTask.classpath + testedVariantData.javaCompileTask.outputs.files + project.files(getAndroidBuilder(variantData).getCompileClasspath(config)) + testedVariantData.javaCompileTask.classpath + testedVariantData.javaCompileTask.outputs.files } } else { compileTask.conventionMapping.classpath = { - project.files(config.compileClasspath) + project.files(getAndroidBuilder(variantData).getCompileClasspath(config)) } } @@ -1209,7 +1234,7 @@ public abstract class BasePlugin { preDexTask.dexOptions = extension.dexOptions preDexTask.conventionMapping.inputFiles = { - project.files(variantConfig.packagedJars) + project.files(getAndroidBuilder(variantData).getPackagedJars(variantConfig)) } preDexTask.conventionMapping.outputFolder = { project.file( @@ -1230,7 +1255,7 @@ public abstract class BasePlugin { } } else { dexTask.conventionMapping.preDexedLibraries = { - project.files(variantConfig.packagedJars) + project.files(getAndroidBuilder(variantData).getPackagedJars(variantConfig)) } } } @@ -1243,27 +1268,36 @@ public abstract class BasePlugin { packageApp.plugin = this packageApp.variant = variantData - VariantConfiguration config = variantData.variantConfiguration - packageApp.conventionMapping.resourceFile = { variantData.processResourcesTask.packageOutputFile } packageApp.conventionMapping.dexFile = { dexTask.outputFile } - packageApp.conventionMapping.packagedJars = { config.packagedJars } + packageApp.conventionMapping.packagedJars = { getAndroidBuilder(variantData).getPackagedJars(variantConfig) } packageApp.conventionMapping.javaResourceDir = { getOptionalDir(variantData.processJavaResourcesTask.destinationDir) } packageApp.conventionMapping.jniFolders = { // for now only the project's compilation output. // TODO add dependencies - Collections.singleton(variantData.ndkCompileTask.soFolder) + Set<File> set = Sets.newHashSet() + set.addAll(variantData.ndkCompileTask.soFolder) + set.addAll(variantData.renderscriptCompileTask.libOutputDir) + + if (variantConfig.mergedFlavor.renderscriptSupportMode) { + File rsLibs = getAndroidBuilder(variantData).getSupportNativeLibFolder() + if (rsLibs.isDirectory()) { + set.add(rsLibs); + } + } + + return set } packageApp.conventionMapping.abiFilters = { variantData.ndkCompileTask.getNdkConfig().abiFilters } - packageApp.conventionMapping.jniDebugBuild = { config.buildType.jniDebugBuild } + packageApp.conventionMapping.jniDebugBuild = { variantConfig.buildType.jniDebugBuild } - SigningConfigDsl sc = (SigningConfigDsl) config.signingConfig + SigningConfigDsl sc = (SigningConfigDsl) variantConfig.signingConfig packageApp.conventionMapping.signingConfig = { sc } if (sc != null) { ValidateSigningTask validateSigningTask = validateSigningTaskMap.get(sc) @@ -1378,6 +1412,8 @@ public abstract class BasePlugin { // also the config file output by aapt proguardTask.configuration(variantData.processResourcesTask.proguardOutputFile) + List<File> packagedJars = getAndroidBuilder(variantData).getPackagedJars(variantConfig) + if (variantData instanceof LibraryVariantData) { String packageName = variantConfig.getPackageFromManifest() if (packageName == null) { @@ -1398,7 +1434,6 @@ public abstract class BasePlugin { String include = exclude.replace('!', '') proguardTask.libraryjars(variantData.javaCompileTask.destinationDir, filter: include) - List<File> packagedJars = variantConfig.packagedJars // injar: the local dependencies, filter out local jars from packagedJars Object[] jars = LibraryPlugin.getLocalJarFileList(variantData.variantDependency) @@ -1421,7 +1456,7 @@ public abstract class BasePlugin { proguardTask.injars(variantData.javaCompileTask.destinationDir) // injar: the dependencies - for (File inJar : variantConfig.packagedJars) { + for (File inJar : packagedJars) { proguardTask.injars(inJar, filter: '!META-INF/MANIFEST.MF') } } 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 37e022d..8dabb11 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 @@ -36,6 +36,7 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { private int mMinSdkVersion = -1; private int mTargetSdkVersion = -1; private int mRenderscriptTargetApi = -1; + private boolean mRenderscriptSupportMode = false; private int mVersionCode = -1; private String mVersionName = null; private String mPackageName = null; @@ -52,6 +53,7 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { clonedFlavor.mMinSdkVersion = productFlavor.getMinSdkVersion(); clonedFlavor.mTargetSdkVersion = productFlavor.getTargetSdkVersion(); clonedFlavor.mRenderscriptTargetApi = productFlavor.getRenderscriptTargetApi(); + clonedFlavor.mRenderscriptSupportMode = productFlavor.getRenderscriptSupportMode(); clonedFlavor.mVersionCode = productFlavor.getVersionCode(); clonedFlavor.mVersionName = productFlavor.getVersionName(); @@ -107,6 +109,11 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { return mRenderscriptTargetApi; } + @Override + public boolean getRenderscriptSupportMode() { + return mRenderscriptSupportMode; + } + @Nullable @Override public String getTestPackageName() { @@ -138,6 +145,7 @@ class ProductFlavorImpl implements ProductFlavor, Serializable { ", mMinSdkVersion=" + mMinSdkVersion + ", mTargetSdkVersion=" + mTargetSdkVersion + ", mRenderscriptTargetApi=" + mRenderscriptTargetApi + + ", mRenderscriptSupportMode=" + mRenderscriptSupportMode + ", mVersionCode=" + mVersionCode + ", mVersionName='" + mVersionName + '\'' + ", mPackageName='" + mPackageName + '\'' + diff --git a/gradle/src/main/groovy/com/android/build/gradle/tasks/PackageApplication.groovy b/gradle/src/main/groovy/com/android/build/gradle/tasks/PackageApplication.groovy index fd827c1..de6d159 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/tasks/PackageApplication.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/tasks/PackageApplication.groovy @@ -71,7 +71,6 @@ public class PackageApplication extends IncrementalTask implements OutputFileTas return src == null ? getProject().files().getAsFileTree() : src } - @Override protected void doFullTaskAction() { try { diff --git a/gradle/src/main/groovy/com/android/build/gradle/tasks/PreDex.groovy b/gradle/src/main/groovy/com/android/build/gradle/tasks/PreDex.groovy index b0aa26d..6a464fe 100644 --- a/gradle/src/main/groovy/com/android/build/gradle/tasks/PreDex.groovy +++ b/gradle/src/main/groovy/com/android/build/gradle/tasks/PreDex.groovy @@ -61,6 +61,7 @@ public class PreDex extends BaseTask { AndroidBuilder builder = getBuilder() taskInputs.outOfDate { change -> + //noinspection GroovyAssignabilityCheck File preDexedFile = getDexFileName(outFolder, change.file) //noinspection GroovyAssignabilityCheck 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 853a0a9..c7a748e 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 @@ -15,9 +15,12 @@ */ package com.android.build.gradle.tasks + +import com.android.build.gradle.internal.dsl.NdkConfigDsl import com.android.build.gradle.internal.tasks.BaseTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.Nested import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction /** @@ -33,6 +36,13 @@ public class RenderscriptCompile extends BaseTask { @OutputDirectory File resOutputDir + @OutputDirectory + File objOutputDir + + @OutputDirectory + File libOutputDir + + // ----- PRIVATE TASK API ----- @InputFiles @@ -42,14 +52,20 @@ public class RenderscriptCompile extends BaseTask { List<File> importDirs @Input - int optimLevel + int targetApi @Input - int targetApi + boolean supportMode + + @Input + int optimLevel @Input boolean debugBuild + @Nested + NdkConfigDsl ndkConfig + @TaskAction void taskAction() { // this is full run (always), clean the previous outputs @@ -59,6 +75,12 @@ public class RenderscriptCompile extends BaseTask { File resDestDir = getResOutputDir() emptyFolder(resDestDir) + File objDestDir = getObjOutputDir() + emptyFolder(objDestDir) + + File libDestDir = getLibOutputDir() + emptyFolder(libDestDir) + // get the import folders. If the .rsh files are not directly under the import folders, // we need to get the leaf folders, as this is what llvm-rs-cc expects. List<File> importFolders = getBuilder().getLeafFolders("rsh", @@ -69,8 +91,12 @@ public class RenderscriptCompile extends BaseTask { importFolders, sourceDestDir, resDestDir, + objDestDir, + libDestDir, getTargetApi(), getDebugBuild(), - getOptimLevel()) + getOptimLevel(), + getSupportMode(), + getNdkConfig().abiFilters) } } |