buildframework/helium/tools/rombuild/rombuild.ant.xml
changeset 217 0f5e3a7fb6af
parent 179 d8ac696cc51f
child 587 85df38eb4012
--- a/buildframework/helium/tools/rombuild/rombuild.ant.xml	Fri Feb 05 11:59:41 2010 +0000
+++ b/buildframework/helium/tools/rombuild/rombuild.ant.xml	Thu Mar 04 15:10:37 2010 +0200
@@ -20,328 +20,88 @@
 
 ============================================================================
 -->
+<!--* @package rombuild -->
 <project name="rombuild" xmlns:hlm="http://www.nokia.com/helium">
     <description>
         ROM image creation using iMaker.
         Flash config file generation.
     </description>
-    <import file="./trace_images/tracebuild.ant.xml" />
     <import file="imaker.ant.xml" />
+    
+    <!--* @property ee.rom.output.dir
+    /output/development_flash_images/engineering_english/logs
+    @type string
+    @editable required
+    @scope public
+    -->
+
+    <!--* @property core.rom.output.dir
+    /output/release_flash_images/rnd/core
+    @type string
+    @editable required
+    @scope public
+    -->
 
     <!-- should be overriden - default configuration -->
-    <!-- <property name="rombuild.makefile.name" value="mc_imaker_conf.mk" /> -->
+    <!-- The path to the iMaker executable file.
+    @type string
+    @scope private
+    -->
     <property name="imaker.command" location="${build.drive}\epoc32\tools\imaker.cmd" />
