--- 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>