apps: centralize build.xml and fix AIDs

- Move to a central ant script
- Clean up the versions and AIDs.
- Move boot.c to use a partial select.
- Move WeaverCore and weaver.c to new (partial) select.
- Add explicit core applet id and match to build.
- Hack a little on weaver for ls debugging.

Test: install works and so do the boot tools.
Bug: 37518583
Change-Id: I811ba808a687beb90ffb736553be0009383c1ec3
diff --git a/apps/build.xml b/apps/build.xml
new file mode 100644
index 0000000..6eb0a75
--- /dev/null
+++ b/apps/build.xml
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2017 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.
+-->
+<!-- Ant XML for out of band building all applets using shared exports. -->
+<project basedir="." default="sample_apps" name="libese sample applet build scripts">
+
+<!-- Project-wide properties -->
+<!-- TODO: move to file="build.properties" -->
+<property name="build" location="${basedir}/build"/>
+<property name="prereqs.dir" location="${basedir}/prereqs"/>
+<property name="out" location="${basedir}/out"/>
+
+<property name="api.root" location="${build}/jcop/targetpack"/>
+<property name="api.dir" location="${api.root}/apis/jcopx-4.0-R2"/>
+
+<property name="api.name" value="com.nxp.id.jcop.eclipse.targetpacks1_4.10.0.1.jar"/>
+<property name="ls.name" value="ls_library_v02.00.jar"/>
+<property name="ls.dir" location="${build}/loaderservice"/>
+
+<property name="prereqs.manual" value="${ls.name},${api.name}"/>
+
+<target name="check-checksum">
+    <checksum file="${tocheck}" algorithm="SHA-512" fileext=".SHA-512" pattern="{0} {1}"
+        verifyProperty="checksum_verifies"/>
+    <fail message="Checksum mismatch on ${tocheck}">
+        <condition>
+            <not>
+                <istrue value="${checksum_verifies}" />
+            </not>
+        </condition>
+    </fail>
+</target>
+
+<target name="download_prereqs">
+    <!-- Grab the awesome ant helper. -->
+    <get src="https://github.com/martinpaljak/ant-javacard/releases/download/v1.7/ant-javacard.jar" dest="${prereqs.dir}" skipexisting="true"/>
+
+    <!-- Grab the sdk. -->
+    <get src="https://github.com/martinpaljak/oracle_javacard_sdks/archive/master.zip"
+         dest="${prereqs.dir}/javacard_sdks.zip" skipexisting="true"/>
+</target>
+
+<target name="checksum_prereqs" depends="download_prereqs">
+    <checksum algorithm="SHA-512" fileext=".SHA-512" pattern="{0} {1}">
+        <fileset dir="${prereqs.dir}">
+           <exclude name="*.SHA-512"/>
+        </fileset>
+    </checksum>
+</target>
+
+<target name="validate_prereqs" depends="download_prereqs,manual_prereqs">
+  <checksum algorithm="SHA-512" fileext=".SHA-512" pattern="{0} {1}"
+            verifyProperty="checksum_verifies">
+      <fileset dir="${prereqs.dir}">
+           <exclude name="*.SHA-512"/>
+      </fileset>
+  </checksum>
+  <fail message="Checksum mismatch on ${tocheck}">
+      <condition>
+            <not>
+                <istrue value="${checksum_verifies}" />
+            </not>
+        </condition>
+    </fail>
+</target>
+
+<target name="manual_prereqs">
+    <fail message="Required files are missing from ${prereqs.dir}: ${prereqs.manual}.">
+        <condition>
+            <not>
+                <resourcecount count="2">
+                    <fileset id="fs" dir="${prereqs.dir}" includes="${prereqs.manual}"/>
+                </resourcecount>
+            </not>
+        </condition>
+    </fail>
+</target>
+
+<target name="paths">
+    <delete dir="${build}"/>
+    <mkdir dir="${out}"/>
+</target>
+
+<target name="common_dependencies" depends="paths,validate_prereqs">
+    <!-- Install the ant-javacard taskdef -->
+    <taskdef name="javacard" classname="pro.javacard.ant.JavaCard" classpath="${prereqs.dir}/ant-javacard.jar"/>
+    <!-- Explode the loaderservice jar and place it in the expected location. -->
+    <unzip src="${prereqs.dir}/${ls.name}" dest="${ls.dir}" />
+    <copy file="${prereqs.dir}/${ls.name}" todir="${ls.dir}"/>
+
+    <!-- Expand the required APIs into their root. -->
+    <unzip src="${prereqs.dir}/${api.name}" dest="${api.root}" />
+
+    <!-- Select and extract the JavaCard SDK. -->
+    <unzip src="${prereqs.dir}/javacard_sdks.zip" dest="${build}/" stripAbsolutePathSpec="true">
+      <patternset>
+        <include name="**/jc303_kit/**"/>
+      </patternset>
+      <cutdirsmapper dirs="1" />
+    </unzip>
+</target>
+
+<target name="shared_interfaces" depends="common_dependencies">
+<javacard jckit="${build}/jc303_kit">
+  <!-- CallbackInterface -->
+  <cap aid="A0000004765049584C475343000000"
+       package="com.android.verifiedboot.globalstate.callback"
+       version="0.1"
+       output="${out}/globalstate-callback.cap"
+       sources="boot/card/src/com/android/verifiedboot/globalstate/callback"
+       export="${build}/export/callback">
+       <import exps="${build}/export/callback"/>
+  </cap>
+  <!-- OwnerInterface -->
+  <cap aid="A0000004765049584C47534F000000"
+       package="com.android.verifiedboot.globalstate.owner"
+       version="0.1"
+       output="${out}/globalstate-owner.cap"
+       sources="boot/card/src/com/android/verifiedboot/globalstate/owner"
+       export="${build}/export/owner">
+       <import exps="${build}/export/owner"/>
+  </cap>
+</javacard>
+</target>
+
+<target name="avb_storage" depends="shared_interfaces">
+    <!-- Remove the duplicate .exps -->
+    <delete>
+        <fileset dir="${api.dir}" includes="*.exp"/>
+    </delete>
+    <javacard jckit="${build}/jc303_kit">
+      <!-- Base version (Version + .1) for displacing a preinstalled package on early cards. -->
+      <cap aid="A0000004765049584C424F4F540000"
+           package="com.android.verifiedboot.storage"
+           version="2.1"
+           output="${out}/avb_storage_clobber.cap"
+           sources="boot/card/src/com/android/verifiedboot"
+           export="${build}/export/avb_storage">
+        <!-- Use supplied exp and build interface jar from the eclipse plugin targetpack. -->
+        <import exps="${api.dir}" jar="${api.dir}/api-jcopx-4.0-R2.jar"/>
+        <!-- Requires ls_library to be on the device already. -->
+        <import exps="${ls.dir}" jar="${ls.dir}/${ls.name}"/>
+        <!-- Grab the other interfaces from export/ -->
+        <import exps="${build}/export/owner" jar="${build}/export/owner/owner.jar" />
+        <import exps="${build}/export/callback" jar="${build}/export/callback/callback.jar" />
+        <!-- 14th byte must be in sync with above
+             15th byte is 01 for the ELM.
+             16th byte is 01 for the applet.
+          -->
+        <applet class="com.android.verifiedboot.storage.Storage"
+                aid="A0000004765049584C424F4F54000101"/>
+        <import exps="${build}/export/avb_storage"/>
+      </cap>
+      <!-- 14th byte is the version. Increment on each release. -->
+      <cap aid="A0000004765049584C424F4F540200"
+           package="com.android.verifiedboot.storage"
+           version="2.0"
+           output="${out}/avb_storage.cap"
+           sources="boot/card/src/com/android/verifiedboot"
+           export="${build}/export/avb_storage">
+        <!-- Use supplied exp and build interface jar from the eclipse plugin targetpack. -->
+        <import exps="${api.dir}" jar="${api.dir}/api-jcopx-4.0-R2.jar"/>
+        <!-- Requires ls_library to be on the device already. -->
+        <import exps="${ls.dir}" jar="${ls.dir}/${ls.name}"/>
+        <!-- Grab the other interfaces from export/ -->
+        <import exps="${build}/export/owner" jar="${build}/export/owner/owner.jar" />
+        <import exps="${build}/export/callback" jar="${build}/export/callback/callback.jar" />
+        <!-- 14th byte must be in sync with above
+             15th byte is 01 for the ELM.
+             16th byte is 01 for the applet.
+          -->
+        <applet class="com.android.verifiedboot.storage.Storage"
+                aid="A0000004765049584C424F4F54020101"/>
+        <import exps="${build}/export/avb_storage"/>
+      </cap>
+    </javacard>
+</target>
+
+<target name="weaver" depends="shared_interfaces">
+    <!-- Remove the duplicate .exps -->
+    <delete>
+        <fileset dir="${api.dir}" includes="*.exp"/>
+    </delete>
+    <javacard jckit="${build}/jc303_kit">
+      <!-- Comm applet -->
+      <cap aid="A000000476575652434F4D4D300100"
+           package="com.android.weaver"
+           version="1.0"
+           output="${out}/weaver_comm.cap"
+           sources="weaver/card/src/com/android/weaver"
+           export="${build}/export/comm">
+        <applet class="com.android.weaver.Weaver"
+                aid="A000000476575652434F4D4D30010101"/>
+        <import exps="${build}/export/comm" />
+        <!-- Use supplied exp and build interface jar from the eclipse plugin targetpack. -->
+        <import exps="${api.dir}" jar="${api.dir}/api-jcopx-4.0-R2.jar"/>
+      </cap>
+      <!-- Core applet -->
+      <cap aid="A000000476575652434f5245300100"
+           package="com.android.weaver.core"
+           version="1.0"
+          output="${out}/weaver_core.cap"
+          sources="weaver/card/src/com/android/weaver/core"
+          export="${build}/export/core">
+        <applet class="com.android.weaver.core.WeaverCore"
+                aid="A000000476575652434F524530010101"/>
+        <import exps="${build}/export/comm" jar="${build}/export/comm/weaver.jar" />
+        <!-- Use supplied exp and build interface jar from the eclipse plugin targetpack. -->
+        <import exps="${api.dir}" jar="${api.dir}/api-jcopx-4.0-R2.jar"/>
+      </cap>
+    </javacard>
+</target>
+
+<target name="sample_apps" depends="weaver,avb_storage">
+</target>
+
+</project>
+
+
+