-    <property name="ee.makefile.target" value="ee_roms" />
-    <property name="subcon.makefile.target" value="subcon_roms" />
-    <property name="trace.makefile.target" value="trace_roms" />
-    <property name="ee_roms.log.file" value="${roms.log.dir}/${build.id}_ee_roms.log" />
-    <property name="trace.log.file" value="${roms.log.dir}/${build.id}_trace_roms.log" />
-    <property name="subcon.log.file" value="${roms.log.dir}/${build.id}_subcon_roms.log" />
-
-    <!-- Properties for image-creation target which is being used by IDOs -->
-    <property name="image_creation.copyto" value="${build.output.dir}/images" />
-    <property name="image_creation.drive" value="${build.drive}" />
-    <!-- Property for variant-image-creation -->
-    <property name="variant.image.targetpath" value="${build.output.dir}/variant_images" />
-
-    <!-- That macro runs iMaker using product the configuration generated by Helium. -->
-    <macrodef name="rombuildImakerMacro" uri="http://www.nokia.com/helium">
-        <attribute name="product" />
-        <attribute name="target" />
-        <sequential>
-            <var name="rom.product.path" unset="true" />
-            <if>
-                <istrue value="${rombuild.using.var}" />
-                <then>
-                    <script language="jython" setbeans="false">
-                        <![CDATA[
-import imaker
-import os
-if project.getProperty('build.drive') == None :
-    raise Exception("'build.drive' property is not defined")
-os.chdir(project.getProperty('build.drive') + os.sep)
-project.setProperty('rom.product.path', imaker.get_product_dir(r'@{product}'))
-                        ]]>
-                    </script>
-                </then>
-                <else>
-                    <exec executable="python" outputproperty="rom.product.path" dir="${build.drive}/" failonerror="${failonerror}">
-                        <arg line="${helium.dir}/tools/localisation/get_product_path.py @{product}" />
-                    </exec>
-                    <exec executable="python" outputproperty="rom.product.platform" dir="${build.drive}/" failonerror="${failonerror}">
-                        <arg line="${helium.dir}/tools/localisation/get_product_platform.py @{product}" />
-                    </exec>
-                </else>
-            </if>
-            <if>
-                <and>
-                    <equals arg1="${build.system}" arg2="ec-helium" />
-                    <isset property="rom.dryrun" />
-                </and>
-                <then>
-                    <echo message="target to run @{target}-dryrun" />
-                    <exec executable="${imaker.command}" dir="${build.drive}/" output="${build.drive}/dryrun_out.txt" append="true" failonerror="${failonerror}">
-                        <arg line="-p@{product} -f /epoc32/rom/${rom.product.path}/${rombuild.makefile.name}" />
-                        <arg value="@{target}-dryrun" />
-                    </exec>
-                </then>
-                <else>
-                    <if>
-                        <istrue value="${rombuild.using.var}" />
-                        <then>
-                            <exec executable="${imaker.command}" dir="${build.drive}/" failonerror="${failonerror}">
-                                <arg line="-p@{product} -f /epoc32/rom/${rom.product.path}/${rombuild.makefile.name}" />
-                                <arg value="@{target}" />
-                            </exec>
-                        </then>
-                        <else>
-                            <exec executable="${imaker.command}" dir="${build.drive}/" failonerror="${failonerror}">
-                                <arg line="-p@{product} -c${rom.product.platform} -f /epoc32/rom/${rom.product.path}/${rombuild.makefile.name}" />
-                                <arg value="@{target}" />
-                            </exec>
-                        </else>
-                    </if>
-                </else>
-            </if>
-        </sequential>
-    </macrodef>
 
 
-    <!-- Create engineering english image using ImageCreation.pl. -->
-    <target name="image-creation" if="image_creation.copyto">
-        <tstamp>
-            <format property="image.archive.date" pattern="ddmmyy'_'HHmmss" />
-        </tstamp>
-
-        <move todir="${build.drive}/archives/images/${image.archive.date}" failonerror="false">
-            <fileset dir="${build.output.dir}/images/" />
-        </move>
-        <mkdir dir="${build.output.dir}/images" />
-        <exec executable="perl" dir="${build.drive}/" failonerror="true">
-            <arg value="${helium.dir}/tools/compile/ImageCreation.pl" />
-            <arg value="-copyto" />
-            <arg value="${image_creation.copyto}" />
-            <arg value="-MyTraces" />
-            <arg value="${image_creation.MyTraces}" />
-            <arg value="-Drive" />
-            <arg value="${image_creation.drive}" />
-            <arg value="-product" />
-            <arg value="${image_creation.product}" />
-            <arg value="-type" />
-            <arg value="${image_creation.type}" />
-        </exec>
+    <!--
+        Creates subcon certified rom images.
+        The build will be based on the hlm:imakerconfigurationset referenced
+        as 'imaker.subcon.rom.config'.
+     -->
+    <target name="subcon-roms">
+        <if>
+            <isreference refid="imaker.subcon.rom.config" />
+            <then>
+                <antcall target="build-roms">
+                    <param name="imaker.rom.name" value="_subcon_roms" />
+                    <reference refid="imaker.subcon.rom.config" torefid="imaker.rom.config"/>
+                </antcall>
+            </then>
+            <else>
+                <echo>Configuration 'imaker.subcon.rom.config' not defined. Skipping subcon-roms build.</echo>
+            </else>
+        </if>
     </target>
 
