Fix code that outputs the usage information following a command
[jnode-mirror.git] / all / build-x86.xml
blob781cc65b1a85a907acca99c98b67936c09336f8b
1 <project name="JNode-x86" default="all" basedir=".">
3         <property name="my-build.dir" value="${build.dir}/x86" />
4         <property name="my-lib.dir" value="${basedir}/lib/x86" />
5         <property name="my-conf.dir" value="${basedir}/conf/x86" />
7         <property name="src.native.dir" value="${root.dir}/core/src/native" />
8         <property name="build.netboot.dir" value="${my-build.dir}/netboot" />
9         <property name="jnode.disk" value="${my-build.dir}/jnodedisk${jnode.bits}.dat" />
10         <property name="jnode.disk.pln" value="${my-build.dir}/jnodedisk${jnode.bits}.pln" />
11         <property name="jnode.disk.geometry" value="64/16/63" />
13         <property name="jnode.virtual.memsize" value="512" />
14         <property name="logFile" value="${build.dir}/debugger.txt" />
16         <property name="grub-ver" value="grub-0.97-i386-pc" />
17         <property name="grub.dir" value="${my-build.dir}/${grub-ver}/boot/grub" />
18         <property name="grub.dist" value="${my-lib.dir}/${grub-ver}.tar.gz" />
20         <property name="grub.stage1.name" value="stage1" />
21         <property name="grub.stage2.name" value="stage2" />
22         <property name="grub.menu" value="${my-conf.dir}/menu.lst" />
23         <property name="grub.menu.cdrom" value="${my-conf.dir}/menu-cdrom.lst" />
25   <!-- Properties for building the boot files for windows NT/2K/XP -->
26   <property name="jnode.install-nt.dir" value="C:\jnode" />
27   <!-- (hd0,0) stands for harddisk 0, partition 0 -->
28   <property name="partition-nt.grub.menu" value="(hd0,0)" />
29   <!-- patch -->
30   <property name="partition-nt.grub.menu.final" value="${partition-nt.grub.menu}/jnode" />
31   <property name="partition-nt" value="C:" />
33         <property name="bin-nt.dir" value="${basedir}\bin-nt" />
34         <property name="conf-nt.dir" value="${basedir}\conf\x86-nt" />
35         <property name="lib-nt.dir" value="${basedir}\lib\x86-nt" />
37         <property name="grub.stage1-nt.name" value="stage1-nt" />
38         <property name="grub.stage2-nt.name" value="stage2-nt" />
40         <property name="grub.stage1-nt" value="${lib-nt.dir}\${grub.stage1-nt.name}" />
41         <property name="grub.stage2-nt" value="${lib-nt.dir}\${grub.stage2-nt.name}" />
43         <property name="grub.install-nt.exe" value="${bin-nt.dir}\grubinstall-nt.exe" />
44         <!-- end of Properties for building the boot files for windows NT/2K/XP -->
46         <path id="cp-x86">
47                 <pathelement location="${jnode-mmtk.jar}" />
48                 <pathelement location="${jnode-builder.jar}" />
49                 <pathelement location="${jnode-core.jar}" />
50                 <pathelement location="${jnode-fs.jar}" />
51                 <pathelement location="${jnode-shell.jar}" />
52                 <pathelement location="${jnode-net.jar}" />
53                 <pathelement location="${jnode-gui.jar}" />
54                 <path refid="cp" />
55                 <pathelement location="${my-conf.dir}" />
56                 <pathelement location="${grub.dir}" />
57                 <pathelement location="${descriptors.dir}" />
58                 <pathelement location="${dom4j.jar}" />
59                 <pathelement location="${mmtk.jar}" />
60         </path>
62         <target name="test-properties">
63                 <condition property="x86-properties.exists">
64                         <available file="build-x86.properties" />
65                 </condition>
66         </target>
67         <target name="load-properties" if="x86-properties.exists">
68                 <property file="build-x86.properties" />
69         </target>
70         <target name="default-properties" unless="x86-properties.exists">
71                 <property name="jnodedrive.dir" value="${my-build.dir}" />
72         </target>
74         <target name="prepare-props" depends="test-properties,load-properties,default-properties">
75                 <property name="jnode.kernel.dir" value="${jnodedrive.dir}" />
76                 <property name="jnode.kernel" value="${jnode.kernel.dir}/jnode${jnode.bits}.gz" />
77                 <property name="jnode.compiler" value="default" />
79                 <property name="build.native.dir" value="${my-build.dir}/${jnode.bits}bits/native" />
80                 <property name="build.bootimage.dir" value="${my-build.dir}/${jnode.bits}bits/bootimage" />
81         <condition property="vmware.vmx.overrides" value="">
82                 <and>
83                 <not>
84                         <isset property="vmware.vmx.overrides"/>
85                     </not>
86                 </and>
87         </condition>
88             <condition property="vmware.vmx.vmdk.image" 
89                 value="${jnode.virtual.disk.dir}/${jnode.virtual.disk}" else="">
90                 <and>
91                         <equals arg1="${jnode.virtualization.platform}" arg2="vmware" casesensitive="false"/>
92                 <isset property="jnode.virtual.disk.dir"/>
93                 <isset property="jnode.virtual.disk"/>
94                 </and>
95             </condition>
96         </target>
98         <!-- Initialize all project directories -->
99         <target name="prepare-dirs" depends="prepare-props">
100                 <mkdir dir="${build.native.dir}" />
101                 <mkdir dir="${build.native.dir}/output" />
102                 <mkdir dir="${build.native.dir}/src" />
103                 <mkdir dir="${build.bootimage.dir}" />
104                 <mkdir dir="${build.netboot.dir}" />
105         </target>
107         <target name="test-grub">
108                 <available file="${grub.dir}" property="grub.exists" />
109         </target>
111         <target name="grub" depends="prepare-dirs,test-grub" unless="grub.exists">
112                 <untar src="${grub.dist}" dest="${my-build.dir}" compression="gzip" />
113         </target>
115         <!-- Initialize all project properties -->
116         <target name="prepare" depends="grub">
117                 <copy todir="${grub.dir}">
118                         <fileset dir="${my-lib.dir}">
119                                 <include name="nbgrub-*" />
120                                 <include name="pxegrub-*" />
121                         </fileset>
122                         <fileset dir="${my-conf.dir}">
123                                 <include name="menu-nb.lst" />
124                                 <include name="menu-pxe.lst*" />
125                         </fileset>
126                 </copy>
127         </target>
129         <target name="asm-native" depends="prepare">
130                 <taskdef name="genconst" classname="org.jnode.build.x86.AsmConstBuilder" classpathref="cp-x86" />
131                 <taskdef name="asm" classname="org.jnode.ant.taskdefs.Asm" classpathref="cp-x86" />
133                 <genconst destfile="${build.native.dir}/src/java.inc" bits="${jnode.bits}"
134                   classesURL="file:///${jnode-core.jar}/,jar:file://${classlib.jar}!/,file:///${root.dir}/builder/build/classes/">
135                         <class classname="java.lang.Throwable" />
136                         <class classname="org.jnode.build.x86.BootImageBuilder" static="on" />
137                         <class classname="org.jnode.vm.SoftByteCodes" static="on" />
138                         <class classname="org.jnode.vm.scheduler.VmProcessor" />
139                         <class classname="org.jnode.vm.scheduler.VmProcessor" static="on" />
140                         <class classname="org.jnode.vm.scheduler.VmThread" />
141                         <class classname="org.jnode.vm.scheduler.VmThread" static="on" />
142                         <class classname="org.jnode.vm.classmgr.ObjectLayout" static="on" />
143                         <class classname="org.jnode.vm.classmgr.TIBLayout" static="on" />
144                         <class classname="org.jnode.vm.classmgr.VmArray" static="on" />
145                         <class classname="org.jnode.vm.classmgr.VmMethod" />
146                         <class classname="org.jnode.vm.classmgr.VmStatics" /> 
147                         <class classname="org.jnode.vm.classmgr.VmType" /> 
148                         <class classname="org.jnode.vm.x86.MSR" />
149                         <class classname="org.jnode.vm.x86.VmX86Processor" />
150                         <class classname="org.jnode.vm.x86.VmX86StackReader" static="on" /> 
151                         <class classname="org.jnode.vm.x86.VmX86Thread" />
152                         <class classname="org.jnode.vm.x86.VmX86Thread" static="on" />
153                         <class classname="org.jnode.vm.x86.VmX86Thread64" />
154                 </genconst>
156                 <dependset>
157                         <srcfileset dir="${src.native.dir}/x86" />
158                         <srcfileset dir="${build.native.dir}/src" />
159                         <targetfileset dir="${build.native.dir}/output" />
160                 </dependset>
162                 <asm srcdir="${src.native.dir}/x86" 
163                         destdir="${build.native.dir}/output" 
164                         outputFormat="elf" 
165                         extension="o" 
166                         bits="${jnode.bits}" 
167                         listfile="${build.native.dir}/jnodenative.lst"
168                         enablejnasm="${jnode.enable.jnasm}"
169                         version="${jnode-ver} ${TODAY}">
170                                 <includedir dir="${src.native.dir}/x86" />
171                                 <includedir dir="${build.native.dir}/src" />
172                                 <include name="jnode.asm" />
173                 </asm>
174         </target>
176         <!-- Build the java object file  -->
177         <target name="java-image" depends="asm-native">
178                 <taskdef name="bootimage" classname="org.jnode.build.x86.BootImageBuilder" classpathref="cp-x86" />
180                 <bootimage 
181                         destfile="${build.bootimage.dir}/bootimage.bin" 
182                         listfile="${build.bootimage.dir}/bootimage.lst" 
183                         debugfile="${build.bootimage.dir}/bootimage.debug" 
184                         kernelfile="${build.native.dir}/output/jnode.o" 
185                         pluginList="${system-plugin-list}" 
186                         pluginDir="${plugins.dir}" 
187                         targetArch="x86" 
188                         memMgrPluginId="${jnode.memmgr.plugin.id}" 
189                         cpu="${cpu}" 
190                         version="${jnode-ver}" 
191                         jnodeCompiler="${jnode.compiler}" 
192                         bits="${jnode.bits}"
193                         enableJNasm="${jnode.enable.jnasm}">
195                         <nanokernelsources srcfile="${src.native.dir}/x86/jnode.asm">
196                                 <includedir dir="${src.native.dir}/x86" />
197                                 <includedir dir="${build.native.dir}/src" />
198                         </nanokernelsources>
199                         
200             </bootimage>                        
202                 <gzip src="${build.bootimage.dir}/bootimage.bin" zipfile="${jnode.kernel}" />
203         </target>
205         <!-- Build the boot disk -->
206         <target name="boot-disk" depends="java-image" unless="no.bootdisk">
207                 <taskdef name="bootdisk" classname="org.jnode.build.BootDiskBuilder" classpathref="cp-x86" />
209                 <property name="bootdisk.dir" value="${my-build.dir}/${jnode.bits}bits/bootdisk" />
211                 <mkdir dir="${bootdisk.dir}" />
212                 <mkdir dir="${bootdisk.dir}/boot/grub" />
213                 <copy file="${jnode.kernel}" todir="${bootdisk.dir}" />
214                 <copy file="${grub.menu}" todir="${bootdisk.dir}/boot/grub" />
215                 <copy todir="${bootdisk.dir}">
216                         <fileset dir="${initjars.dir}">
217                                 <!-- Limit the size of the bootdisk -->
218                                 <include name="default.jgz"/>
219                                 <include name="full.jgz"/>
220                         </fileset>      
221                 </copy>
223                 <bootdisk destfile="${jnode.disk}" stage1ResourceName="${grub.stage1.name}" stage2ResourceName="${grub.stage2.name}" plnfile="${jnode.disk.pln}" geometry="${jnode.disk.geometry}">
224                         <fileset dir="${bootdisk.dir}" />
225                 </bootdisk>
226         </target>
228         <!-- Build the boot files for windows NT/2K/XP (with NTLDR) -->
229         <target name="boot-files-winNT" depends="java-image">
230                 <mkdir dir="${jnode.install-nt.dir}" />
232                 <copy file="${jnode.kernel}" todir="${jnode.install-nt.dir}" overwrite ="yes" />
233                 <copy file="${grub.menu}" todir="${jnode.install-nt.dir}" overwrite ="yes" />
234                 <copy todir="${jnode.install-nt.dir}" overwrite ="yes">
235                         <fileset dir="${initjars.dir}" />
236                 </copy>
237                 <copy file="${grub.stage1-nt}" todir="${jnode.install-nt.dir}" overwrite ="yes" />
238                 <copy file="${grub.stage2-nt}" todir="${jnode.install-nt.dir}" overwrite ="yes" />
240                 <replace file="${jnode.install-nt.dir}/menu.lst"
241                         token="(hd0,0)" value="${partition-nt.grub.menu}"/>
243     <!-- patch -->
244                 <replace file="${jnode.install-nt.dir}/menu.lst"
245                         token="${partition-nt.grub.menu}" value="${partition-nt.grub.menu.final}"/>
248                 <echo message="${grub.install-nt.exe} -d ${partition-nt} -1 ${jnode.install-nt.dir}\${grub.stage1-nt.name} -2 ${jnode.install-nt.dir}\${grub.stage2-nt.name} -m ${jnode.install-nt.dir}\menu.lst" />
250                 <!-- the following wait is needed else grubinstall will fail finding stage2 -->
251                 <sleep seconds="20" />
253                 <exec executable="${grub.install-nt.exe}">
254                         <arg line="-d ${partition-nt} -1 ${jnode.install-nt.dir}\${grub.stage1-nt.name} -2 ${jnode.install-nt.dir}\${grub.stage2-nt.name} -m ${jnode.install-nt.dir}\menu.lst" />
255                 </exec>
257     <!-- patch
258                 <replace file="${jnode.install-nt.dir}/menu.lst"
259                         token="${partition-nt.grub.menu}" value="${partition-nt.grub.menu.final}"/>
260                          -->
261         </target>
263         <macrodef name="create-cdrom">
264                 <attribute name="dir" />
265                 <attribute name="destfile" />
266                 <sequential>
267                         <mkdir dir="@{dir}/boot/grub" />
268                         <copy todir="@{dir}">
269                                 <fileset dir="${jnode.kernel.dir}" includes="jnode*.gz"/>
270                         </copy>
271                         <copy todir="@{dir}">
272                                 <fileset dir="${initjars.dir}" />
273                         </copy>
274                         <copy file="${my-lib.dir}/eltorito.s2" todir="@{dir}/boot/grub" />
275             <copy file="${my-lib.dir}/fat.s15" todir="@{dir}/boot/grub" />
276             <copy file="${my-lib.dir}/grub.s1" todir="@{dir}/boot/grub" />
277             <copy file="${my-lib.dir}/grub.s2" todir="@{dir}/boot/grub" />
278             <copy file="${grub.menu.cdrom}" tofile="@{dir}/boot/grub/menu.lst" />
279             <if>
280                 <equals arg1="${jnode.enable.mkisofs}" arg2="true" />
281                 <then>
282                     <!-- Fail on a Windows platform if there are spaces in the root dir's pathname.  It will
283                      lead to mkisofs dying with a misleading error message.  bluebit / crawley 2008-05-03 -->
284                     <fail message="Cannot build JNode from a directory with spaces in the pathname.">
285                           <condition>
286                         <and>
287                               <contains string="${os.name}" substring="windows" casesensitive="false" />
288                           <contains string="${root.dir}" substring=" " casesensitive="false" />
289                             </and>
290                           </condition>
291                         </fail>
292                     <exec executable="mkisofs">
293                                         <arg line="-o @{destfile} -R -b boot/grub/eltorito.s2 -no-emul-boot -boot-load-size 4 -boot-info-table @{dir}" />
294                                 </exec>
295                 </then>
296                 <else>
297                     <taskdef name="jiic-iso" classname="de.tu_darmstadt.informatik.rbg.hatlak.iso9660.ISOTask" classpathref="cp-x86" />                   
298                     <jiic-iso basedir="@{dir}"
299                                         destfile="@{destfile}"
300                                         enableRockRidge="true"
301                                         mkisofsCompatibility="true"
302                                         bootImage="@{dir}/boot/grub/eltorito.s2"
303                                         bootImageSectorCount="4"
304                                         genBootInfoTable="true"
305                                 />
306                 </else>
307             </if>
308         </sequential>
309         </macrodef>
311         <!-- Create a full distributable bootable CDROM image -->
312         <target name="cdrom" depends="prepare">
313                 <copy file="${sources.dist.tar.gz}" todir="${my-build.dir}/cdrom-full" />
314                 <create-cdrom destfile="${jnode-x86.iso}" dir="${my-build.dir}/cdrom-full" />
316                 <taskdef name="vmware" classname="org.jnode.build.VMwareBuilderTask" classpathref="cp-x86" />
317                 <vmware 
318                         isoFile="${jnode-x86.iso}"
319                         logFile="${logFile}"
320                         memSize="${jnode.virtual.memsize}"
321             saveDir="${save.dir}"
322                         vmdkImageFile="${vmware.vmx.vmdk.image}"
323                     overrideFile="${vmware.vmx.overrides}"
324                 />
325         </target>
327         <!-- Create a bootable CDROM image -->
328         <target name="cdrom-lite" depends="prepare">
329                 <create-cdrom destfile="${jnode-x86-lite.iso}" dir="${my-build.dir}/cdrom-lite" />
331                 <taskdef name="vmware" classname="org.jnode.build.VMwareBuilderTask" classpathref="cp-x86" />
332                 <vmware 
333                         isoFile="${jnode-x86-lite.iso}"
334                         logFile="${logFile}"
335                         memSize="${jnode.virtual.memsize}"
336             saveDir="${save.dir}"
337                         vmdkImageFile="${vmware.vmx.vmdk.image}"
338             overrideFile="${vmware.vmx.overrides}"
339                 />
340         </target>
342         <target name="cdrom_64-lite" depends="prepare">
343                 <create-cdrom destfile="${jnode-x86_64-lite.iso}" dir="${my-build.dir}/cdrom-lite" />
345                 <taskdef name="vmware" classname="org.jnode.build.VMwareBuilderTask" classpathref="cp-x86" />
346                 <vmware
347                         isoFile="${jnode-x86_64-lite.iso}"
348                         logFile="${logFile}"
349                         memSize="${jnode.virtual.memsize}"
350                         saveDir="${save.dir}"
351                         vmdkImageFile="${vmware.vmx.vmdk.image}"
352             overrideFile="${vmware.vmx.overrides}"
353                 />
354         </target>
356         <!-- Prepare for netboot -->
357         <target name="netboot" depends="java-image" unless="no.netboot">
358                 <copy file="${jnode.kernel}" todir="${build.netboot.dir}" />
359                 <copy todir="${build.netboot.dir}">
360                         <fileset dir="${initjars.dir}" />
361                 </copy>
362                 <copy todir="${build.netboot.dir}">
363                         <fileset dir="${my-lib.dir}">
364                                 <include name="nbgrub-*" />
365                                 <include name="pxegrub-*" />
366                         </fileset>
367                         <fileset dir="${my-conf.dir}">
368                                 <include name="menu-nb.lst" />
369                                 <include name="menu-pxe.lst*" />
370                         </fileset>
371                 </copy>
372                 <mkdir dir="${build.netboot.dir}/plugins" />
373                 <copy todir="${build.netboot.dir}/plugins">
374                         <fileset dir="${plugins.dir}" />
375                 </copy>
376         </target>
378         <!-- Run all required targets -->
379         <target name="all" depends="boot-disk,netboot">
380         </target>
382 </project>