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)" />
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 -->
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}" />
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}" />
62 <target name="test-properties">
63 <condition property="x86-properties.exists">
64 <available file="build-x86.properties" />
67 <target name="load-properties" if="x86-properties.exists">
68 <property file="build-x86.properties" />
70 <target name="default-properties" unless="x86-properties.exists">
71 <property name="jnodedrive.dir" value="${my-build.dir}" />
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="">
84 <isset property="vmware.vmx.overrides"/>
88 <condition property="vmware.vmx.vmdk.image"
89 value="${jnode.virtual.disk.dir}/${jnode.virtual.disk}" else="">
91 <equals arg1="${jnode.virtualization.platform}" arg2="vmware" casesensitive="false"/>
92 <isset property="jnode.virtual.disk.dir"/>
93 <isset property="jnode.virtual.disk"/>
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}" />
107 <target name="test-grub">
108 <available file="${grub.dir}" property="grub.exists" />
111 <target name="grub" depends="prepare-dirs,test-grub" unless="grub.exists">
112 <untar src="${grub.dist}" dest="${my-build.dir}" compression="gzip" />
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-*" />
122 <fileset dir="${my-conf.dir}">
123 <include name="menu-nb.lst" />
124 <include name="menu-pxe.lst*" />
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" />
157 <srcfileset dir="${src.native.dir}/x86" />
158 <srcfileset dir="${build.native.dir}/src" />
159 <targetfileset dir="${build.native.dir}/output" />
162 <asm srcdir="${src.native.dir}/x86"
163 destdir="${build.native.dir}/output"
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" />
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" />
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}"
188 memMgrPluginId="${jnode.memmgr.plugin.id}"
190 version="${jnode-ver}"
191 jnodeCompiler="${jnode.compiler}"
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" />
202 <gzip src="${build.bootimage.dir}/bootimage.bin" zipfile="${jnode.kernel}" />
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"/>
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}" />
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}" />
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}"/>
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" />
258 <replace file="${jnode.install-nt.dir}/menu.lst"
259 token="${partition-nt.grub.menu}" value="${partition-nt.grub.menu.final}"/>
263 <macrodef name="create-cdrom">
264 <attribute name="dir" />
265 <attribute name="destfile" />
267 <mkdir dir="@{dir}/boot/grub" />
268 <copy todir="@{dir}">
269 <fileset dir="${jnode.kernel.dir}" includes="jnode*.gz"/>
271 <copy todir="@{dir}">
272 <fileset dir="${initjars.dir}" />
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" />
280 <equals arg1="${jnode.enable.mkisofs}" arg2="true" />
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.">
287 <contains string="${os.name}" substring="windows" casesensitive="false" />
288 <contains string="${root.dir}" substring=" " casesensitive="false" />
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}" />
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"
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" />
318 isoFile="${jnode-x86.iso}"
320 memSize="${jnode.virtual.memsize}"
321 saveDir="${save.dir}"
322 vmdkImageFile="${vmware.vmx.vmdk.image}"
323 overrideFile="${vmware.vmx.overrides}"
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" />
333 isoFile="${jnode-x86-lite.iso}"
335 memSize="${jnode.virtual.memsize}"
336 saveDir="${save.dir}"
337 vmdkImageFile="${vmware.vmx.vmdk.image}"
338 overrideFile="${vmware.vmx.overrides}"
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" />
347 isoFile="${jnode-x86_64-lite.iso}"
349 memSize="${jnode.virtual.memsize}"
350 saveDir="${save.dir}"
351 vmdkImageFile="${vmware.vmx.vmdk.image}"
352 overrideFile="${vmware.vmx.overrides}"
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}" />
362 <copy todir="${build.netboot.dir}">
363 <fileset dir="${my-lib.dir}">
364 <include name="nbgrub-*" />
365 <include name="pxegrub-*" />
367 <fileset dir="${my-conf.dir}">
368 <include name="menu-nb.lst" />
369 <include name="menu-pxe.lst*" />
372 <mkdir dir="${build.netboot.dir}/plugins" />
373 <copy todir="${build.netboot.dir}/plugins">
374 <fileset dir="${plugins.dir}" />
378 <!-- Run all required targets -->
379 <target name="all" depends="boot-disk,netboot">