-    <!-- Create variant image using Creator.pl tools.
-    -->
-    <target name="variant-image-creation" if="variant.image.hw">
-        <tstamp>
-            <format property="image.archive.date" pattern="ddmmyy'_'HHmmss" />
-        </tstamp>
-
-        <move todir="${build.drive}/archives/variant_images/${image.archive.date}" failonerror="false">
-            <fileset dir="${build.output.dir}/variant_images/" />
-        </move>
-        <mkdir dir="${build.output.dir}/variant_images" />
-        <exec executable="perl" dir="${build.drive}/" failonerror="true">
-            <arg value="${build.drive}/Creator.pl" />
-            <arg value="-hw" />
-            <arg value="${variant.image.hw}" />
-            <arg value="-lang" />
-            <arg value="${variant.image.lang}" />
-            <arg value="-core" />
-            <arg value="${variant.image.core}" />
-            <arg value="-variant" />
-            <arg value="${variant.image.variantcode}" />
-            <arg value="-type" />
-            <arg value="${variant.image.type}" />
-            <arg value="-sw" />
-            <arg value="${variant.image.sw}" />
-            <arg value="-targetpath" />
-            <arg value="${variant.image.targetpath}" />
-        </exec>
-    </target>
-
-    <!-- This targets call the image-creation target to be reexecuted in a build.
-        <deprecated>Should be done diferrently, e.g use imaker in new </deprecated>
-    -->
-    <target name="rerun-image-creation">
-        <runtarget target="image-creation" />
-    </target>
-
-    <!-- This targets call the variant-image-creation target to be reexecuted in a build.
-        <deprecated>Should be done diferrently, e.g use imaker in new </deprecated>
-    -->
-    <target name="rerun-variant-image-creation">
-        <runtarget target="variant-image-creation" />
-    </target>
-
-    <!-- Preparing rom image configuration expanding properties, flattening the xinclude stucture
-             and finally expanding properties again. 
-    -->
-    <target name="rombuild-prepare-input" depends="init-build-area">
-        <property name="rombuild.config.file.parsed" location="${build.output.dir}/rom_config.xml.parsed" />
-        <copy file="${rombuild.config.file}" tofile="${rombuild.config.file.parsed}.x1" overwrite="true">
-            <filterchain>
-                <expandproperties />
-                <tokenfilter>
-                    <replacestring from="http://www.w3.org/2003/XInclude" to="http://www.w3.org/2001/XInclude" />
-                </tokenfilter>
-            </filterchain>
-        </copy>
-        <!--<xcluder in="${rombuild.config.file.parsed}.x1" out="${rombuild.config.file.parsed}.xinclude" />-->
-        <xinclude file="${rombuild.config.file.parsed}.x1" tofile="${rombuild.config.file.parsed}.xinclude" />
-        <xmltask source="${rombuild.config.file.parsed}.xinclude" dest="${rombuild.config.file.parsed}.x2">
-            <attr path="//*" attr="xml:base" remove="true" />
-        </xmltask>
-        <copy file="${rombuild.config.file.parsed}.x2" tofile="${rombuild.config.file.parsed}" overwrite="true">
-            <filterchain>
-                <expandproperties />
-            </filterchain>
+    <!-- Internal target to export iMaker Helium additions. @scope private-->
+    <target name="rombuild-export-features">
+        <copy todir="${build.drive}/epoc32/rom/config" overwrite="true">
+            <fileset dir="${helium.dir}/tools/rombuild/features" casesensitive="false">
+                <include name="*.mk" />
+            </fileset>
         </copy>
     </target>
 
 
-    <!-- Creates ee-images
+    <!--
+        Creates trace rom images.
+        The build will be based on the hlm:imakerconfigurationset referenced
+        as 'imaker.trace.rom.config'.
      -->
-    <target name="ee-roms" depends="rombuild-create-makefile" unless="no.ncp">
-        <hlm:startSpecificLogMacro name="${ee_roms.log.file}" phase="roms"/>
-        <hlm:preECImakerMacro />
-        <for list="${product.list}" delimiter="," param="product.name">
-            <sequential>
-                <hlm:rombuildImakerMacro product="@{product.name}" target="${ee.makefile.target}" />
-            </sequential>
-        </for>
-        <hlm:ecImakerMacro makefile.target="${ee.makefile.target}" />
-        <hlm:stopSpecificLogMacro name="${ee_roms.log.file}" phase="roms"/>
-        <hlm:metadatarecord database="${metadata.dbfile}">
-            <hlm:textmetadatainput>
-                <fileset casesensitive="false" file="${ee_roms.log.file}" />
-                <metadatafilterset refid="filterset.ee.roms" />
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}_ee_roms.log" />
-        <!-- Todo: metadata: assertions for metadata parsing here -->
-        <hlm:publishMacro />
+    <target name="trace-roms">
+        <if>
+            <isreference refid="imaker.trace.rom.config" />
+            <then>
+                <antcall target="build-roms">
+                    <param name="imaker.rom.name" value="_trace_roms" />
+                    <reference refid="imaker.trace.rom.config" torefid="imaker.rom.config"/>
+                </antcall>
+            </then>
+            <else>
+                <echo>Configuration 'imaker.trace.rom.config' not defined. Skipping trace-roms build.</echo>
+            </else>
+        </if>
     </target>
 
 
