diff options
author | Xavier Ducrohet <xav@android.com> | 2011-01-10 18:35:03 -0800 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2011-01-18 16:51:18 -0800 |
commit | 68d0fb4cbfa47402910027c97bc91410da75ea10 (patch) | |
tree | 9306373df13e571ddfd4a7483abdcac458e13560 /anttasks | |
parent | 2afb28704a1d522aa17a9921a1643e2797c78255 (diff) | |
download | sdk-68d0fb4cbfa47402910027c97bc91410da75ea10.zip sdk-68d0fb4cbfa47402910027c97bc91410da75ea10.tar.gz sdk-68d0fb4cbfa47402910027c97bc91410da75ea10.tar.bz2 |
Add renderscript support to the Ant build system.
Change-Id: Iba1c956d33725716923da89b788f7f8d14524e41
Diffstat (limited to 'anttasks')
-rw-r--r-- | anttasks/src/com/android/ant/AaptExecLoopTask.java | 3 | ||||
-rw-r--r-- | anttasks/src/com/android/ant/AidlExecTask.java | 11 | ||||
-rw-r--r-- | anttasks/src/com/android/ant/AntConstants.java | 9 | ||||
-rw-r--r-- | anttasks/src/com/android/ant/RenderScriptTask.java | 143 | ||||
-rw-r--r-- | anttasks/src/com/android/ant/SetupTask.java | 6 |
5 files changed, 168 insertions, 4 deletions
diff --git a/anttasks/src/com/android/ant/AaptExecLoopTask.java b/anttasks/src/com/android/ant/AaptExecLoopTask.java index f3824ef..d7d53c9 100644 --- a/anttasks/src/com/android/ant/AaptExecLoopTask.java +++ b/anttasks/src/com/android/ant/AaptExecLoopTask.java @@ -302,6 +302,9 @@ public final class AaptExecLoopTask extends Task { task.setExecutable(mExecutable); task.setFailonerror(true); + File exe = new File(mExecutable); + task.setTaskName(exe.getName()); + // aapt command. Only "package" is supported at this time really. task.createArg().setValue(mCommand); diff --git a/anttasks/src/com/android/ant/AidlExecTask.java b/anttasks/src/com/android/ant/AidlExecTask.java index 862d745..f2fa094 100644 --- a/anttasks/src/com/android/ant/AidlExecTask.java +++ b/anttasks/src/com/android/ant/AidlExecTask.java @@ -72,11 +72,14 @@ public class AidlExecTask extends Task { @Override public void execute() throws BuildException { + if (mExecutable == null) { + throw new BuildException("AidlExecTask's 'executable' is required."); + } if (mFramework == null) { - throw new BuildException("AidlExecTask's framework is required."); + throw new BuildException("AidlExecTask's 'framework' is required."); } if (mGenFolder == null) { - throw new BuildException("AidlExecTask's genFolder is required."); + throw new BuildException("AidlExecTask's 'genFolder' is required."); } Project taskProject = getProject(); @@ -90,6 +93,9 @@ public class AidlExecTask extends Task { } } + File exe = new File(mExecutable); + String execTaskName = exe.getName(); + // now loop on all the source folders to find all the aidl to compile // and compile them for (String sourceFolder : sourceFolders) { @@ -109,6 +115,7 @@ public class AidlExecTask extends Task { task.setProject(taskProject); task.setOwningTarget(getOwningTarget()); task.setExecutable(mExecutable); + task.setTaskName(execTaskName); task.setFailonerror(true); task.createArg().setValue("-p" + mFramework); diff --git a/anttasks/src/com/android/ant/AntConstants.java b/anttasks/src/com/android/ant/AntConstants.java index 81c6682..a87d0d5 100644 --- a/anttasks/src/com/android/ant/AntConstants.java +++ b/anttasks/src/com/android/ant/AntConstants.java @@ -21,18 +21,23 @@ package com.android.ant; */ public interface AntConstants { - /** ant property with the path to the android.jar */ + /** ant property with the path to the android.jar file */ public final static String PROP_ANDROID_JAR = "android.jar"; - /** ant property with the path to the framework.jar */ + /** ant property with the path to the framework.aidl file */ public final static String PROP_ANDROID_AIDL = "android.aidl"; + /** ant property with the path to the renderscript framework include folder. */ + public final static String PROP_ANDROID_RENDERSCRIPT = "android.rs"; + /** ant property with the path to the aapt tool */ public final static String PROP_AAPT = "aapt"; /** ant property with the path to the aidl tool */ public final static String PROP_AIDL = "aidl"; /** ant property with the path to the dx tool */ public final static String PROP_DX = "dx"; + /** ant property with the path to the renderscript tool */ + public final static String PROP_RENDERSCRIPT = "renderscript"; /** ref id to the <path> object containing all the boot classpaths. */ public final static String PROP_CLASSPATH_REF = "android.target.classpath"; diff --git a/anttasks/src/com/android/ant/RenderScriptTask.java b/anttasks/src/com/android/ant/RenderScriptTask.java new file mode 100644 index 0000000..f001311 --- /dev/null +++ b/anttasks/src/com/android/ant/RenderScriptTask.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ant; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.ExecTask; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.PatternSet.NameEntry; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +/** + * Task to execute aidl. + * <p> + * It expects 3 attributes:<br> + * 'executable' ({@link Path} with a single path) for the location of the aidl executable<br> + * 'framework' ({@link Path} with a single path) for the "preprocessed" file containing all the + * parcelables exported by the framework<br> + * 'genFolder' ({@link Path} with a single path) for the location of the gen folder. + * + * It also expects one or more inner elements called "source" which are identical to {@link Path} + * elements. + */ +public class RenderScriptTask extends Task { + + private String mExecutable; + private String mFramework; + private String mGenFolder; + private String mResFolder; + private final List<Path> mPaths = new ArrayList<Path>(); + + /** + * Sets the value of the "executable" attribute. + * @param executable the value. + */ + public void setExecutable(Path executable) { + mExecutable = TaskHelper.checkSinglePath("executable", executable); + } + + public void setFramework(Path value) { + mFramework = TaskHelper.checkSinglePath("framework", value); + } + + public void setGenFolder(Path value) { + mGenFolder = TaskHelper.checkSinglePath("genFolder", value); + } + + public void setResFolder(Path value) { + mResFolder = TaskHelper.checkSinglePath("resFolder", value); + } + + public Path createSource() { + Path p = new Path(getProject()); + mPaths.add(p); + return p; + } + + @Override + public void execute() throws BuildException { + if (mExecutable == null) { + throw new BuildException("RenderScriptTask's 'executable' is required."); + } + if (mFramework == null) { + throw new BuildException("RenderScriptTask's 'framework' is required."); + } + if (mGenFolder == null) { + throw new BuildException("RenderScriptTask's 'genFolder' is required."); + } + if (mResFolder == null) { + throw new BuildException("RenderScriptTask's 'resFolder' is required."); + } + + Project taskProject = getProject(); + + // build a list of all the source folders + ArrayList<String> sourceFolders = new ArrayList<String>(); + for (Path p : mPaths) { + String[] values = p.list(); + if (values != null) { + sourceFolders.addAll(Arrays.asList(values)); + } + } + + File exe = new File(mExecutable); + String execTaskName = exe.getName(); + + // now loop on all the source folders to find all the renderscript to compile + // and compile them + for (String sourceFolder : sourceFolders) { + // create a fileset to find all the aidl files in the current source folder + FileSet fs = new FileSet(); + fs.setProject(taskProject); + fs.setDir(new File(sourceFolder)); + NameEntry include = fs.createInclude(); + include.setName("**/*.rs"); + + // loop through the results of the file set + Iterator<?> iter = fs.iterator(); + while (iter.hasNext()) { + Object next = iter.next(); + + ExecTask task = new ExecTask(); + task.setTaskName(execTaskName); + task.setProject(taskProject); + task.setOwningTarget(getOwningTarget()); + task.setExecutable(mExecutable); + task.setFailonerror(true); + + task.createArg().setValue("-I"); + task.createArg().setValue(mFramework); + task.createArg().setValue("-p"); + task.createArg().setValue(mGenFolder); + task.createArg().setValue("-o"); + task.createArg().setValue(mResFolder); + task.createArg().setValue(next.toString()); + + // execute it. + task.execute(); + } + } + } +} diff --git a/anttasks/src/com/android/ant/SetupTask.java b/anttasks/src/com/android/ant/SetupTask.java index 4d1bac6..c3cedfd 100644 --- a/anttasks/src/com/android/ant/SetupTask.java +++ b/anttasks/src/com/android/ant/SetupTask.java @@ -199,9 +199,15 @@ public final class SetupTask extends ImportTask { String androidAidl = androidTarget.getPath(IAndroidTarget.ANDROID_AIDL); antProject.setProperty(AntConstants.PROP_ANDROID_AIDL, androidAidl); + String androidRS = androidTarget.getPath(IAndroidTarget.ANDROID_RS); + antProject.setProperty(AntConstants.PROP_ANDROID_RENDERSCRIPT, androidRS); + antProject.setProperty(AntConstants.PROP_AAPT, androidTarget.getPath(IAndroidTarget.AAPT)); antProject.setProperty(AntConstants.PROP_AIDL, androidTarget.getPath(IAndroidTarget.AIDL)); antProject.setProperty(AntConstants.PROP_DX, androidTarget.getPath(IAndroidTarget.DX)); + antProject.setProperty(AntConstants.PROP_RENDERSCRIPT, + sdkOsPath + SdkConstants.OS_SDK_PLATFORM_TOOLS_FOLDER + + SdkConstants.FN_RENDERSCRIPT); // sets up the boot classpath |