-    <!-- Creates subcon certified rom images with imaker tool -->
-    <target name="subcon-roms" depends="rombuild-create-makefile" unless="no.ncp">
-        <hlm:startSpecificLogMacro name="${subcon.log.file}" phase="roms"/>
-        <mkdir dir="${subcon.build.drive}/output/development_flash_images/engineering_english/${product.name}/subcon" />
-        <hlm:preECImakerMacro />
-        <for list="${product.list}" delimiter="," param="product.name">
-            <sequential>
-                <hlm:rombuildImakerMacro product="@{product.name}" target="${subcon.makefile.target}" />
-            </sequential>
-        </for>
-        <hlm:ecImakerMacro makefile.target="${ee.makefile.target}" />
-        <hlm:stopSpecificLogMacro name="${subcon.log.file}" phase="roms"/>
-        <hlm:metadatarecord database="${metadata.dbfile}">
-            <hlm:textmetadatainput>
-                <fileset casesensitive="false" file= "${subcon.log.file}"/>
-                <metadatafilterset refid="filterset.subcon.roms" />
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}_subcon_roms.log" />
-        <!-- Todo: metadata: insert assertions for metadata parsing here -->
-        <hlm:publishMacro />
-    </target>
-
-    <!-- Private: Internal target to export iMaker Helium additions. -->
-    <target name="rombuild-export-features">
-        <copy todir="${build.drive}/epoc32/rom/config" overwrite="true">
-            <fileset dir="${helium.dir}/tools/rombuild/features" casesensitive="false">
-                <include name="*.mk" />
-                <include name="unittest/*.mk" />
-            </fileset>
-        </copy>
-    </target>
-
-    <!-- iMaker related targets -->
-    <target name="rombuild-create-makefile" depends="rombuild-export-features,rombuild-prepare-input">
-        <!-- Just generate the makefile for all the product available in product list. -->
-        <hlm:python>
-import os
-
-import configuration
-import rom
-
-os.chdir(r'${build.drive}/')
-configBuilder = configuration.NestedConfigurationBuilder(open(r'${rombuild.config.file.parsed}', 'r'))
-configSet = configBuilder.getConfiguration()
-for product in r'${product.list}'.split(','):
-    builder = rom.IMakerRomBuilder(configSet, product, (r'${rombuild.using.var}'.lower() == "true"))
-    builder.build()
-        </hlm:python>
-    </target>
-
-
-
-
-    <!-- Creates trace rom images -->
-    <target name="trace-roms" depends="rombuild-create-makefile" unless="no.ncp">
-        <hlm:startSpecificLogMacro name="${trace.log.file}" phase="roms"/>
-        <hlm:preECImakerMacro />
-        <for list="${product.list}" delimiter="," param="product.name">
-            <sequential>
-                <hlm:rombuildImakerMacro product="@{product.name}" target="${trace.makefile.target}" />
-            </sequential>
-        </for>
-        <hlm:ecImakerMacro makefile.target="${ee.makefile.target}" />
-        <hlm:stopSpecificLogMacro name="${trace.log.file}" phase="roms"/>
-        <!-- Todo: Make sure that logfilter is added to the filterset -->
-        <hlm:metadatarecord database="${metadata.dbfile}">
-            <hlm:textmetadatainput>
-                <fileset casesensitive="false" file="${trace.log.file}" />
-                <metadatafilterset refid="filterset.trace.rom" />
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:generateBuildStatus file="${build.id}_trace_roms.log" />
-        <!-- Todo: metadata: insert assertions for metadata parsing here -->
-        <hlm:publishMacro />
-    </target>
-
-    <!-- Single product configuration support
-        <deprecated>Please consider using new iMaker integration.</deprecated>
-    -->
-    <target name="ee-roms-product" depends="rombuild-create-makefile" unless="no.ncp">
-        <sequential>
-            <hlm:preECImakerMacro />
-            <hlm:rombuildImakerMacro product="${product.name}" target="${ee.makefile.target}" />
-            <hlm:ecImakerMacro makefile.target="${ee.makefile.target}" />
-        </sequential>
-    </target>
-
-    <!-- Used for parallel rom image creation using dry run approach -->
-    <macrodef name="preECImakerMacro" uri="http://www.nokia.com/helium">
-        <sequential>
-            <delete file="${build.drive}/dryrun_out.txt" failonerror="false" />
-        </sequential>
-    </macrodef>
-
-    <!-- Target to run imaker in parallel rom image creation for S60 3.2 based products -->
-    <macrodef name="ecImakerMacro" uri="http://www.nokia.com/helium">
-        <attribute name="makefile.target" />
-        <sequential>
-            <if>
-                <and>
-                    <equals arg1="${build.system}" arg2="ec-helium" />
-                    <isset property="rom.dryrun" />
-                </and>
-                <then>
-                    <antcall target="compile-ec-helium">
-                        <param name="skip.compile-ec-patch" value="yes" />
-                        <param name="sysdef.configuration" value="@{makefile.target}" />
-                        <param name="ec.makefile.file" location="${build.drive}/@{makefile.target}.make" />
-                    </antcall>
-                </then>
-            </if>
-        </sequential>
-    </macrodef>
-
-    <!--Private: Internal iMaker macro. -->
+    <!-- Internal iMaker macro. @scope private -->
     <macrodef name="internalImakerMacro" uri="http://www.nokia.com/helium">
         <attribute name="product" />
         <attribute name="target" />
@@ -366,7 +126,7 @@
                     <var name="var.makefile" value="-f ${rom.product.path}/@{makefile}" />
                 </else>
             </if>
-            <exec executable="${imaker.command}" dir="${build.drive}" failonerror="${failonerror}">
+            <exec executable="${imaker.command}" dir="${build.drive}/" failonerror="${failonerror}">
                 <arg line="-p@{product} @{cmd}" />
                 <arg line="${var.makefile}" />
                 <arg line="@{cmd}" />
@@ -375,112 +135,4 @@
         </sequential>
     </macrodef>
 
-    <!-- Timestamp used in flash config file generation -->
-    <tstamp>
-        <format property="fota.release.date" pattern="dd-MM-yy" />
-    </tstamp>
-
-    <!-- Create flash configration files -->
-    <target name="flash-config-file" if="flash.config.enabled">
-        <runtarget target="rombuild-prepare-input" />
-        <runtarget target="rombuild-create-makefile" />
-
-        <property name="flash.config.makefile.target" value="flash_config" />
-        <property name="flash.config.makefile.name" value="mc_flash_config.mk" />
-        <hlm:python>
-import configuration
-import flash_config
-import os
-os.chdir(r'${build.drive}/')
-configBuilder = configuration.NestedConfigurationBuilder(open(r'${rombuild.config.file.parsed}', 'r'))
-configSet = configBuilder.getConfiguration()
-for product in r'${product.list}'.split(','):
-    writer = flash_config.FlashConfigurationWriter(configSet, product)
-    writer.write()
-    </hlm:python>
-        <for list="${product.list}" delimiter="," param="product.name">
-            <sequential>
-                <hlm:internalImakerMacro product="@{product.name}" target="${flash.config.makefile.target}" makefile="${flash.config.makefile.name}" />
-            </sequential>
-        </for>
-    </target>
-
-    <!-- The target ido-iby-copy copies the iby files from ido.src.root to ido.romtree
-        Two properties that define from where the files are copied from and whre to. Defauls are 
-        for "ido.src.tree" default value is "${build.drive}${ido.src.root}"  
-        for "ido.romtree" default value is "${build.drive}${env.EPOCROOT}/epoc32/rom/include"  .
-         The IDO should define the ido.src.root and ido.romtree to override the defauls  
-         <deprecated>IDO must now move to the new sysdef structure and use ido-copy-iby.</deprecated>
-    -->
-    <target name="ido-iby-copy">
-        <property name="ido.src.tree" value="${build.drive}${ido.src.root}" />
-        <property name="ido.romtree" value="${build.drive}${env.EPOCROOT}/epoc32/rom/include" />
-        <echo>New files</echo>
-        <!-- the files are in rom folder -->
-        <copy todir="${ido.romtree}" verbose="true" flatten="true">
-            <fileset dir="${ido.src.tree}">
-                <exclude name="**/internal/**" />
-                <exclude name="**/tsrc/**" />
-                <include name="**/rom/*.iby" />
-            </fileset>
-        </copy>
-        <echo>Old files</echo>
-
-        <copy todir="${ido.romtree}" verbose="true" flatten="true" overwrite="true">
-            <fileset dir="${ido.src.tree}">
-                <exclude name="**/internal/**" />
-                <exclude name="**/tsrc/**" />
-                <include name="**/rom/*.iby" />
-            </fileset>
-        </copy>
-    </target>
-
-
-    <!-- Two properties that define from where the files are copied and what platform is used.
-         The IDO should define the ido.src.root and ido.cenrep.platform 
-         The properties ido.cenrep.root and ido.cenrep.target mey be overriden by the user.
-         <deprecated>IDO must now move to the new sysdef structure and use ido-create-cenrep.</deprecated>
-     -->
-    <target name="ido-cenrep" if="ido.cenrep.platform">
-        <property name="ido.src.tree" value="${build.drive}${ido.src.root}" />
-        <property name="ido.cenrep.root" value="${build.drive}${env.EPOCROOT}/epoc32/tools/cenrep" />
-        <property name="ido.cenrep.target" value="${build.drive}${env.EPOCROOT}/epoc32/data/z/private/10202be9" />
-        <echo>Generating cenrep files</echo>
-
-        <copy todir="${ido.cenrep.root}" verbose="true" flatten="true">
-            <fileset dir="${ido.src.tree}">
-                <include name="**/cenrep/keys_*.xls" />
-            </fileset>
-        </copy>
-
-        <!-- in cenrep dir execut 'generate_cenrep_inifile.pl -r %s -d .' % platform -->
-        <exec executable="perl" dir="${ido.cenrep.root}" failonerror="true">
-            <arg value="${ido.cenrep.root}/generate_cenrep_inifile.pl" />
-            <arg value="-r" />
-            <arg value="${ido.cenrep.platform}" />
-            <arg value="-d" />
-            <arg value="." />
-        </exec>
-        <!-- Copy generated files to target path -->
-        <copy todir="${ido.cenrep.target}" verbose="true" flatten="true">
-            <fileset dir="${ido.cenrep.root}">
-                <include name="????????.txt" />
-            </fileset>
-        </copy>
-
-    </target>
-
-    <!--
-        Implement a solution to create build information for imaker.
-    -->
-    <target name="rombuild-imaker-create-buildinfo">
-        <property name="rombuild.buildinfo.template" location="${helium.dir}/tools/common/templates/imaker/image_conf_buildinfo.mk.ftl" />
-        <property name="rombuild.buildinfo.output" location="${build.drive}${env.EPOCROOT}epoc32/rom/config/image_conf_buildinfo.mk" />
-        <fmpp sourceFile="${rombuild.buildinfo.template}" outputFile="${rombuild.buildinfo.output}">
-            <data expandProperties="yes">
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-
 </project>