<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.openembedded.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thebohemian</id>
	<title>Openembedded.org - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.openembedded.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thebohemian"/>
	<link rel="alternate" type="text/html" href="https://www.openembedded.org/wiki/Special:Contributions/Thebohemian"/>
	<updated>2026-04-30T17:58:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4589</id>
		<title>Fosdem 2012</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4589"/>
		<updated>2012-01-30T09:28:40Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Manning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Conferences]]&lt;br /&gt;
&lt;br /&gt;
= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday, Sunday until ~4pm)&lt;br /&gt;
* Alex Lennon (Saturday, Sunday)&lt;br /&gt;
* Henning Heinold (Saturday, Sunday)&lt;br /&gt;
* Ulf Samuelsson (Saturday, Sunday)&lt;br /&gt;
* Paul Eggleton (Saturday, Sunday)&lt;br /&gt;
* Marco Cavallini (Saturday)&lt;br /&gt;
* Radoslav Kolev (Sunday afternoon) - I&#039;ll be leaving Brussels on Monday, so I can stay until later to help with cleaning up tables, etc.&lt;br /&gt;
* Florian Boor&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
A bunch of tasks need to be carried out to make our attendance a pleasant experience. Each task needs a volunteer who is willing to help.&lt;br /&gt;
&lt;br /&gt;
=== Table cloth ===&lt;br /&gt;
We only have a single table cloth (it washed but has a negligible stain from a quick soldering action that happened last year). We definitely need a 2nd one to also cover our second table. The FOSDEM tables are pretty huge (2.5m length), so chose a reasonably sized cloth. Additionally it would be super cool to have the OpenEmbedded logo printed on it. The idea would be to show the logo on the front side of our tables. For that the &#039;OE&#039; sign should not be taller than say 50cm (The tables are approximately 70cm high.).&lt;br /&gt;
&lt;br /&gt;
Volunteer: Philip Balister plans to bring 2 table cloths carrying the OE logo.&lt;br /&gt;
&lt;br /&gt;
=== Bringing an TFT LCD ===&lt;br /&gt;
Displaying a presentation during the time of the conference makes our stand visually more attractive. We have a simple OpenDocument presentation in our SCM that can be used for this. However we need a display as well. If you come by car and can transport a display that&#039;d be great. Getting a screen is not so complicated. Robert Schuster could send one to you by mail.&lt;br /&gt;
&lt;br /&gt;
Volunteer: Florian Boor, a display is part of an event box he brings&lt;br /&gt;
&lt;br /&gt;
=== Poster ===&lt;br /&gt;
A nice poster with updated sponsor was used for 2011&#039;s LinuxTag in Berlin. This poster needs to be brought to FOSDEM. Where is it right now and can it be taken to Brussels?&lt;br /&gt;
&lt;br /&gt;
Volunteer: Henning Heinold (brings it from Berlin)&lt;br /&gt;
&lt;br /&gt;
=== Flyers ===&lt;br /&gt;
Years ago we printed a bunch (2500) of flyers. We still have a bunch of them left (exact number unknown; will update this as soon as I know). As the text is already a few years old it makes sense to update the actual document (it is in openembedded/contrib/marketing/oe-flyer.pdf) and print new ones.&lt;br /&gt;
&lt;br /&gt;
Volunteer: Henning and Florian bring some&lt;br /&gt;
&lt;br /&gt;
=== Device Tags ===&lt;br /&gt;
People standing in front of our booth often want to know what kind of device it is that blinks so funnily. ;) We could make things easier by being able to print small tags providing some information about board manufacturer, CPU, RAM and what its relation to OpenEmbedded is.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - please send details of any tags needed to me, (ajlennon at dynamicdevices.co.uk) in reasonable time.&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo.&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - Gem (i.MX28 based telematics board) - Booting OpenEmbedded with an end-user demo running (hopefully)&lt;br /&gt;
&lt;br /&gt;
Ulf Samuelsson - Atmel AT91SAM9Gx5 Kit with 5 CPU Modules (G15,G25,G35,X25,X35)&lt;br /&gt;
                 Will boot the OpenEmbedded from www.linux4sam.org&lt;br /&gt;
                 A raffle for the kit will be held in the Embedded DevRoom,&lt;br /&gt;
                 and you have to visit the OpenEmbedded stand to leave your business card.&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
**WiFi-Router in client mode to provide Internet access for Ethernet-based devices&lt;br /&gt;
**2 1m-Ethernet cables&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2012? Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
* Henning Heinold (woglinde)&lt;br /&gt;
* Paul Eggleton (bluelightning)&lt;br /&gt;
* Marco Cavallini (mckoan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;br /&gt;
&lt;br /&gt;
Saint Nicolas&lt;br /&gt;
  Hôtel Saint Nicolas *** &lt;br /&gt;
  Rue Marché aux Poulets 32 &lt;br /&gt;
  1000 Bruxelles Tél. +32/2-219.04.40 &lt;br /&gt;
  Fax +32/2-219.17.21 &lt;br /&gt;
  http://www.st-nicolas.be/contentENG/home.asp&lt;br /&gt;
  close to beer event, bus to Fosdem few minutes by walk from hotel.&lt;br /&gt;
&lt;br /&gt;
IBIS Brussels off Grand&#039; Place&lt;br /&gt;
  Grasmarkt 100&lt;br /&gt;
  Rue du Marché aux Herbes 100&lt;br /&gt;
  1000 BRUSSELS&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4587</id>
		<title>Fosdem 2012</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4587"/>
		<updated>2012-01-30T09:28:22Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Flyers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Conferences]]&lt;br /&gt;
&lt;br /&gt;
= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday, Sunday until ~4pm)&lt;br /&gt;
* Alex Lennon (Saturday, Sunday)&lt;br /&gt;
* Henning Heinold (Saturday, Sunday)&lt;br /&gt;
* Ulf Samuelsson (Saturday, Sunday)&lt;br /&gt;
* Paul Eggleton (Saturday, Sunday)&lt;br /&gt;
* Marco Cavallini (Saturday)&lt;br /&gt;
* Radoslav Kolev (Sunday afternoon) - I&#039;ll be leaving Brussels on Monday, so I can stay until later to help with cleaning up tables, etc.&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
A bunch of tasks need to be carried out to make our attendance a pleasant experience. Each task needs a volunteer who is willing to help.&lt;br /&gt;
&lt;br /&gt;
=== Table cloth ===&lt;br /&gt;
We only have a single table cloth (it washed but has a negligible stain from a quick soldering action that happened last year). We definitely need a 2nd one to also cover our second table. The FOSDEM tables are pretty huge (2.5m length), so chose a reasonably sized cloth. Additionally it would be super cool to have the OpenEmbedded logo printed on it. The idea would be to show the logo on the front side of our tables. For that the &#039;OE&#039; sign should not be taller than say 50cm (The tables are approximately 70cm high.).&lt;br /&gt;
&lt;br /&gt;
Volunteer: Philip Balister plans to bring 2 table cloths carrying the OE logo.&lt;br /&gt;
&lt;br /&gt;
=== Bringing an TFT LCD ===&lt;br /&gt;
Displaying a presentation during the time of the conference makes our stand visually more attractive. We have a simple OpenDocument presentation in our SCM that can be used for this. However we need a display as well. If you come by car and can transport a display that&#039;d be great. Getting a screen is not so complicated. Robert Schuster could send one to you by mail.&lt;br /&gt;
&lt;br /&gt;
Volunteer: Florian Boor, a display is part of an event box he brings&lt;br /&gt;
&lt;br /&gt;
=== Poster ===&lt;br /&gt;
A nice poster with updated sponsor was used for 2011&#039;s LinuxTag in Berlin. This poster needs to be brought to FOSDEM. Where is it right now and can it be taken to Brussels?&lt;br /&gt;
&lt;br /&gt;
Volunteer: Henning Heinold (brings it from Berlin)&lt;br /&gt;
&lt;br /&gt;
=== Flyers ===&lt;br /&gt;
Years ago we printed a bunch (2500) of flyers. We still have a bunch of them left (exact number unknown; will update this as soon as I know). As the text is already a few years old it makes sense to update the actual document (it is in openembedded/contrib/marketing/oe-flyer.pdf) and print new ones.&lt;br /&gt;
&lt;br /&gt;
Volunteer: Henning and Florian bring some&lt;br /&gt;
&lt;br /&gt;
=== Device Tags ===&lt;br /&gt;
People standing in front of our booth often want to know what kind of device it is that blinks so funnily. ;) We could make things easier by being able to print small tags providing some information about board manufacturer, CPU, RAM and what its relation to OpenEmbedded is.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - please send details of any tags needed to me, (ajlennon at dynamicdevices.co.uk) in reasonable time.&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo.&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - Gem (i.MX28 based telematics board) - Booting OpenEmbedded with an end-user demo running (hopefully)&lt;br /&gt;
&lt;br /&gt;
Ulf Samuelsson - Atmel AT91SAM9Gx5 Kit with 5 CPU Modules (G15,G25,G35,X25,X35)&lt;br /&gt;
                 Will boot the OpenEmbedded from www.linux4sam.org&lt;br /&gt;
                 A raffle for the kit will be held in the Embedded DevRoom,&lt;br /&gt;
                 and you have to visit the OpenEmbedded stand to leave your business card.&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
**WiFi-Router in client mode to provide Internet access for Ethernet-based devices&lt;br /&gt;
**2 1m-Ethernet cables&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2012? Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
* Henning Heinold (woglinde)&lt;br /&gt;
* Paul Eggleton (bluelightning)&lt;br /&gt;
* Marco Cavallini (mckoan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;br /&gt;
&lt;br /&gt;
Saint Nicolas&lt;br /&gt;
  Hôtel Saint Nicolas *** &lt;br /&gt;
  Rue Marché aux Poulets 32 &lt;br /&gt;
  1000 Bruxelles Tél. +32/2-219.04.40 &lt;br /&gt;
  Fax +32/2-219.17.21 &lt;br /&gt;
  http://www.st-nicolas.be/contentENG/home.asp&lt;br /&gt;
  close to beer event, bus to Fosdem few minutes by walk from hotel.&lt;br /&gt;
&lt;br /&gt;
IBIS Brussels off Grand&#039; Place&lt;br /&gt;
  Grasmarkt 100&lt;br /&gt;
  Rue du Marché aux Herbes 100&lt;br /&gt;
  1000 BRUSSELS&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4585</id>
		<title>Fosdem 2012</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4585"/>
		<updated>2012-01-30T09:16:22Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Poster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Conferences]]&lt;br /&gt;
&lt;br /&gt;
= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday, Sunday until ~4pm)&lt;br /&gt;
* Alex Lennon (Saturday, Sunday)&lt;br /&gt;
* Henning Heinold (Saturday, Sunday)&lt;br /&gt;
* Ulf Samuelsson (Saturday, Sunday)&lt;br /&gt;
* Paul Eggleton (Saturday, Sunday)&lt;br /&gt;
* Marco Cavallini (Saturday)&lt;br /&gt;
* Radoslav Kolev (Sunday afternoon) - I&#039;ll be leaving Brussels on Monday, so I can stay until later to help with cleaning up tables, etc.&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
A bunch of tasks need to be carried out to make our attendance a pleasant experience. Each task needs a volunteer who is willing to help.&lt;br /&gt;
&lt;br /&gt;
=== Table cloth ===&lt;br /&gt;
We only have a single table cloth (it washed but has a negligible stain from a quick soldering action that happened last year). We definitely need a 2nd one to also cover our second table. The FOSDEM tables are pretty huge (2.5m length), so chose a reasonably sized cloth. Additionally it would be super cool to have the OpenEmbedded logo printed on it. The idea would be to show the logo on the front side of our tables. For that the &#039;OE&#039; sign should not be taller than say 50cm (The tables are approximately 70cm high.).&lt;br /&gt;
&lt;br /&gt;
Volunteer: Philip Balister plans to bring 2 table cloths carrying the OE logo.&lt;br /&gt;
&lt;br /&gt;
=== Bringing an TFT LCD ===&lt;br /&gt;
Displaying a presentation during the time of the conference makes our stand visually more attractive. We have a simple OpenDocument presentation in our SCM that can be used for this. However we need a display as well. If you come by car and can transport a display that&#039;d be great. Getting a screen is not so complicated. Robert Schuster could send one to you by mail.&lt;br /&gt;
&lt;br /&gt;
Volunteer: Florian Boor, a display is part of an event box he brings&lt;br /&gt;
&lt;br /&gt;
=== Poster ===&lt;br /&gt;
A nice poster with updated sponsor was used for 2011&#039;s LinuxTag in Berlin. This poster needs to be brought to FOSDEM. Where is it right now and can it be taken to Brussels?&lt;br /&gt;
&lt;br /&gt;
Volunteer: Henning Heinold (brings it from Berlin)&lt;br /&gt;
&lt;br /&gt;
=== Flyers ===&lt;br /&gt;
Years ago we printed a bunch (2500) of flyers. We still have a bunch of them left (exact number unknown; will update this as soon as I know). As the text is already a few years old it makes sense to update the actual document (it is in openembedded/contrib/marketing/oe-flyer.pdf) and print new ones.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Device Tags ===&lt;br /&gt;
People standing in front of our booth often want to know what kind of device it is that blinks so funnily. ;) We could make things easier by being able to print small tags providing some information about board manufacturer, CPU, RAM and what its relation to OpenEmbedded is.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - please send details of any tags needed to me, (ajlennon at dynamicdevices.co.uk) in reasonable time.&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo.&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - Gem (i.MX28 based telematics board) - Booting OpenEmbedded with an end-user demo running (hopefully)&lt;br /&gt;
&lt;br /&gt;
Ulf Samuelsson - Atmel AT91SAM9Gx5 Kit with 5 CPU Modules (G15,G25,G35,X25,X35)&lt;br /&gt;
                 Will boot the OpenEmbedded from www.linux4sam.org&lt;br /&gt;
                 A raffle for the kit will be held in the Embedded DevRoom,&lt;br /&gt;
                 and you have to visit the OpenEmbedded stand to leave your business card.&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
**WiFi-Router in client mode to provide Internet access for Ethernet-based devices&lt;br /&gt;
**2 1m-Ethernet cables&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2012? Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
* Henning Heinold (woglinde)&lt;br /&gt;
* Paul Eggleton (bluelightning)&lt;br /&gt;
* Marco Cavallini (mckoan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;br /&gt;
&lt;br /&gt;
Saint Nicolas&lt;br /&gt;
  Hôtel Saint Nicolas *** &lt;br /&gt;
  Rue Marché aux Poulets 32 &lt;br /&gt;
  1000 Bruxelles Tél. +32/2-219.04.40 &lt;br /&gt;
  Fax +32/2-219.17.21 &lt;br /&gt;
  http://www.st-nicolas.be/contentENG/home.asp&lt;br /&gt;
  close to beer event, bus to Fosdem few minutes by walk from hotel.&lt;br /&gt;
&lt;br /&gt;
IBIS Brussels off Grand&#039; Place&lt;br /&gt;
  Grasmarkt 100&lt;br /&gt;
  Rue du Marché aux Herbes 100&lt;br /&gt;
  1000 BRUSSELS&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4583</id>
		<title>Fosdem 2012</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4583"/>
		<updated>2012-01-30T09:15:54Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Bringing an TFT LCD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Conferences]]&lt;br /&gt;
&lt;br /&gt;
= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday, Sunday until ~4pm)&lt;br /&gt;
* Alex Lennon (Saturday, Sunday)&lt;br /&gt;
* Henning Heinold (Saturday, Sunday)&lt;br /&gt;
* Ulf Samuelsson (Saturday, Sunday)&lt;br /&gt;
* Paul Eggleton (Saturday, Sunday)&lt;br /&gt;
* Marco Cavallini (Saturday)&lt;br /&gt;
* Radoslav Kolev (Sunday afternoon) - I&#039;ll be leaving Brussels on Monday, so I can stay until later to help with cleaning up tables, etc.&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
A bunch of tasks need to be carried out to make our attendance a pleasant experience. Each task needs a volunteer who is willing to help.&lt;br /&gt;
&lt;br /&gt;
=== Table cloth ===&lt;br /&gt;
We only have a single table cloth (it washed but has a negligible stain from a quick soldering action that happened last year). We definitely need a 2nd one to also cover our second table. The FOSDEM tables are pretty huge (2.5m length), so chose a reasonably sized cloth. Additionally it would be super cool to have the OpenEmbedded logo printed on it. The idea would be to show the logo on the front side of our tables. For that the &#039;OE&#039; sign should not be taller than say 50cm (The tables are approximately 70cm high.).&lt;br /&gt;
&lt;br /&gt;
Volunteer: Philip Balister plans to bring 2 table cloths carrying the OE logo.&lt;br /&gt;
&lt;br /&gt;
=== Bringing an TFT LCD ===&lt;br /&gt;
Displaying a presentation during the time of the conference makes our stand visually more attractive. We have a simple OpenDocument presentation in our SCM that can be used for this. However we need a display as well. If you come by car and can transport a display that&#039;d be great. Getting a screen is not so complicated. Robert Schuster could send one to you by mail.&lt;br /&gt;
&lt;br /&gt;
Volunteer: Florian Boor, a display is part of an event box he brings&lt;br /&gt;
&lt;br /&gt;
=== Poster ===&lt;br /&gt;
A nice poster with updated sponsor was used for 2011&#039;s LinuxTag in Berlin. This poster needs to be brought to FOSDEM. Where is it right now and can it be taken to Brussels?&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Flyers ===&lt;br /&gt;
Years ago we printed a bunch (2500) of flyers. We still have a bunch of them left (exact number unknown; will update this as soon as I know). As the text is already a few years old it makes sense to update the actual document (it is in openembedded/contrib/marketing/oe-flyer.pdf) and print new ones.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Device Tags ===&lt;br /&gt;
People standing in front of our booth often want to know what kind of device it is that blinks so funnily. ;) We could make things easier by being able to print small tags providing some information about board manufacturer, CPU, RAM and what its relation to OpenEmbedded is.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - please send details of any tags needed to me, (ajlennon at dynamicdevices.co.uk) in reasonable time.&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo.&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - Gem (i.MX28 based telematics board) - Booting OpenEmbedded with an end-user demo running (hopefully)&lt;br /&gt;
&lt;br /&gt;
Ulf Samuelsson - Atmel AT91SAM9Gx5 Kit with 5 CPU Modules (G15,G25,G35,X25,X35)&lt;br /&gt;
                 Will boot the OpenEmbedded from www.linux4sam.org&lt;br /&gt;
                 A raffle for the kit will be held in the Embedded DevRoom,&lt;br /&gt;
                 and you have to visit the OpenEmbedded stand to leave your business card.&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
**WiFi-Router in client mode to provide Internet access for Ethernet-based devices&lt;br /&gt;
**2 1m-Ethernet cables&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2012? Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
* Henning Heinold (woglinde)&lt;br /&gt;
* Paul Eggleton (bluelightning)&lt;br /&gt;
* Marco Cavallini (mckoan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;br /&gt;
&lt;br /&gt;
Saint Nicolas&lt;br /&gt;
  Hôtel Saint Nicolas *** &lt;br /&gt;
  Rue Marché aux Poulets 32 &lt;br /&gt;
  1000 Bruxelles Tél. +32/2-219.04.40 &lt;br /&gt;
  Fax +32/2-219.17.21 &lt;br /&gt;
  http://www.st-nicolas.be/contentENG/home.asp&lt;br /&gt;
  close to beer event, bus to Fosdem few minutes by walk from hotel.&lt;br /&gt;
&lt;br /&gt;
IBIS Brussels off Grand&#039; Place&lt;br /&gt;
  Grasmarkt 100&lt;br /&gt;
  Rue du Marché aux Herbes 100&lt;br /&gt;
  1000 BRUSSELS&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4581</id>
		<title>Fosdem 2012</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4581"/>
		<updated>2012-01-30T08:33:07Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Manning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Conferences]]&lt;br /&gt;
&lt;br /&gt;
= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday, Sunday until ~4pm)&lt;br /&gt;
* Alex Lennon (Saturday, Sunday)&lt;br /&gt;
* Henning Heinold (Saturday, Sunday)&lt;br /&gt;
* Ulf Samuelsson (Saturday, Sunday)&lt;br /&gt;
* Paul Eggleton (Saturday, Sunday)&lt;br /&gt;
* Marco Cavallini (Saturday)&lt;br /&gt;
* Radoslav Kolev (Sunday afternoon) - I&#039;ll be leaving Brussels on Monday, so I can stay until later to help with cleaning up tables, etc.&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
A bunch of tasks need to be carried out to make our attendance a pleasant experience. Each task needs a volunteer who is willing to help.&lt;br /&gt;
&lt;br /&gt;
=== Table cloth ===&lt;br /&gt;
We only have a single table cloth (it washed but has a negligible stain from a quick soldering action that happened last year). We definitely need a 2nd one to also cover our second table. The FOSDEM tables are pretty huge (2.5m length), so chose a reasonably sized cloth. Additionally it would be super cool to have the OpenEmbedded logo printed on it. The idea would be to show the logo on the front side of our tables. For that the &#039;OE&#039; sign should not be taller than say 50cm (The tables are approximately 70cm high.).&lt;br /&gt;
&lt;br /&gt;
Volunteer: Philip Balister plans to bring 2 table cloths carrying the OE logo.&lt;br /&gt;
&lt;br /&gt;
=== Bringing an TFT LCD ===&lt;br /&gt;
Displaying a presentation during the time of the conference makes our stand visually more attractive. We have a simple OpenDocument presentation in our SCM that can be used for this. However we need a display as well. If you come by car and can transport a display that&#039;d be great. Getting a screen is not so complicated. Robert Schuster could send one to you by mail.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Poster ===&lt;br /&gt;
A nice poster with updated sponsor was used for 2011&#039;s LinuxTag in Berlin. This poster needs to be brought to FOSDEM. Where is it right now and can it be taken to Brussels?&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Flyers ===&lt;br /&gt;
Years ago we printed a bunch (2500) of flyers. We still have a bunch of them left (exact number unknown; will update this as soon as I know). As the text is already a few years old it makes sense to update the actual document (it is in openembedded/contrib/marketing/oe-flyer.pdf) and print new ones.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Device Tags ===&lt;br /&gt;
People standing in front of our booth often want to know what kind of device it is that blinks so funnily. ;) We could make things easier by being able to print small tags providing some information about board manufacturer, CPU, RAM and what its relation to OpenEmbedded is.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - please send details of any tags needed to me, (ajlennon at dynamicdevices.co.uk) in reasonable time.&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo.&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - Gem (i.MX28 based telematics board) - Booting OpenEmbedded with an end-user demo running (hopefully)&lt;br /&gt;
&lt;br /&gt;
Ulf Samuelsson - Atmel AT91SAM9Gx5 Kit with 5 CPU Modules (G15,G25,G35,X25,X35)&lt;br /&gt;
                 Will boot the OpenEmbedded from www.linux4sam.org&lt;br /&gt;
                 A raffle for the kit will be held in the Embedded DevRoom,&lt;br /&gt;
                 and you have to visit the OpenEmbedded stand to leave your business card.&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
**WiFi-Router in client mode to provide Internet access for Ethernet-based devices&lt;br /&gt;
**2 1m-Ethernet cables&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2012? Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
* Henning Heinold (woglinde)&lt;br /&gt;
* Paul Eggleton (bluelightning)&lt;br /&gt;
* Marco Cavallini (mckoan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;br /&gt;
&lt;br /&gt;
Saint Nicolas&lt;br /&gt;
  Hôtel Saint Nicolas *** &lt;br /&gt;
  Rue Marché aux Poulets 32 &lt;br /&gt;
  1000 Bruxelles Tél. +32/2-219.04.40 &lt;br /&gt;
  Fax +32/2-219.17.21 &lt;br /&gt;
  http://www.st-nicolas.be/contentENG/home.asp&lt;br /&gt;
  close to beer event, bus to Fosdem few minutes by walk from hotel.&lt;br /&gt;
&lt;br /&gt;
IBIS Brussels off Grand&#039; Place&lt;br /&gt;
  Grasmarkt 100&lt;br /&gt;
  Rue du Marché aux Herbes 100&lt;br /&gt;
  1000 BRUSSELS&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4547</id>
		<title>Fosdem 2012</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4547"/>
		<updated>2012-01-19T13:24:27Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Table cloth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Conferences]]&lt;br /&gt;
&lt;br /&gt;
= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday, Sunday)&lt;br /&gt;
* Alex Lennon (Saturday, Sunday)&lt;br /&gt;
* Henning Heinold (Saturday, Sunday)&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
A bunch of tasks need to be carried out to make our attendance a pleasant experience. Each task needs a volunteer who is willing to help.&lt;br /&gt;
&lt;br /&gt;
=== Table cloth ===&lt;br /&gt;
We only have a single table cloth (it washed but has a negligible stain from a quick soldering action that happened last year). We definitely need a 2nd one to also cover our second table. The FOSDEM tables are pretty huge (2.5m length), so chose a reasonably sized cloth. Additionally it would be super cool to have the OpenEmbedded logo printed on it. The idea would be to show the logo on the front side of our tables. For that the &#039;OE&#039; sign should not be taller than say 50cm (The tables are approximately 70cm high.).&lt;br /&gt;
&lt;br /&gt;
Volunteer: Philip Balister plans to bring 2 table cloths carrying the OE logo.&lt;br /&gt;
&lt;br /&gt;
=== Bringing an TFT LCD ===&lt;br /&gt;
Displaying a presentation during the time of the conference makes our stand visually more attractive. We have a simple OpenDocument presentation in our SCM that can be used for this. However we need a display as well. If you come by car and can transport a display that&#039;d be great. Getting a screen is not so complicated. Robert Schuster could send one to you by mail.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Poster ===&lt;br /&gt;
A nice poster with updated sponsor was used for 2011&#039;s LinuxTag in Berlin. This poster needs to be brought to FOSDEM. Where is it right now and can it be taken to Brussels?&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Flyers ===&lt;br /&gt;
Years ago we printed a bunch (2500) of flyers. We still have a bunch of them left (exact number unknown; will update this as soon as I know). As the text is already a few years old it makes sense to update the actual document (it is in openembedded/contrib/marketing/oe-flyer.pdf) and print new ones.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Device Tags ===&lt;br /&gt;
People standing in front of our booth often want to know what kind of device it is that blinks so funnily. ;) We could make things easier by being able to print small tags providing some information about board manufacturer, CPU, RAM and what its relation to OpenEmbedded is.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo.&lt;br /&gt;
&lt;br /&gt;
Alex Lennon - Gem (i.MX28 based telematics board) - Booting OpenEmbedded with an end-user demo running (hopefully)&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
**WiFi-Router in client mode to provide Internet access for Ethernet-based devices&lt;br /&gt;
**2 1m-Ethernet cables&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2012? Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
* Henning Heinold (woglinde)&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;br /&gt;
&lt;br /&gt;
Saint Nicolas&lt;br /&gt;
  Hôtel Saint Nicolas *** &lt;br /&gt;
  Rue Marché aux Poulets 32 &lt;br /&gt;
  1000 Bruxelles Tél. +32/2-219.04.40 &lt;br /&gt;
  Fax +32/2-219.17.21 &lt;br /&gt;
  http://www.st-nicolas.be/contentENG/home.asp&lt;br /&gt;
  close to beer event, bus to Fosdem few minutes by walk from hotel.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4529</id>
		<title>Fosdem 2012</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4529"/>
		<updated>2012-01-13T14:42:00Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Power extensions, adapters and other stand material */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Conferences]]&lt;br /&gt;
&lt;br /&gt;
= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday, Sunday)&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
A bunch of tasks need to be carried out to make our attendance a pleasant experience. Each task needs a volunteer who is willing to help.&lt;br /&gt;
&lt;br /&gt;
=== Table cloth ===&lt;br /&gt;
We only have a single table cloth (it washed but has a negligible stain from a quick soldering action that happened last year). We definitely need a 2nd one to also cover our second table. The FOSDEM tables are pretty huge (2.5m length), so chose a reasonably sized cloth. Additionally it would be super cool to have the OpenEmbedded logo printed on it. The idea would be to show the logo on the front side of our tables. For that the &#039;OE&#039; sign should not be taller than say 50cm (The tables are approximately 70cm high.).&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Bringing an TFT LCD ===&lt;br /&gt;
Displaying a presentation during the time of the conference makes our stand visually more attractive. We have a simple OpenDocument presentation in our SCM that can be used for this. However we need a display as well. If you come by car and can transport a display that&#039;d be great. Getting a screen is not so complicated. Robert Schuster could send one to you by mail.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Poster ===&lt;br /&gt;
A nice poster with updated sponsor was used for 2011&#039;s LinuxTag in Berlin. This poster needs to be brought to FOSDEM. Where is it right now and can it be taken to Brussels?&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Flyers ===&lt;br /&gt;
Years ago we printed a bunch of flyers. We still have a bunch of them left (exact number unknown; will update this as soon as I know). As the text is already a few years old it makes sense to update the actual document (it is in our SCM?) and print new ones.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Device Tags ===&lt;br /&gt;
People standing in front of our booth often want to know what kind of device it is that blinks so funnily. ;) We could make things easier by being able to print small tags providing some information about board manufacturer, CPU, RAM and what its relation to OpenEmbedded is.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo.&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name&lt;br /&gt;
and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
**WiFi-Router in client mode to provide Internet access for Ethernet-based devices&lt;br /&gt;
**2 1m-Ethernet cables&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2011? Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4527</id>
		<title>Fosdem 2012</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2012&amp;diff=4527"/>
		<updated>2012-01-13T14:41:01Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: added tasks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Conferences]]&lt;br /&gt;
&lt;br /&gt;
= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday, Sunday)&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
A bunch of tasks need to be carried out to make our attendance a pleasant experience. Each task needs a volunteer who is willing to help.&lt;br /&gt;
&lt;br /&gt;
=== Table cloth ===&lt;br /&gt;
We only have a single table cloth (it washed but has a negligible stain from a quick soldering action that happened last year). We definitely need a 2nd one to also cover our second table. The FOSDEM tables are pretty huge (2.5m length), so chose a reasonably sized cloth. Additionally it would be super cool to have the OpenEmbedded logo printed on it. The idea would be to show the logo on the front side of our tables. For that the &#039;OE&#039; sign should not be taller than say 50cm (The tables are approximately 70cm high.).&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Bringing an TFT LCD ===&lt;br /&gt;
Displaying a presentation during the time of the conference makes our stand visually more attractive. We have a simple OpenDocument presentation in our SCM that can be used for this. However we need a display as well. If you come by car and can transport a display that&#039;d be great. Getting a screen is not so complicated. Robert Schuster could send one to you by mail.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Poster ===&lt;br /&gt;
A nice poster with updated sponsor was used for 2011&#039;s LinuxTag in Berlin. This poster needs to be brought to FOSDEM. Where is it right now and can it be taken to Brussels?&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Flyers ===&lt;br /&gt;
Years ago we printed a bunch of flyers. We still have a bunch of them left (exact number unknown; will update this as soon as I know). As the text is already a few years old it makes sense to update the actual document (it is in our SCM?) and print new ones.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
=== Device Tags ===&lt;br /&gt;
People standing in front of our booth often want to know what kind of device it is that blinks so funnily. ;) We could make things easier by being able to print small tags providing some information about board manufacturer, CPU, RAM and what its relation to OpenEmbedded is.&lt;br /&gt;
&lt;br /&gt;
Volunteer:&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo.&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name&lt;br /&gt;
and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
**WiFi-Router in client mode to provide Internet access for Ethernet-based devices&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2011? Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=TravelReimbursement&amp;diff=4483</id>
		<title>TravelReimbursement</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=TravelReimbursement&amp;diff=4483"/>
		<updated>2011-12-05T20:25:46Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What? ==&lt;br /&gt;
OpenEmbedded needs to be present with a booth at conferences etc. For this the OEEV is planning to reimburse volunteers. This page is about collecting the information about travel costs and come to a conclusion of how much each helper is reimbursed and what the details for reimbursement are.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
There should be at least 2 people per day at the OpenEmbedded booth. If the event is a short one like FOSDEM (2 days) it is fine if the same two people are there during the whole conference.&lt;br /&gt;
&lt;br /&gt;
CeBIT lasts usually from Tuesday to Saturday and is a very busy event. Supporters should be changed every few days so that not one person mans the booth everyday.&lt;br /&gt;
&lt;br /&gt;
=== Costs for travel (in Europe) ===&lt;br /&gt;
Varies from 20€ (public transport) to 2000€ (late-booked flight ticket). We should pay up to 300€ for this.&lt;br /&gt;
&lt;br /&gt;
=== Meals ===&lt;br /&gt;
Companies usually pay 24€ per day.&lt;br /&gt;
&lt;br /&gt;
=== Lodging ===&lt;br /&gt;
Hotels costs are in the range of 80 to 100€ per night.&lt;br /&gt;
&lt;br /&gt;
== U.S. Per diem rates ==&lt;br /&gt;
http://www.gsa.gov/portal/category/21287&lt;br /&gt;
&lt;br /&gt;
== Foreign Per diem rates == &lt;br /&gt;
http://aoprals.state.gov/content.asp?content_id=184&amp;amp;menu_id=78&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=TravelReimbursement&amp;diff=4481</id>
		<title>TravelReimbursement</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=TravelReimbursement&amp;diff=4481"/>
		<updated>2011-12-05T20:20:48Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What? ==&lt;br /&gt;
OpenEmbedded needs to be present with a booth at conferences etc. For this the OEEV is planning to reimburse volunteers. This page is about collecting the information about travel costs and come to a conclusion of how much each helper is reimbursed and what the details for reimbursement are.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
There should be at least 2 people per day at the OpenEmbedded booth. If the event is a short one like FOSDEM (2 days) it is fine if the same two people are there during the whole conference.&lt;br /&gt;
&lt;br /&gt;
CeBIT lasts usually from Tuesday to Saturday and is a very busy event. Supporters should be changed every few days so that not one person mans the booth everyday.&lt;br /&gt;
&lt;br /&gt;
=== Costs for travel (in Europe) ===&lt;br /&gt;
Varies from 20€ (public transport) to 2000€ (late-booked flight ticket)&lt;br /&gt;
&lt;br /&gt;
=== Meals ===&lt;br /&gt;
Companies usually pay 24€ per day.&lt;br /&gt;
&lt;br /&gt;
=== Lodging ===&lt;br /&gt;
Hotels costs are in the range of 80 to 100€ per night.&lt;br /&gt;
&lt;br /&gt;
== U.S. Per diem rates ==&lt;br /&gt;
http://www.gsa.gov/portal/category/21287&lt;br /&gt;
&lt;br /&gt;
== Foreign Per diem rates == &lt;br /&gt;
http://aoprals.state.gov/content.asp?content_id=184&amp;amp;menu_id=78&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=LinuxTag&amp;diff=4227</id>
		<title>LinuxTag</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=LinuxTag&amp;diff=4227"/>
		<updated>2011-04-26T17:03:38Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LinuxTag 2011 ==&lt;br /&gt;
* takes place in Berlin, Germany&lt;br /&gt;
* May 11th to 14th 2011&lt;br /&gt;
* LinuxTag is Germany&#039;s biggest F/OSS event&lt;br /&gt;
* Berlin is supercool and quite cheap&lt;br /&gt;
&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to LinuxTag and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Florian Boor&lt;br /&gt;
* Robert Schuster (will definitely be there)&lt;br /&gt;
* Henning Heinold (occassionally, can jump in so that other people can take a break)&lt;br /&gt;
* &amp;lt;your name here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Yocto/oe-core ==&lt;br /&gt;
&lt;br /&gt;
* be informed of what will come&lt;br /&gt;
* oe-core/layers bsp&#039;s&lt;br /&gt;
&lt;br /&gt;
== Booth support material ==&lt;br /&gt;
* power extensions and converters&lt;br /&gt;
* TFT screen&lt;br /&gt;
* transport box&lt;br /&gt;
* SD cards and reader&lt;br /&gt;
* WIFI AP in managed mode (provide wired network to embedded devices)&lt;br /&gt;
&lt;br /&gt;
== Marketing material ==&lt;br /&gt;
* Flyer availability?&lt;br /&gt;
* Poster availability?&lt;br /&gt;
 - Poster needs to be updated&lt;br /&gt;
 - where are poster sources?&lt;br /&gt;
* embedded devices to show (+ what is running on them)&lt;br /&gt;
 -&lt;br /&gt;
 -&lt;br /&gt;
 -&lt;br /&gt;
* booth presentation slideshow&lt;br /&gt;
 - Robert Schuster made one for CeBIT, will update it and bring it to the event&lt;br /&gt;
* OE booth demo image&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=LinuxTag&amp;diff=4209</id>
		<title>LinuxTag</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=LinuxTag&amp;diff=4209"/>
		<updated>2011-04-18T09:13:10Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Marketing material */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LinuxTag 2011 ==&lt;br /&gt;
* takes place in Berlin, Germany&lt;br /&gt;
* May 11th to 14th 2011&lt;br /&gt;
* LinuxTag is Germany&#039;s biggest F/OSS event&lt;br /&gt;
* Berlin is supercool and quite cheap&lt;br /&gt;
&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to LinuxTag and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Florian Boor&lt;br /&gt;
* Robert Schuster (remains to be decided by employer)&lt;br /&gt;
* Henning Heinold (occassionally, can jump in so that other people can take a break)&lt;br /&gt;
* &amp;lt;your name here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Booth support material ==&lt;br /&gt;
* power extensions and converters&lt;br /&gt;
* TFT screen&lt;br /&gt;
* transport box&lt;br /&gt;
* SD cards and reader&lt;br /&gt;
* WIFI AP in managed mode (provide wired network to embedded devices)&lt;br /&gt;
&lt;br /&gt;
== Marketing material ==&lt;br /&gt;
* Flyer availability?&lt;br /&gt;
* Poster availability?&lt;br /&gt;
 - Poster needs to be updated&lt;br /&gt;
 - where are poster sources?&lt;br /&gt;
* embedded devices to show (+ what is running on them)&lt;br /&gt;
 -&lt;br /&gt;
 -&lt;br /&gt;
 -&lt;br /&gt;
* booth presentation slideshow&lt;br /&gt;
 - Robert Schuster made one for CeBIT, will update it and bring it to the event&lt;br /&gt;
* OE booth demo image&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=LinuxTag&amp;diff=4207</id>
		<title>LinuxTag</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=LinuxTag&amp;diff=4207"/>
		<updated>2011-04-18T09:04:43Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: Created page with &amp;quot;== LinuxTag 2011 == * takes place in Berlin, Germany * May 11th to 14th 2011 * LinuxTag is Germany&amp;#039;s biggest F/OSS event * Berlin is supercool and quite cheap  == Manning == You ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LinuxTag 2011 ==&lt;br /&gt;
* takes place in Berlin, Germany&lt;br /&gt;
* May 11th to 14th 2011&lt;br /&gt;
* LinuxTag is Germany&#039;s biggest F/OSS event&lt;br /&gt;
* Berlin is supercool and quite cheap&lt;br /&gt;
&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to LinuxTag and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Florian Boor&lt;br /&gt;
* Robert Schuster (remains to be decided by employer)&lt;br /&gt;
* Henning Heinold (occassionally, can jump in so that other people can take a break)&lt;br /&gt;
* &amp;lt;your name here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Booth support material ==&lt;br /&gt;
* power extensions and converters&lt;br /&gt;
* TFT screen&lt;br /&gt;
* transport box&lt;br /&gt;
* SD cards and reader&lt;br /&gt;
* WIFI AP in managed mode (provide wired network to embedded devices)&lt;br /&gt;
&lt;br /&gt;
== Marketing material ==&lt;br /&gt;
* Flyer availability?&lt;br /&gt;
* Poster availability?&lt;br /&gt;
 - Poster needs to be updated&lt;br /&gt;
 - where are poster sources?&lt;br /&gt;
* embedded devices to show (+ what is running on them)&lt;br /&gt;
 -&lt;br /&gt;
 -&lt;br /&gt;
 -&lt;br /&gt;
* booth presentation slideshow&lt;br /&gt;
* OE booth demo image&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=CeBIT_2011&amp;diff=4085</id>
		<title>CeBIT 2011</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=CeBIT_2011&amp;diff=4085"/>
		<updated>2011-02-21T10:04:49Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Flyers and posters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to CeBIT 2011 and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster&lt;br /&gt;
* Mickey Lauer&lt;br /&gt;
* Henning Heinold (3.3-5.3, only parttime, mainly on the navit booth)&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
 * Robert Schuster: ~500 OpenEmbedded flyers (will be sent from Florian to tarent office in Bonn)&lt;br /&gt;
&lt;br /&gt;
== Free Tickets ==&lt;br /&gt;
&lt;br /&gt;
CeBIT organizers provided us with lots of free tickets for the event. If you want one leave your name and email here (don&#039;t forget to obfuscate the later a bit).&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=CeBIT_2011&amp;diff=4063</id>
		<title>CeBIT 2011</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=CeBIT_2011&amp;diff=4063"/>
		<updated>2011-02-17T20:10:33Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: new page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to CeBIT 2011 and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster&lt;br /&gt;
* Mickey Lauer&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Free Tickets ==&lt;br /&gt;
&lt;br /&gt;
CeBIT organizers provided us with lots of free tickets for the event. If you want one leave your name and email here (don&#039;t forget to obfuscate the later a bit).&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2011&amp;diff=3933</id>
		<title>Fosdem 2011</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2011&amp;diff=3933"/>
		<updated>2011-01-31T16:10:14Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Power extensions and adapters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday)&lt;br /&gt;
* Ulf Samuelsson (Saturday and Sunday occasionally)&lt;br /&gt;
* Philip Balister (As needed)&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
Add your name and what devices you&#039;ll bring for the stand.&lt;br /&gt;
&lt;br /&gt;
Ulf Samuelsson - AT91SAM9M10EKES booting Openembedded/Android from SD-Card&lt;br /&gt;
                 (No flash on board enabled)&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo. Try to get hold of a small TFT display&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions, adapters and other stand material ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name&lt;br /&gt;
and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster:&lt;br /&gt;
**3-socket power extension (EU)&lt;br /&gt;
**tape&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2011?  Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Esben Haabendal&lt;br /&gt;
* Frans Meulenbroeks (eFfeM)&lt;br /&gt;
* Philip Balister (Crofton)&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
* Ulf Samuelsson&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2011&amp;diff=3891</id>
		<title>Fosdem 2011</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2011&amp;diff=3891"/>
		<updated>2011-01-10T07:25:18Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday)&lt;br /&gt;
* Ulf Samuelsson (Saturday and Sunday occasionally)&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
Add your name and what devices you&#039;ll bring for the stand.&lt;br /&gt;
&lt;br /&gt;
Ulf Samuelsson - AT91SAM9M10EKES booting Openembedded/Android from SD-Card&lt;br /&gt;
                 (No flash on board enabled)&lt;br /&gt;
&lt;br /&gt;
Robert Schuster - Pandaboard - Hopefully booting Angstrom with some desktop and Java foo. Try to get hold of a small TFT display&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions and adapters ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name&lt;br /&gt;
and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster: 4-socket power extension (EU)&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2011?  Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Esben Haabendal&lt;br /&gt;
* Frans Meulenbroeks (eFfeM)&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
* Ulf Samuelsson&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;br /&gt;
&lt;br /&gt;
Scandic Grand Place.&lt;br /&gt;
  Rue d&#039;Arenberg 18&lt;br /&gt;
  Close to beer event (300 m) and Central Station.&lt;br /&gt;
  Tram to Fosdem around the corner.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Fosdem_2011&amp;diff=3868</id>
		<title>Fosdem 2011</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Fosdem_2011&amp;diff=3868"/>
		<updated>2011-01-06T08:21:21Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenEmbedded booth =&lt;br /&gt;
== Manning ==&lt;br /&gt;
You are going to FOSDEM and can spend some time at the OpenEmbedded stand to explain interested individuals the virtues of OpenEmbedded? Add your name and on which day you&#039;ll be available.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster (Saturday)&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
Add your name and what devices you&#039;ll bring for the stand.&lt;br /&gt;
&lt;br /&gt;
== Flyers and posters ==&lt;br /&gt;
You can bring and/or print OpenEmbedded flyers and posters? Add your name and what you&#039;ll bring.&lt;br /&gt;
&lt;br /&gt;
== Power extensions and adapters ==&lt;br /&gt;
Bringing devices is cool but we need a way to bring power to them too. Additionally people might need power sockets for different systems than the european one. List your name&lt;br /&gt;
and what stuff you can bring.&lt;br /&gt;
&lt;br /&gt;
* Robert Schuster: 4-socket power extension (EU)&lt;br /&gt;
&lt;br /&gt;
= General attendance =&lt;br /&gt;
&lt;br /&gt;
Attending FOSDEM 2011?  Add your name to this page so that other developers can look out for you!&lt;br /&gt;
&lt;br /&gt;
* Frans Meulenbroeks (eFfeM)&lt;br /&gt;
* Esben Haabendal&lt;br /&gt;
* Robert Schuster (rschus/thebohemian)&lt;br /&gt;
&lt;br /&gt;
== Hotels ==&lt;br /&gt;
&lt;br /&gt;
Although FOSDEM itself takes place at the ULB campus, most folks prefer to stay nearer the city centre.&lt;br /&gt;
&lt;br /&gt;
The Astrid has traditionally been the default choice for OE developers, though there are many other hotels in the area.  If you are staying in a hotel other than the Astrid, feel free to add it to this section for the benefit of others.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Presentations&amp;diff=3246</id>
		<title>Presentations</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Presentations&amp;diff=3246"/>
		<updated>2010-11-22T13:41:36Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* 2010 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of presentations talking of OpenEmbedded and bitbake :&lt;br /&gt;
&lt;br /&gt;
== 2004 ==&lt;br /&gt;
[http://uuu.enseirb.fr/~kadionik/rmll2004/presentation/philip_blundell.pdf Introduction to the GPE Palmtop Environment and the OpenEmbedded Project] - Phil Blundell - RMLL - [[Media:philip_blundell.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2005 ==&lt;br /&gt;
Building Embedded Linux Distributions with BitBake and OpenEmbedded - Michael &#039;Mickey&#039; Lauer - FOSDEM - [[Media:FOSDEM2005.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2006 ==&lt;br /&gt;
[http://svn.gnumonks.org/trunk/presentation/2006/oe_simputer-foss.in-2006/oe_simputer.pdf OpenEmbedded on the Simputer] - Harald Welte - FOSS.in - [[Media:oe_simputer.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2007 ==&lt;br /&gt;
[http://www.power.org/devcon/07/Session_Downloads/PADC07_Koroneos_OE-presentation-final.pdf Introduction to OE] - Stelios S. Koroneos - PowerArchitecture Developer Conference - [[Media:PADC07_Koroneos_OE-presentation-final.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/7/7c/Koen-ELC2007.pdf OpenEmbedded Easy QA, repeatability and retargetting] - Koen Kooi, Michael &#039;Mickey&#039; Lauer, Richard &#039;RP&#039; Purdie, Holger &#039;zecke&#039; Freyther - ELC - [[Media:Koen-ELC2007.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2008 ==&lt;br /&gt;
[http://www.celinux.org/elc08_presentations/mlocke-elc2008-oe.pdf OpenEmbedded for Product Development] - Matthew Locke - ELC - [[Media:mlocke-elc2008-oe.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://cgit.openembedded.org/cgit.cgi/openembedded/plain/contrib/presentations/cross-compilation_with_OpenEmbedded_-_LinuxTag2008_-_Robert_Schuster.odp Cross Compilation With OpenEmbedded] - Robert Schuster - LinuxTag [[Media:Cross-compilation with OpenEmbedded - LinuxTag2008 - Robert Schuster.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2009 ==&lt;br /&gt;
[http://www.celinuxforum.org/CelfPubWiki/ELC2009Presentations?action=AttachFile&amp;amp;do=get&amp;amp;target=ELC.klaasvangend.openembedded.v4.pdf Top 3 pains in professional use of bitbake] - Klaas van Gend - ELC - [[Media:ELC2009Presentations.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://marcin.juszkiewicz.com.pl/download/presentations/2009-SCW-Poky_Linux_and_OpenEmbedded_based_environment.pdf Poky Linux &amp;amp; OpenEmbedded based environment] - Marcin Juszkiewicz - ST-Ericsson Community Workshop - [[Media:2009-SCW-Poky_Linux_and_OpenEmbedded_based_environment.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/a/ac/Hombourger-Why_oe_good_foundation_for_mv.odp Why OpenEmbedded proved a good foundation for MontaVista] - Cedric Hombourger - ELCE - [[Media:Hombourger-Why_oe_good_foundation_for_mv.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/e/e4/Juszkiewicz-HackingWithOpenEmbedded.pdf Hacking with OpenEmbedded] - Marcin Juszkiewicz - ELCE - [[Media:Juszkiewicz-HackingWithOpenEmbedded.pdf]]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.koansoftware.com/public/talks/Confsl-2009/KaeilOS-Confsl09.pdf KaeilOS e Openembedded Linux - paper] - Marco Cavallini - [http://www.confsl.org/confsl09/ CONFSL] (presentation in Italian / presentazione in italiano) - [[Media:KaeilOS-Confsl09.pdf]]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.koansoftware.com/public/talks/Confsl-2009/KaeilOS-Confsl09-slides.pdf KaeilOS e Openembedded Linux - slides] - Marco Cavallini - [http://www.confsl.org/confsl09/ CONFSL] (presentation in Italian / presentazione in italiano) - [[Media:KaeilOS-Confsl09-slides.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2010 ==&lt;br /&gt;
[http://www.slideshare.net/zenlinux/openembedded OpenEmbedded] - Scott Garman - PLUG Advanced Topics&lt;br /&gt;
&lt;br /&gt;
[http://www.solutionslinux.fr/upload/file/linux%202010/oe_presentation.pdf OpenEmbedded Une solution GNU/Linux pour l&#039;embarqué] - Cyril Romain - Solutions Linux - (presentation in French / présentation en Français)&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/7/73/Openembedded.pdf The State of OpenEmbedded and Tooling to Make Life Easier] - Koen Kooi - ELCE - [[Media:Openembedded.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://files.meetup.com/1590495/openembedded.pdf OpenEmbedded An Embedded Linux Distribution Framework] - Khem Raj - [[Media:2010_Khem_Openembedded.pdf‎]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Presentations&amp;diff=3245</id>
		<title>Presentations</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Presentations&amp;diff=3245"/>
		<updated>2010-11-22T13:40:46Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* 2008 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of presentations talking of OpenEmbedded and bitbake :&lt;br /&gt;
&lt;br /&gt;
== 2004 ==&lt;br /&gt;
[http://uuu.enseirb.fr/~kadionik/rmll2004/presentation/philip_blundell.pdf Introduction to the GPE Palmtop Environment and the OpenEmbedded Project] - Phil Blundell - RMLL - [[Media:philip_blundell.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2005 ==&lt;br /&gt;
Building Embedded Linux Distributions with BitBake and OpenEmbedded - Michael &#039;Mickey&#039; Lauer - FOSDEM - [[Media:FOSDEM2005.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2006 ==&lt;br /&gt;
[http://svn.gnumonks.org/trunk/presentation/2006/oe_simputer-foss.in-2006/oe_simputer.pdf OpenEmbedded on the Simputer] - Harald Welte - FOSS.in - [[Media:oe_simputer.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2007 ==&lt;br /&gt;
[http://www.power.org/devcon/07/Session_Downloads/PADC07_Koroneos_OE-presentation-final.pdf Introduction to OE] - Stelios S. Koroneos - PowerArchitecture Developer Conference - [[Media:PADC07_Koroneos_OE-presentation-final.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/7/7c/Koen-ELC2007.pdf OpenEmbedded Easy QA, repeatability and retargetting] - Koen Kooi, Michael &#039;Mickey&#039; Lauer, Richard &#039;RP&#039; Purdie, Holger &#039;zecke&#039; Freyther - ELC - [[Media:Koen-ELC2007.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2008 ==&lt;br /&gt;
[http://www.celinux.org/elc08_presentations/mlocke-elc2008-oe.pdf OpenEmbedded for Product Development] - Matthew Locke - ELC - [[Media:mlocke-elc2008-oe.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://cgit.openembedded.org/cgit.cgi/openembedded/plain/contrib/presentations/cross-compilation_with_OpenEmbedded_-_LinuxTag2008_-_Robert_Schuster.odp Cross Compilation With OpenEmbedded] - Robert Schuster - LinuxTag [[Media:Cross-compilation with OpenEmbedded - LinuxTag2008 - Robert Schuster.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2009 ==&lt;br /&gt;
[http://www.celinuxforum.org/CelfPubWiki/ELC2009Presentations?action=AttachFile&amp;amp;do=get&amp;amp;target=ELC.klaasvangend.openembedded.v4.pdf Top 3 pains in professional use of bitbake] - Klaas van Gend - ELC - [[Media:ELC2009Presentations.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://marcin.juszkiewicz.com.pl/download/presentations/2009-SCW-Poky_Linux_and_OpenEmbedded_based_environment.pdf Poky Linux &amp;amp; OpenEmbedded based environment] - Marcin Juszkiewicz - ST-Ericsson Community Workshop - [[Media:2009-SCW-Poky_Linux_and_OpenEmbedded_based_environment.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/a/ac/Hombourger-Why_oe_good_foundation_for_mv.odp Why OpenEmbedded proved a good foundation for MontaVista] - Cedric Hombourger - ELCE - [[Media:Hombourger-Why_oe_good_foundation_for_mv.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/e/e4/Juszkiewicz-HackingWithOpenEmbedded.pdf Hacking with OpenEmbedded] - Marcin Juszkiewicz - ELCE - [[Media:Juszkiewicz-HackingWithOpenEmbedded.pdf]]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.koansoftware.com/public/talks/Confsl-2009/KaeilOS-Confsl09.pdf KaeilOS e Openembedded Linux - paper] - Marco Cavallini - [http://www.confsl.org/confsl09/ CONFSL] (presentation in Italian / presentazione in italiano) - [[Media:KaeilOS-Confsl09.pdf]]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.koansoftware.com/public/talks/Confsl-2009/KaeilOS-Confsl09-slides.pdf KaeilOS e Openembedded Linux - slides] - Marco Cavallini - [http://www.confsl.org/confsl09/ CONFSL] (presentation in Italian / presentazione in italiano) - [[Media:KaeilOS-Confsl09-slides.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2010 ==&lt;br /&gt;
[http://files.meetup.com/1590495/openembedded.pdf Introduction to OpenEmbedded] - Khem Raj&lt;br /&gt;
&lt;br /&gt;
[http://www.slideshare.net/zenlinux/openembedded OpenEmbedded] - Scott Garman - PLUG Advanced Topics&lt;br /&gt;
&lt;br /&gt;
[http://www.solutionslinux.fr/upload/file/linux%202010/oe_presentation.pdf OpenEmbedded Une solution GNU/Linux pour l&#039;embarqué] - Cyril Romain - Solutions Linux - (presentation in French / présentation en Français)&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/7/73/Openembedded.pdf The State of OpenEmbedded and Tooling to Make Life Easier] - Koen Kooi - ELCE - [[Media:Openembedded.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://files.meetup.com/1590495/openembedded.pdf OpenEmbedded An Embedded Linux Distribution Framework] - Khem Raj - [[Media:2010_Khem_Openembedded.pdf‎]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Presentations&amp;diff=3243</id>
		<title>Presentations</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Presentations&amp;diff=3243"/>
		<updated>2010-11-22T13:38:41Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* 2010 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of presentations talking of OpenEmbedded and bitbake :&lt;br /&gt;
&lt;br /&gt;
== 2004 ==&lt;br /&gt;
[http://uuu.enseirb.fr/~kadionik/rmll2004/presentation/philip_blundell.pdf Introduction to the GPE Palmtop Environment and the OpenEmbedded Project] - Phil Blundell - RMLL - [[Media:philip_blundell.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2005 ==&lt;br /&gt;
Building Embedded Linux Distributions with BitBake and OpenEmbedded - Michael &#039;Mickey&#039; Lauer - FOSDEM - [[Media:FOSDEM2005.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2006 ==&lt;br /&gt;
[http://svn.gnumonks.org/trunk/presentation/2006/oe_simputer-foss.in-2006/oe_simputer.pdf OpenEmbedded on the Simputer] - Harald Welte - FOSS.in - [[Media:oe_simputer.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2007 ==&lt;br /&gt;
[http://www.power.org/devcon/07/Session_Downloads/PADC07_Koroneos_OE-presentation-final.pdf Introduction to OE] - Stelios S. Koroneos - PowerArchitecture Developer Conference - [[Media:PADC07_Koroneos_OE-presentation-final.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/7/7c/Koen-ELC2007.pdf OpenEmbedded Easy QA, repeatability and retargetting] - Koen Kooi, Michael &#039;Mickey&#039; Lauer, Richard &#039;RP&#039; Purdie, Holger &#039;zecke&#039; Freyther - ELC - [[Media:Koen-ELC2007.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2008 ==&lt;br /&gt;
[http://www.celinux.org/elc08_presentations/mlocke-elc2008-oe.pdf OpenEmbedded for Product Development] - Matthew Locke - ELC - [[Media:mlocke-elc2008-oe.pdf]]&lt;br /&gt;
[http://cgit.openembedded.org/cgit.cgi/openembedded/plain/contrib/presentations/cross-compilation_with_OpenEmbedded_-_LinuxTag2008_-_Robert_Schuster.odp Cross Compilation With OpenEmbedded] - Robert Schuster - LinuxTag [[Media:Cross-compilation with OpenEmbedded - LinuxTag2008 - Robert Schuster.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2009 ==&lt;br /&gt;
[http://www.celinuxforum.org/CelfPubWiki/ELC2009Presentations?action=AttachFile&amp;amp;do=get&amp;amp;target=ELC.klaasvangend.openembedded.v4.pdf Top 3 pains in professional use of bitbake] - Klaas van Gend - ELC - [[Media:ELC2009Presentations.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://marcin.juszkiewicz.com.pl/download/presentations/2009-SCW-Poky_Linux_and_OpenEmbedded_based_environment.pdf Poky Linux &amp;amp; OpenEmbedded based environment] - Marcin Juszkiewicz - ST-Ericsson Community Workshop - [[Media:2009-SCW-Poky_Linux_and_OpenEmbedded_based_environment.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/a/ac/Hombourger-Why_oe_good_foundation_for_mv.odp Why OpenEmbedded proved a good foundation for MontaVista] - Cedric Hombourger - ELCE - [[Media:Hombourger-Why_oe_good_foundation_for_mv.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/e/e4/Juszkiewicz-HackingWithOpenEmbedded.pdf Hacking with OpenEmbedded] - Marcin Juszkiewicz - ELCE - [[Media:Juszkiewicz-HackingWithOpenEmbedded.pdf]]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.koansoftware.com/public/talks/Confsl-2009/KaeilOS-Confsl09.pdf KaeilOS e Openembedded Linux - paper] - Marco Cavallini - [http://www.confsl.org/confsl09/ CONFSL] (presentation in Italian / presentazione in italiano) - [[Media:KaeilOS-Confsl09.pdf]]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.koansoftware.com/public/talks/Confsl-2009/KaeilOS-Confsl09-slides.pdf KaeilOS e Openembedded Linux - slides] - Marco Cavallini - [http://www.confsl.org/confsl09/ CONFSL] (presentation in Italian / presentazione in italiano) - [[Media:KaeilOS-Confsl09-slides.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2010 ==&lt;br /&gt;
[http://files.meetup.com/1590495/openembedded.pdf Introduction to OpenEmbedded] - Khem Raj&lt;br /&gt;
&lt;br /&gt;
[http://www.slideshare.net/zenlinux/openembedded OpenEmbedded] - Scott Garman - PLUG Advanced Topics&lt;br /&gt;
&lt;br /&gt;
[http://www.solutionslinux.fr/upload/file/linux%202010/oe_presentation.pdf OpenEmbedded Une solution GNU/Linux pour l&#039;embarqué] - Cyril Romain - Solutions Linux - (presentation in French / présentation en Français)&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/7/73/Openembedded.pdf The State of OpenEmbedded and Tooling to Make Life Easier] - Koen Kooi - ELCE - [[Media:Openembedded.pdf]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Presentations&amp;diff=3242</id>
		<title>Presentations</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Presentations&amp;diff=3242"/>
		<updated>2010-11-22T13:38:31Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* 2010 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of presentations talking of OpenEmbedded and bitbake :&lt;br /&gt;
&lt;br /&gt;
== 2004 ==&lt;br /&gt;
[http://uuu.enseirb.fr/~kadionik/rmll2004/presentation/philip_blundell.pdf Introduction to the GPE Palmtop Environment and the OpenEmbedded Project] - Phil Blundell - RMLL - [[Media:philip_blundell.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2005 ==&lt;br /&gt;
Building Embedded Linux Distributions with BitBake and OpenEmbedded - Michael &#039;Mickey&#039; Lauer - FOSDEM - [[Media:FOSDEM2005.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2006 ==&lt;br /&gt;
[http://svn.gnumonks.org/trunk/presentation/2006/oe_simputer-foss.in-2006/oe_simputer.pdf OpenEmbedded on the Simputer] - Harald Welte - FOSS.in - [[Media:oe_simputer.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2007 ==&lt;br /&gt;
[http://www.power.org/devcon/07/Session_Downloads/PADC07_Koroneos_OE-presentation-final.pdf Introduction to OE] - Stelios S. Koroneos - PowerArchitecture Developer Conference - [[Media:PADC07_Koroneos_OE-presentation-final.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/7/7c/Koen-ELC2007.pdf OpenEmbedded Easy QA, repeatability and retargetting] - Koen Kooi, Michael &#039;Mickey&#039; Lauer, Richard &#039;RP&#039; Purdie, Holger &#039;zecke&#039; Freyther - ELC - [[Media:Koen-ELC2007.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2008 ==&lt;br /&gt;
[http://www.celinux.org/elc08_presentations/mlocke-elc2008-oe.pdf OpenEmbedded for Product Development] - Matthew Locke - ELC - [[Media:mlocke-elc2008-oe.pdf]]&lt;br /&gt;
[http://cgit.openembedded.org/cgit.cgi/openembedded/plain/contrib/presentations/cross-compilation_with_OpenEmbedded_-_LinuxTag2008_-_Robert_Schuster.odp Cross Compilation With OpenEmbedded] - Robert Schuster - LinuxTag [[Media:Cross-compilation with OpenEmbedded - LinuxTag2008 - Robert Schuster.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2009 ==&lt;br /&gt;
[http://www.celinuxforum.org/CelfPubWiki/ELC2009Presentations?action=AttachFile&amp;amp;do=get&amp;amp;target=ELC.klaasvangend.openembedded.v4.pdf Top 3 pains in professional use of bitbake] - Klaas van Gend - ELC - [[Media:ELC2009Presentations.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://marcin.juszkiewicz.com.pl/download/presentations/2009-SCW-Poky_Linux_and_OpenEmbedded_based_environment.pdf Poky Linux &amp;amp; OpenEmbedded based environment] - Marcin Juszkiewicz - ST-Ericsson Community Workshop - [[Media:2009-SCW-Poky_Linux_and_OpenEmbedded_based_environment.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/a/ac/Hombourger-Why_oe_good_foundation_for_mv.odp Why OpenEmbedded proved a good foundation for MontaVista] - Cedric Hombourger - ELCE - [[Media:Hombourger-Why_oe_good_foundation_for_mv.pdf]]&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/e/e4/Juszkiewicz-HackingWithOpenEmbedded.pdf Hacking with OpenEmbedded] - Marcin Juszkiewicz - ELCE - [[Media:Juszkiewicz-HackingWithOpenEmbedded.pdf]]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.koansoftware.com/public/talks/Confsl-2009/KaeilOS-Confsl09.pdf KaeilOS e Openembedded Linux - paper] - Marco Cavallini - [http://www.confsl.org/confsl09/ CONFSL] (presentation in Italian / presentazione in italiano) - [[Media:KaeilOS-Confsl09.pdf]]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.koansoftware.com/public/talks/Confsl-2009/KaeilOS-Confsl09-slides.pdf KaeilOS e Openembedded Linux - slides] - Marco Cavallini - [http://www.confsl.org/confsl09/ CONFSL] (presentation in Italian / presentazione in italiano) - [[Media:KaeilOS-Confsl09-slides.pdf]]&lt;br /&gt;
&lt;br /&gt;
== 2010 ==&lt;br /&gt;
[http://files.meetup.com/1590495/openembedded.pdf Introduction to OpenEmbedded] - Khem Raj&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.slideshare.net/zenlinux/openembedded OpenEmbedded] - Scott Garman - PLUG Advanced Topics&lt;br /&gt;
&lt;br /&gt;
[http://www.solutionslinux.fr/upload/file/linux%202010/oe_presentation.pdf OpenEmbedded Une solution GNU/Linux pour l&#039;embarqué] - Cyril Romain - Solutions Linux - (presentation in French / présentation en Français)&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/images/7/73/Openembedded.pdf The State of OpenEmbedded and Tooling to Make Life Easier] - Koen Kooi - ELCE - [[Media:Openembedded.pdf]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Oedem/2010&amp;diff=2944</id>
		<title>Oedem/2010</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Oedem/2010&amp;diff=2944"/>
		<updated>2010-10-26T06:49:37Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenEmbedded Developers&#039; Meeting 2010 will be in Cambridge, UK on the 29th and 30th of October. This is after http://www.embeddedlinuxconference.com/elc_europe10/index.html and will be held in the same place, the University Arms Hotel  (http://www.devere.co.uk/our-locations/university-arms).&lt;br /&gt;
&lt;br /&gt;
All developers and other interested parties are welcome.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
Darwin Suite in the [http://www.devere.co.uk/our-locations/university-arms.html University Arms Hotel] Cambridge, England.&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
Due to restricted space at the venue, the number of attendees is limited to 30 poeple.&lt;br /&gt;
&lt;br /&gt;
== Agenda Suggestions ==&lt;br /&gt;
&lt;br /&gt;
* FM: I would like to suggest a discussion on recipe quality and how to improve it. I must say that I am somewhat disappointed by the number of recipes that do not fetch or do not patch. How are we going to handle this&lt;br /&gt;
* FM: related to the previous: how to deal with orphaned recipes, distros and machines&lt;br /&gt;
* FM: suggest to re-institute the MAINTAINERS field, at least for distro and machine conf files but preferably also in recipes. Currently it is often not clear who maintains what&lt;br /&gt;
* FM: review/commit/revert policy (e.g. formalize the suggestion that NAKs need to be motivated and that submitted patches can be pushed if there is no neg feedback within say 2 weeks (even if there is no feedback at all).&lt;br /&gt;
* FM: maybe discuss the testing branch/procedures&lt;br /&gt;
* FM: usage of DEFAULT_PREFERENCE = &amp;quot;-1&amp;quot; (and more concrete: the creation of new recipes with DP = -1, that never seem to loose its DP)&lt;br /&gt;
*Khem: Libtool 2.4 upgrade.&lt;br /&gt;
*Khem: bitbake world. What do we do ?&lt;br /&gt;
*Khem: patchwork workflow&lt;br /&gt;
*Khem: Security updates how to handle&lt;br /&gt;
*Khem: Make LICENSE field mandatory in recipes&lt;br /&gt;
*Khem: Time based releases ( one a year)&lt;br /&gt;
*Hrw: recipes/ subdirectories (all &amp;quot;inherit opie&amp;quot; or &amp;quot;inherit palmtop&amp;quot; -&amp;gt; recipes/opie/ dir etc)&lt;br /&gt;
*RP: srctree, srcrev mess, pain with linux-wrs - time to rework the scm fetchers?&lt;br /&gt;
*RP: Proposal - merge fetch and unpack tasks&lt;br /&gt;
*LW: the recipe owner needs to well understand class implementation details, no consistency, no documentation, and subject to change.&lt;br /&gt;
*LW: BB2 and OE2 from scratch?&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Friday ===&lt;br /&gt;
&lt;br /&gt;
====OpenEmbedded eV General Assembly====&lt;br /&gt;
&lt;br /&gt;
This is the formal eV meeting. Principal topics are financial reports, the board election, and voting in of new members.&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[GA2010]]&lt;br /&gt;
&lt;br /&gt;
=== Saturday ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Travel==&lt;br /&gt;
&lt;br /&gt;
London Stansted airport is the nearest to Cambridge with regular service. (There is a small airport in Cambridge itself but I don&#039;t think any scheduled airlines operate from there anymore.)&lt;br /&gt;
&lt;br /&gt;
For those travelling from Europe, Stansted is about a 30-minute train ride from Cambridge city centre and is served by Air Berlin, Ryanair and Germanwings among others. Luton airport is about 1 hour away by bus and is served by Easyjet.&lt;br /&gt;
&lt;br /&gt;
For those travelling from further away, most long-haul flights arrive at Heathrow or Gatwick airports (although there is some transatlantic service into Stansted). Both Heathrow and Gatwick are about 2 hours from Cambridge by train or bus: the train is quicker but involves several changes in London, whereas the bus is slow but cheaper and less complicated.&lt;br /&gt;
&lt;br /&gt;
If arriving at LHR airport, take the Piccadilly line from the Underground station and ride it all the way to Kings Cross St Pancras. Ascend to street level, follow signs to Kings Cross mainline station (not St Pancras: the two stations are different although they share a subway stop) and then look for trains to Cambridge or Kings Lynn on the departure board. There are usually two fast services and two slow services to Cambridge per hour: the slow trains are often overtaken by the fast ones en route so it may be best to wait for a fast service even if this is not the next to depart.&lt;br /&gt;
&lt;br /&gt;
If arriving at LCY, take the DLR to Bank, then change to the Northern Line northbound. From Kings Cross St Pancras, proceed as for LHR, above.&lt;br /&gt;
&lt;br /&gt;
http://nationalrail.co.uk&lt;br /&gt;
&lt;br /&gt;
http://nationalexpress.co.uk/&lt;br /&gt;
&lt;br /&gt;
Alternatively you can take the Eurostar to London St Pancras, which is 50 minutes from Cambridge by train. &lt;br /&gt;
&lt;br /&gt;
See also the ELCE10 website for some travel informations: http://www.embeddedlinuxconference.com/elc_europe10/hotel.html&lt;br /&gt;
&lt;br /&gt;
==Accommodation==&lt;br /&gt;
&lt;br /&gt;
The nearest full-service hotel is ...&lt;br /&gt;
&lt;br /&gt;
Cheapest accomodation is ...&lt;br /&gt;
&lt;br /&gt;
==Food and drink==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Attending for sure==&lt;br /&gt;
&lt;br /&gt;
# Philip Balister&lt;br /&gt;
# Florian Boor&lt;br /&gt;
# Denys Dmytriyenko&lt;br /&gt;
# Mark Hatle&lt;br /&gt;
# Koen Kooi&lt;br /&gt;
# Fabio Mauri (friday until 15:00)&lt;br /&gt;
# Frans Meulenbroeks&lt;br /&gt;
# Jeff Polk&lt;br /&gt;
# Richard Purdie&lt;br /&gt;
# Raffaele Recalcati (friday until 15:00)&lt;br /&gt;
# Stefan Schmidt&lt;br /&gt;
# Leon Woestenberg&lt;br /&gt;
# Saul Wold&lt;br /&gt;
# Davide Bonfanti (only friday until 15:00)&lt;br /&gt;
&lt;br /&gt;
==Attending not yet sure==&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Won&#039;t be able to attend==&lt;br /&gt;
# Michael Lauer -- really sorry :/&lt;br /&gt;
# Robert Schuster&lt;br /&gt;
&lt;br /&gt;
[[Category:OEDEM]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=2362</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=2362"/>
		<updated>2010-06-30T11:18:58Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (since September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+), a large bunch of the Jakarta commons libraries and stuff like BSF, POI, log4j, logkit and ORO are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you should prefer the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or a J2SE-like environment (JamVM/Cacao and GNU Classpath or any of the OpenJDK variants). If PhoneME is installed it is preferred.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Ant ===&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Despite all this troubles Ant (1.7.1) is available and supported as an application which can be run from build recipes.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded, you need to install a JDK, Kaffe or Jikes and then make modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. &#039;&#039;&#039;These suggestions are wrong!&#039;&#039;&#039; The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain.&lt;br /&gt;
&lt;br /&gt;
=Configuring (add info about what and where)=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following line to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
If you need Ant to build your recipe add &#039;&#039;ant-native&#039;&#039; to your recipes dependencies. This will allow you to call the built-in Ant executable.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable.&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==Ant integration for build recipes==&lt;br /&gt;
Although &#039;&#039;ant&#039;&#039; can be used as a standalone tool there is no direct support for it in the recipe. E.g. the Debian buildsystem (CDBS) has support classes that can be used for Ant-based Java sourcepackages. It would be nice to have this too for OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
== Q: I need to solve a specific Java problem in OE and want to throw money at this. Whom can I contact? ==&lt;br /&gt;
The [http://jalimo.org Jalimo] project has done a lot of Java work in OE and are available for contract work.  You can also ask for experienced devs on the openembedded-devel mailing list.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Template:Main_page/news&amp;diff=2337</id>
		<title>Template:Main page/news</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Template:Main_page/news&amp;diff=2337"/>
		<updated>2010-06-11T06:20:59Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Please use ISO date format (YYYY-MM-DD) --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Please only three entries of recent news, if there are more, move the oldest one to the top of the NewsArchive page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recent News:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2010-06-09:&#039;&#039;&#039;&#039;&#039; OpenEmbedded in Berlin! Meet us at our booth at [http://www.linuxtag.org LinuxTag 2010].&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2010-02-06:&#039;&#039;&#039;&#039;&#039; OpenEmbedded at [http://fosdem.org FOSDEM&#039;10] - We have a booth at Europe&#039;s finest F/OSS event. [[Fosdem 2010|See you in Brussels]]!&lt;br /&gt;
See [[NewsArchive|News Archive]] for older news.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Template:Main_page/news&amp;diff=2336</id>
		<title>Template:Main page/news</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Template:Main_page/news&amp;diff=2336"/>
		<updated>2010-06-11T06:19:35Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Please use ISO date format (YYYY-MM-DD) --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Please only three entries of recent news, if there are more, move the oldest one to the top of the NewsArchive page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recent News:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2010-06-09:&#039;&#039;&#039;&#039;&#039; OpenEmbedded at [http://www.linuxtag.org LinuxTag&#039;10] - Visit our booth at this F/OSS event in Berlin.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2010-02-06:&#039;&#039;&#039;&#039;&#039; OpenEmbedded at [http://fosdem.org FOSDEM&#039;10] - We have a booth at Europe&#039;s finest F/OSS event. [[Fosdem 2010|See you in Brussels]]!&lt;br /&gt;
See [[NewsArchive|News Archive]] for older news.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=NewsArchive&amp;diff=2335</id>
		<title>NewsArchive</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=NewsArchive&amp;diff=2335"/>
		<updated>2010-06-11T06:19:18Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Older News:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-11-07:&#039;&#039;&#039;&#039;&#039; [[Oedem/2009|Openembedded Developer Meeting 2009]] in Cambridge, UK&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-08-12:&#039;&#039;&#039;&#039;&#039; Openembedded gains ability to create [http://docs.openembedded.org/usermanual/html/ch05s08.html Qt Embedded Linux SDK]&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-05-27:&#039;&#039;&#039;&#039;&#039; Palm is using Openembedded to build Palm [http://developer.palm.com/ webOS]&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-05-27:&#039;&#039;&#039;&#039;&#039; MontaVista is using OpenEmbedded in their [http://mvista.com/product_detail_mvl6.php MontaVista Linux 6 product]&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-03-31:&#039;&#039;&#039;&#039;&#039; OpenEmbedded opens the stable/2009 [[Stable]] branch. Special procedure is applied to it which results in better support for our downstream users.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-03-24:&#039;&#039;&#039;&#039;&#039; [http://www.foss-aalborg.dk/ FOSS Aalborg] in Aalborg, Denmark, with a focus on embedded software. [[User:Mickey|Mickey]] gives a talk about OpenEmbedded.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-03-06:&#039;&#039;&#039;&#039;&#039; [http://www.alwaysinnovating.com Always Innovating] is using OE to build software for their Touch Book.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-02-19:&#039;&#039;&#039;&#039;&#039; [http://koansoftware.com/index_en.php  KOAN Software] company [http://thread.gmane.org/gmane.comp.handhelds.openembedded/21188 announces] it&#039;s [http://kaeilos.com/ KaeilOS] distribution will join the OpenEmbedded project.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-02-10:&#039;&#039;&#039;&#039;&#039; OE has a new Logo -- Many thanks to [http://buglabs.com Bug Labs] who funded the logo development, and [http://mateozlatar.com/ Mateo Zlatar] for designing the logo.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=1467</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=1467"/>
		<updated>2009-06-19T11:57:30Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (since September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you should prefer the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or a J2SE-like environment (JamVM/Cacao and GNU Classpath or any of the OpenJDK variants). If PhoneME is installed it is preferred.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded, you need to install a JDK, Kaffe or Jikes and then make modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. &#039;&#039;&#039;These suggestions are wrong!&#039;&#039;&#039; The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable. Highly recommended on AMD64 systems where Cacao likes to fail:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
== Q: I need to solve a specific Java problem in OE and want to throw money at this. Whom can I contact? ==&lt;br /&gt;
The Java support in OpenEmbedded is provided by the [http://jalimo.org Jalimo] project. Either follow the &#039;commercial support&#039; link on the home page or ask for help on the openembedded-devel mailing list.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=1466</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=1466"/>
		<updated>2009-06-19T11:53:24Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* A word of warning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (since September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you should prefer the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or a J2SE-like environment (JamVM/Cacao and GNU Classpath or any of the OpenJDK variants). If PhoneME is installed it is preferred.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded, you need to install a JDK, Kaffe or Jikes and then make modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. &#039;&#039;&#039;These suggestions are wrong!&#039;&#039;&#039; The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable. Highly recommended on AMD64 systems where Cacao likes to fail:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=1465</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=1465"/>
		<updated>2009-06-19T11:53:08Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* A word of warning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (since September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you should prefer the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or a J2SE-like environment (JamVM/Cacao and GNU Classpath or any of the OpenJDK variants). If PhoneME is installed it is preferred.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded, you need to install a JDK, Kaffe or Jikes and then make modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. These suggestions are &#039;&#039;wrong&#039;&#039;! The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable. Highly recommended on AMD64 systems where Cacao likes to fail:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=1464</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=1464"/>
		<updated>2009-06-19T11:52:47Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* A word of warning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (since September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you should prefer the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or a J2SE-like environment (JamVM/Cacao and GNU Classpath or any of the OpenJDK variants). If PhoneME is installed it is preferred.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded, you need to install a JDK, Kaffe or Jikes and then making modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. These suggestions are &#039;&#039;wrong&#039;&#039;! The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable. Highly recommended on AMD64 systems where Cacao likes to fail:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=1463</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=1463"/>
		<updated>2009-06-19T11:52:12Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* J2ME MIDP2.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (since September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you should prefer the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or a J2SE-like environment (JamVM/Cacao and GNU Classpath or any of the OpenJDK variants). If PhoneME is installed it is preferred.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded requires installing a JDK, Kaffe or Jikes and then making modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. These suggestions are &#039;&#039;wrong&#039;&#039;! The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain. &lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable. Highly recommended on AMD64 systems where Cacao likes to fail:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=1462</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=1462"/>
		<updated>2009-06-19T11:50:25Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* PhoneME Advanced */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (since September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you should prefer the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded requires installing a JDK, Kaffe or Jikes and then making modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. These suggestions are &#039;&#039;wrong&#039;&#039;! The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain. &lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable. Highly recommended on AMD64 systems where Cacao likes to fail:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=1461</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=1461"/>
		<updated>2009-06-19T11:48:59Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Virtual machine and class library */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (since September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded requires installing a JDK, Kaffe or Jikes and then making modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. These suggestions are &#039;&#039;wrong&#039;&#039;! The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain. &lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable. Highly recommended on AMD64 systems where Cacao likes to fail:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=1460</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=1460"/>
		<updated>2009-06-19T11:47:35Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: added word of warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with either Cacao or Hotspot/Zero as the runtime) is available through the Jalimo overlay. This will be merged soon. Future additions will also include Hotspot/Shark which is a variant of Hotspot using a generic JIT compiler based on LLVM.&lt;br /&gt;
&lt;br /&gt;
It is planned to use OpenJDK as the native Java runtime. That way Java packages will be compiled against this library.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==OpenJDK==&lt;br /&gt;
OpenJDK is the name of the F/OSS Java stack from Sun. It normally consists of the class library (often referred to as OpenJDK as well), the Hotspot runtime and many many tools (e.g. javah, rmic, javaws). OpenEmbedded support building OpenJDK with the CacaoVM. This gives many platforms which Hotspot does not directly support a fast Java VM. Please note that Cacao lacks many advanced features like JVMTI. Your only other option is the Zero port of Hotspot. Zero is a C++-based interpreter and can be run on any platform supporting libffi. This gives you a featurefull VM for many platforms at the cost of performance.&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=A word of warning=&lt;br /&gt;
Every so often people on the net suggest that in order to get Java stuff running in OpenEmbedded requires installing a JDK, Kaffe or Jikes and then making modifications to the PATH variable in order to allow the&lt;br /&gt;
build use the runtime or compiler. These suggestions are &#039;&#039;wrong&#039;&#039;! The Java support in OpenEmbedded is (and strives to stay) &#039;&#039;completely&#039;&#039; self-hosting. You should not need a single bit of Java on your host OS to get the Java recipes to compile.&lt;br /&gt;
&lt;br /&gt;
On the other hand the Java support in OE can happily co-exist with whatever &#039;java&#039;, &#039;javac&#039; and other tools you might have installed in your OS. Due to the nature of some configure scripts, those will sometimes find these executables but in the end only the tools from OpenEmbedded&#039;s staging directory will be used (if not its a bug that needs to be fixed).&lt;br /&gt;
&lt;br /&gt;
Please note that problem reports that are caused by pulling in native Java tools (those from your OS) into the OpenEmbedded build process will be closed as invalid. The reason is that the recipes are only supposed to work with the built-in toolchain. &lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering multiple J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao, phoneme or openjdk recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
Additionally OpenJDK can be built using either Cacao (same properties as above) or the Zero port of Hotspot. Zero is an C++-based interpreter capable of running on any platform that is supported by libffi.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao, JamVM or OpenJDK packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
=Writing a Java recipe=&lt;br /&gt;
This section is going to tell you, how to write a proper recipe to build a Java library or program.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;At the moment this is a stub and you will only find some scattered information which at a later point will be merged into a consistent whole.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==java-native.bbclass==&lt;br /&gt;
If you use the &#039;&#039;java-library&#039;&#039; bbclass in a recipe &#039;&#039;foo&#039;&#039; and generate a native variant (e.g. &#039;&#039;foo-native&#039;&#039;) you should use&lt;br /&gt;
&lt;br /&gt;
  inherit java-native&lt;br /&gt;
&lt;br /&gt;
instead of &#039;&#039;native&#039;&#039;. By doing so, you make sure, that any jars created by the recipe are properly installed into staging.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the releases that appear to be stable. Highly recommended on AMD64 systems where Cacao likes to fail:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These releases appear to be stable:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For the target device take these:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.4&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
Since December 2008 OpenJDK + Cacao can be crosscompiled with OpenEmbedded as demonstrated by Robert Schuster!&lt;br /&gt;
Check out http://rschuster.blogs.evolvis.org/2008/12/21/serving-cross-compiled-openjdk-with-icedtea/ and the answers http://rschuster.blogs.evolvis.org/2008/12/23/comments-on-latest-post-on-openjdk/&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Template:Main_page/news&amp;diff=1174</id>
		<title>Template:Main page/news</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Template:Main_page/news&amp;diff=1174"/>
		<updated>2009-03-31T21:09:45Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: stable branch news&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Please use ISO date format (YYYY-MM-DD) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recent News:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-03-31:&#039;&#039;&#039;&#039;&#039; OpenEmbedded opens the stable/2009 [[Stable]] branch. Special procedure is applied to it which results in better support for our downstream users.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-03-24:&#039;&#039;&#039;&#039;&#039; [http://www.foss-aalborg.dk/ FOSS Aalborg] in Aalborg, Denmark, with a focus on embedded software. [[User:Mickey|Mickey]] gives a talk about OpenEmbedded.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-03-06:&#039;&#039;&#039;&#039;&#039; [http://www.alwaysinnovating.com Always Innovating] is using OE to build software for their Touch Book.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-02-19:&#039;&#039;&#039;&#039;&#039; KOAN Software [http://thread.gmane.org/gmane.comp.handhelds.openembedded/21188 announces] it&#039;s KaeilOS distribution will join the OpenEmbedded project.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-02-10:&#039;&#039;&#039;&#039;&#039; OE has a new Logo -- Many thanks to [http://buglabs.com Bug Labs] who funded the logo development, and [http://mateozlatar.com/ Mateo Zlatar] for designing the logo.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Success_stories&amp;diff=1165</id>
		<title>Success stories</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Success_stories&amp;diff=1165"/>
		<updated>2009-03-29T00:47:55Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Open Source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of projects, companies and other people using OE as well as some quotes from OE users.&lt;br /&gt;
&lt;br /&gt;
== Commercial == &lt;br /&gt;
* 4G-Systems are using it for the [http://meshcube.org Meshcube], see [http://www.meshcube.org/meshwiki/OpenEmbeddedDevelopment] &lt;br /&gt;
* Dream Multimedia TV are using it for their Dreambox 702x, see [http://developer.elitedvb.net/listprojects.php?curr_dir=80] &lt;br /&gt;
* [http://www.mn-solutions.de M&amp;amp;N Solutions] is using it for it&#039;s MNCI &amp;quot;Ramses&amp;quot; device for software release 5.4. They use a local derivate of OE for their radio hand-held terminals RT3000 and RT4000 and for their fork-lift terminal RT2100. &lt;br /&gt;
* [http://www.toradex.com Toradex] are using it for their Colibri development boards &lt;br /&gt;
* [http://www.axon.tv/ Axon Digital Design] builds small Linux based firmwares for some of their modular HDTV boards. &lt;br /&gt;
* [http://www.emqbit.com/ emQbit] is using it for their development boards &lt;br /&gt;
* [http://openmoko.com/ OpenMoko] is using it for the OpenMoko SmartPhone Distribution &lt;br /&gt;
* Techsol is using it for their [http://www.medallionsystem.com/ Medallion] boards. &lt;br /&gt;
* [http://www.gumstix.com/ Gumstix] is using OpenEmbedded for their small form factor Basix, Connex, and Verdex motherboards&lt;br /&gt;
* [http://buglabs.net Bug Labs] is using Poky Linux on the [http://buglabs.net/products BUG] device, a portable and modular Linux platform.&lt;br /&gt;
* [http://bec-systems.com BEC Systems] is helping customers use OE in commercial projects.&lt;br /&gt;
* [http://www.sidebranch.com Sidebranch] uses OE to help companies get on speed with embedded Linux in an open manner.&lt;br /&gt;
* Hark Technologies uses OE for their [http://linuxdevices.com/news/NS7648514863.html AT91SAM9260 SBC]&lt;br /&gt;
&lt;br /&gt;
== Inhouse Usage == &lt;br /&gt;
* AMD: internal work on distributions for a thin client &lt;br /&gt;
* [http://www.openedhand.com Openedhand] : Internal development work and custom images &lt;br /&gt;
* Siemens: internal work in R&amp;amp;D &lt;br /&gt;
* TI: internal work on distributions for developer boards &lt;br /&gt;
* [http://www.digital-cube.co.kr Digitalcube] : internal work in R&amp;amp;D for developer boards and PMP &lt;br /&gt;
* [http://www.kernelconcepts.de/en kernel concepts] : Internal R&amp;amp;D tasks and demo images for customers. &lt;br /&gt;
* NXP Semiconductors: Custom images &amp;amp; distributions for research purposes with third parties.&lt;br /&gt;
* [http://www.tid.es/netvehicles/tools.htm Telefonica I+D Networked Vehicles Division] : R&amp;amp;D tasks in automotive field. OE is used for vehicle On Board Units and infrastructure Road Side Units.&lt;br /&gt;
* [http://www.atmel.com Atmel]: demos and documentation on all AT91 ARM based products available on [http://www.linux4sam.org www.linux4sam.org] : are using [http://www.angstrom-distribution.org Ångström]/OE.&lt;br /&gt;
* [http://www.mentorel.com Mentorel]: demo images for customers using [http://www.angstrom-distribution.org Ångström]/OE.&lt;br /&gt;
&lt;br /&gt;
== Education and Research == &lt;br /&gt;
* University of Twente: http://www.freeband.nl/project.cfm?id=494&amp;amp;language=en &lt;br /&gt;
* University of California, San Diego: https://wiisard.org/ &lt;br /&gt;
* University of Frankfurt: ELAN Project (E-Learning in Mobile Ad-hoc Networks) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Source == &lt;br /&gt;
* All [http://www.angstrom-distribution.org Ångström] releases are based on OE&lt;br /&gt;
* All [http://openzaurus.org OpenZaurus] releases &amp;gt;= 3.5.1 are based on OE &lt;br /&gt;
* All [http://opensimpad.org OpenSIMpad] releases &amp;gt;= 0.9.1 are based on OE &lt;br /&gt;
* [http://www.nslu2-linux.org/wiki/OpenSlug/HomePage OpenSlug] distribution for the Linksys NSLU2 and the [http://www.nslu2-linux.org/wiki/Unslung/HomePage Unslung] distribution for the NSLU2 as well. &lt;br /&gt;
* [http://owmnr.ifaistos.awmn.net OWMNR] - Open Wireless Metropolitan Network Router. OE based distribution for creating a wireless router. &lt;br /&gt;
* [http://gpephone.linuxtogo.org GPE Phone Edition] uses OE for VMWare demo images and to build SDKs. &lt;br /&gt;
* The [http://jlime.com JLime] Linux distribution uses OE for all current releases.&lt;br /&gt;
* All [http://dev.openbossa.org/mamona Mamona] releases are based on OE&lt;br /&gt;
* [http://jalimo.org Jalimo] maintains the Java build recipes in OE and provides binary packages for Maemo-based devices.&lt;br /&gt;
&lt;br /&gt;
== Open Hardware ==&lt;br /&gt;
* [http://wiki.emqbit.com/free-ecb-at91 Free ECB_AT91] - An open Single Board computer that [http://wiki.emqbit.com/openembedded runs openembedded].&lt;br /&gt;
&lt;br /&gt;
== Quotes == &lt;br /&gt;
&#039;&#039;Well, looks like openembedded has really sorted out my install/setup nightmare for this eval board... thanks you guys. In the last 4 hours, i&#039;ve gotten more done with this board than i have in 6 months.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I will try and add an smdk2410.conf machine file to the setup soon... not that i expect it&#039;ll be useful to a lot of people, but i&#039;ll try to at least document it so that other machines can be supported easily enough.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Well I just got OE set up and I&#039;ve been really impressed so far.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;OE takes all of the hassle out of cross-compiling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Documentation&amp;diff=1163</id>
		<title>Documentation</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Documentation&amp;diff=1163"/>
		<updated>2009-03-28T20:47:21Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Documentation that relates to Openembedded.&lt;br /&gt;
&lt;br /&gt;
* OE User manual [http://docs.openembedded.org/usermanual/usermanual.pdf (pdf)] [http://docs.openembedded.org/usermanual/html (html)] [http://docs.openembedded.org/usermanual/usermanual.html (html single-page)]&lt;br /&gt;
* [http://bitbake.berlios.de/manual/ Bitbake Manual]&lt;br /&gt;
* [http://www.pokylinux.org/doc/poky-handbook.html Poky Handbook]&lt;br /&gt;
&lt;br /&gt;
Articles about Openembedded:&lt;br /&gt;
* [http://bec-systems.com/site/tag/openembedded articles at BEC Systems]&lt;br /&gt;
&lt;br /&gt;
Guides and HowTos:&lt;br /&gt;
* [http://www.kernel-labs.org/files/openembedded-guide/openembedded-guide.html OpenEmbedded Guide by Example]&lt;br /&gt;
* [http://www.uv-ac.de/openembedded/ OpenEmbedded HowTo]&lt;br /&gt;
* [http://free-electrons.com/docs/openembedded/ Using OpenEmbedded to build embedded Linux distributions]&lt;br /&gt;
&lt;br /&gt;
[[Category:User]]&lt;br /&gt;
[[Category:Dev]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Template:Main_page/news&amp;diff=1161</id>
		<title>Template:Main page/news</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Template:Main_page/news&amp;diff=1161"/>
		<updated>2009-03-27T16:53:40Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Please use ISO date format (YYYY-MM-DD) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recent News:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-03-24:&#039;&#039;&#039;&#039;&#039; [http://www.foss-aalborg.dk/ FOSS Aalborg] in Aalborg, Denmark, with a focus on embedded software. [[User:Mickey|Mickey]] gives a talk about OpenEmbedded.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-03-06:&#039;&#039;&#039;&#039;&#039; [http://www.alwaysinnovating.com Always Innovating] is using OE to build software for their Touch Book.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-02-19:&#039;&#039;&#039;&#039;&#039; KOAN Software [http://thread.gmane.org/gmane.comp.handhelds.openembedded/21188 announces] it&#039;s KaeilOS distribution will join the OpenEmbedded project.&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;2009-02-10:&#039;&#039;&#039;&#039;&#039; OE has a new Logo -- Many thanks to [http://buglabs.com Bug Labs] who funded the logo development, and [http://mateozlatar.com/ Mateo Zlatar] for designing the logo.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Required_software&amp;diff=935</id>
		<title>Required software</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Required_software&amp;diff=935"/>
		<updated>2009-01-30T13:20:35Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Tools to unpack sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenEmbedded&#039;s Software Requirements =&lt;br /&gt;
&lt;br /&gt;
This page is the reference of what software is needed.  But [[OEandYourDistro]] is likely much faster in getting you that software actually installed.&lt;br /&gt;
&lt;br /&gt;
To use the OE build system the following software is required on your system:&lt;br /&gt;
* [http://www.python.org/ Python] (Version 2.4.0 or later)&lt;br /&gt;
** Note that you may also need certain development files for Python e.g. for bitbake&#039;s setup.py to work. Depending on the distribution you use you may want to look for a package called &amp;quot;python-dev&amp;quot;, &amp;quot;python-devel&amp;quot;, or similar.&lt;br /&gt;
* [http://www.gnu.org/software/patch/patch.html GNU Patch] (Version 2.5.9 or later, see ftp://alpha.gnu.org/gnu/diffutils/ .  It is a &amp;quot;testing release&amp;quot; and is not mirrored on the GNU mirrors.)&lt;br /&gt;
* [http://www.gnu.org/software/m4/m4.html GNU m4]&lt;br /&gt;
* [http://www.gnu.org/software/make/ GNU make] (Version 3.80 or later for hh.org kernels)&lt;br /&gt;
* [http://psyco.sourceforge.net/ Psyco JIT Compiler] is recommended to increase performance&lt;br /&gt;
* [http://ccache.samba.org/ ccache]&lt;br /&gt;
* [http://www.perl.org/ perl] (needs newer than 5.0, how much newer? probably at least 5.6.2)&lt;br /&gt;
* [http://invisible-island.net/diffstat/diffstat.html diffstat]&lt;br /&gt;
* [http://developer.berlios.de/projects/bitbake bitbake]&lt;br /&gt;
&lt;br /&gt;
== Tools to download source files ==&lt;br /&gt;
* wget &lt;br /&gt;
* curl &lt;br /&gt;
* ftp&lt;br /&gt;
* [http://www.nongnu.org/cvs/ cvs]&lt;br /&gt;
* [http://subversion.tigris.org/ subversion]&lt;br /&gt;
* [http://git.or.cz/index.html git]&lt;br /&gt;
&lt;br /&gt;
== Tools to verify integrity of the downloaded sources ==&lt;br /&gt;
* md5sum&lt;br /&gt;
* sha256sum&lt;br /&gt;
&lt;br /&gt;
== Tools to unpack sources ==&lt;br /&gt;
* tar&lt;br /&gt;
* bzip2&lt;br /&gt;
* gzip&lt;br /&gt;
* unzip&lt;br /&gt;
&lt;br /&gt;
== Tools to build the various *-doc packages==&lt;br /&gt;
* [http://www.jclark.com/jade/ Jade] or [http://www.netfolder.com/DSSSL/ OpenJade]&lt;br /&gt;
** I don&#039;t know which of these is preferred&lt;br /&gt;
* [http://sourceforge.net/projects/docbook/ Docbook] DTDs and DSSSL stylesheets&lt;br /&gt;
* [http://sgmltools-lite.sourceforge.net/ sgmltools], called &amp;quot;sgmltools-lite&amp;quot; too&lt;br /&gt;
* [http://sources.redhat.com/docbook-tools/ docbook-utils]&lt;br /&gt;
** docbook-utils download is hard to find; look in ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES&lt;br /&gt;
* [ftp://ftp.gnu.org/pub/gnu/texinfo/ Texinfo]&lt;br /&gt;
* [http://www.nongnu.org/texi2html/ texi2html] (Perl script that converts Texinfo to HTML)&lt;br /&gt;
&lt;br /&gt;
== Other packages ==&lt;br /&gt;
* [http://www.gnu.org/software/sed/sed.html GNU sed] 4.x&lt;br /&gt;
* [http://www.gnu.org/software/bison/bison.html Bison]&lt;br /&gt;
* bc (binary calculator), if you want to build a Zaurus 2.4 or any of the collie kernels&lt;br /&gt;
* glibc headers (libc6-dev in Debian, glibc-devel in RPM based (in PLD also glibc-static is needed))&lt;br /&gt;
* [http://www.pcre.org/ pcre headers] (Perl 5 Compatible Regular Expression Library, required for e.g. konqueror-embedded)&lt;br /&gt;
* SDL headers to build qemu-native (apt-get install libsdl1.2-dev under Ubuntu/Debian)&lt;br /&gt;
* [http://www.mktemp.org/mktemp/ mktemp] (required by quilt and used in some package patches)&lt;br /&gt;
* help2man - Create simple man pages from --help output&lt;br /&gt;
&lt;br /&gt;
There is an ongoing effort to accurately document the required software within the OpenEmbedded and ultimately, this will be reflected in the ASSUME_PROVIDED variable.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Required_software&amp;diff=934</id>
		<title>Required software</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Required_software&amp;diff=934"/>
		<updated>2009-01-30T13:20:27Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Tools to unpack sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenEmbedded&#039;s Software Requirements =&lt;br /&gt;
&lt;br /&gt;
This page is the reference of what software is needed.  But [[OEandYourDistro]] is likely much faster in getting you that software actually installed.&lt;br /&gt;
&lt;br /&gt;
To use the OE build system the following software is required on your system:&lt;br /&gt;
* [http://www.python.org/ Python] (Version 2.4.0 or later)&lt;br /&gt;
** Note that you may also need certain development files for Python e.g. for bitbake&#039;s setup.py to work. Depending on the distribution you use you may want to look for a package called &amp;quot;python-dev&amp;quot;, &amp;quot;python-devel&amp;quot;, or similar.&lt;br /&gt;
* [http://www.gnu.org/software/patch/patch.html GNU Patch] (Version 2.5.9 or later, see ftp://alpha.gnu.org/gnu/diffutils/ .  It is a &amp;quot;testing release&amp;quot; and is not mirrored on the GNU mirrors.)&lt;br /&gt;
* [http://www.gnu.org/software/m4/m4.html GNU m4]&lt;br /&gt;
* [http://www.gnu.org/software/make/ GNU make] (Version 3.80 or later for hh.org kernels)&lt;br /&gt;
* [http://psyco.sourceforge.net/ Psyco JIT Compiler] is recommended to increase performance&lt;br /&gt;
* [http://ccache.samba.org/ ccache]&lt;br /&gt;
* [http://www.perl.org/ perl] (needs newer than 5.0, how much newer? probably at least 5.6.2)&lt;br /&gt;
* [http://invisible-island.net/diffstat/diffstat.html diffstat]&lt;br /&gt;
* [http://developer.berlios.de/projects/bitbake bitbake]&lt;br /&gt;
&lt;br /&gt;
== Tools to download source files ==&lt;br /&gt;
* wget &lt;br /&gt;
* curl &lt;br /&gt;
* ftp&lt;br /&gt;
* [http://www.nongnu.org/cvs/ cvs]&lt;br /&gt;
* [http://subversion.tigris.org/ subversion]&lt;br /&gt;
* [http://git.or.cz/index.html git]&lt;br /&gt;
&lt;br /&gt;
== Tools to verify integrity of the downloaded sources ==&lt;br /&gt;
* md5sum&lt;br /&gt;
* sha256sum&lt;br /&gt;
&lt;br /&gt;
== Tools to unpack sources ==&lt;br /&gt;
* tar&lt;br /&gt;
* bzip2&lt;br /&gt;
* gzip&lt;br /&gt;
* unzip&lt;br /&gt;
* unzip&lt;br /&gt;
&lt;br /&gt;
== Tools to build the various *-doc packages==&lt;br /&gt;
* [http://www.jclark.com/jade/ Jade] or [http://www.netfolder.com/DSSSL/ OpenJade]&lt;br /&gt;
** I don&#039;t know which of these is preferred&lt;br /&gt;
* [http://sourceforge.net/projects/docbook/ Docbook] DTDs and DSSSL stylesheets&lt;br /&gt;
* [http://sgmltools-lite.sourceforge.net/ sgmltools], called &amp;quot;sgmltools-lite&amp;quot; too&lt;br /&gt;
* [http://sources.redhat.com/docbook-tools/ docbook-utils]&lt;br /&gt;
** docbook-utils download is hard to find; look in ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES&lt;br /&gt;
* [ftp://ftp.gnu.org/pub/gnu/texinfo/ Texinfo]&lt;br /&gt;
* [http://www.nongnu.org/texi2html/ texi2html] (Perl script that converts Texinfo to HTML)&lt;br /&gt;
&lt;br /&gt;
== Other packages ==&lt;br /&gt;
* [http://www.gnu.org/software/sed/sed.html GNU sed] 4.x&lt;br /&gt;
* [http://www.gnu.org/software/bison/bison.html Bison]&lt;br /&gt;
* bc (binary calculator), if you want to build a Zaurus 2.4 or any of the collie kernels&lt;br /&gt;
* glibc headers (libc6-dev in Debian, glibc-devel in RPM based (in PLD also glibc-static is needed))&lt;br /&gt;
* [http://www.pcre.org/ pcre headers] (Perl 5 Compatible Regular Expression Library, required for e.g. konqueror-embedded)&lt;br /&gt;
* SDL headers to build qemu-native (apt-get install libsdl1.2-dev under Ubuntu/Debian)&lt;br /&gt;
* [http://www.mktemp.org/mktemp/ mktemp] (required by quilt and used in some package patches)&lt;br /&gt;
* help2man - Create simple man pages from --help output&lt;br /&gt;
&lt;br /&gt;
There is an ongoing effort to accurately document the required software within the OpenEmbedded and ultimately, this will be reflected in the ASSUME_PROVIDED variable.&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Create_an_intermediate_binary_tool&amp;diff=919</id>
		<title>Create an intermediate binary tool</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Create_an_intermediate_binary_tool&amp;diff=919"/>
		<updated>2009-01-16T00:50:43Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: Create an intermediate binary tool moved to BestPractices: Want to add more stuff to this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[BestPractices]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=796</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=796"/>
		<updated>2008-11-14T08:43:29Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: removed &amp;quot;Cacao and GCC 4.3&amp;quot;: miscompilation problems have been fixed in OE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=Where to get answers about Java support in OpenEmbedded?=&lt;br /&gt;
The Java support in OpenEmbedded is maintained through the [http://jalimo.org Jalimo] project. As such we encourage you to subscribe to this project&#039;s mailing list and post your question there. Developers of OpenEmbedded-derived distributions like Angstrom are also encouraged to delegate questions of their users to Jalimo.&lt;br /&gt;
&lt;br /&gt;
You can also use the mailing list to discuss new recipes prior to putting them into OpenEmbedded&#039;s bug tracker.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with Cacao as the runtime) and one day Hotspot is planned.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-boostrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ECJ 3.3 is recommended over the later releases as those seem to cause trouble.&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering both J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao and phoneme recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao or JamVM packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
Troubles have been experienced when compiling with ecj 3.4. Therefore prefer 3.3:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=795</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=795"/>
		<updated>2008-11-14T08:40:26Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Target virtual machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=Where to get answers about Java support in OpenEmbedded?=&lt;br /&gt;
The Java support in OpenEmbedded is maintained through the [http://jalimo.org Jalimo] project. As such we encourage you to subscribe to this project&#039;s mailing list and post your question there. Developers of OpenEmbedded-derived distributions like Angstrom are also encouraged to delegate questions of their users to Jalimo.&lt;br /&gt;
&lt;br /&gt;
You can also use the mailing list to discuss new recipes prior to putting them into OpenEmbedded&#039;s bug tracker.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with Cacao as the runtime) and one day Hotspot is planned.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-boostrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ECJ 3.3 is recommended over the later releases as those seem to cause trouble.&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering both J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao and phoneme recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao or JamVM packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
Troubles have been experienced when compiling with ecj 3.4. Therefore prefer 3.3:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cacao and GCC 4.3 ==&lt;br /&gt;
It seems to me that Cacao (especially 0.99.3) is miscompiled when using GCC 4.3. You will experience that ecj-bootstrap-native will produce spurious errors when compiling classes. If that happens to you switch to JamVM for &#039;virtual/java-native&#039;.&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=794</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=794"/>
		<updated>2008-11-14T08:39:52Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Native virtual machine aka virtual/java-native */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=Where to get answers about Java support in OpenEmbedded?=&lt;br /&gt;
The Java support in OpenEmbedded is maintained through the [http://jalimo.org Jalimo] project. As such we encourage you to subscribe to this project&#039;s mailing list and post your question there. Developers of OpenEmbedded-derived distributions like Angstrom are also encouraged to delegate questions of their users to Jalimo.&lt;br /&gt;
&lt;br /&gt;
You can also use the mailing list to discuss new recipes prior to putting them into OpenEmbedded&#039;s bug tracker.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with Cacao as the runtime) and one day Hotspot is planned.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi. If you desperately need jamvm on your platform consider installing the development package for libffi of your distro.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-boostrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ECJ 3.3 is recommended over the later releases as those seem to cause trouble.&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering both J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao and phoneme recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao or JamVM packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
Troubles have been experienced when compiling with ecj 3.4. Therefore prefer 3.3:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cacao and GCC 4.3 ==&lt;br /&gt;
It seems to me that Cacao (especially 0.99.3) is miscompiled when using GCC 4.3. You will experience that ecj-bootstrap-native will produce spurious errors when compiling classes. If that happens to you switch to JamVM for &#039;virtual/java-native&#039;.&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=793</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=793"/>
		<updated>2008-11-14T08:34:06Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Toolchain */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=Where to get answers about Java support in OpenEmbedded?=&lt;br /&gt;
The Java support in OpenEmbedded is maintained through the [http://jalimo.org Jalimo] project. As such we encourage you to subscribe to this project&#039;s mailing list and post your question there. Developers of OpenEmbedded-derived distributions like Angstrom are also encouraged to delegate questions of their users to Jalimo.&lt;br /&gt;
&lt;br /&gt;
You can also use the mailing list to discuss new recipes prior to putting them into OpenEmbedded&#039;s bug tracker.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with Cacao as the runtime) and one day Hotspot is planned.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-boostrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ECJ 3.3 is recommended over the later releases as those seem to cause trouble.&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering both J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao and phoneme recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao or JamVM packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
Troubles have been experienced when compiling with ecj 3.4. Therefore prefer 3.3:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cacao and GCC 4.3 ==&lt;br /&gt;
It seems to me that Cacao (especially 0.99.3) is miscompiled when using GCC 4.3. You will experience that ecj-bootstrap-native will produce spurious errors when compiling classes. If that happens to you switch to JamVM for &#039;virtual/java-native&#039;.&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=792</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=792"/>
		<updated>2008-11-14T08:31:25Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* Native Java compiler aka virtual/javac-native */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=Where to get answers about Java support in OpenEmbedded?=&lt;br /&gt;
The Java support in OpenEmbedded is maintained through the [http://jalimo.org Jalimo] project. As such we encourage you to subscribe to this project&#039;s mailing list and post your question there. Developers of OpenEmbedded-derived distributions like Angstrom are also encouraged to delegate questions of their users to Jalimo.&lt;br /&gt;
&lt;br /&gt;
You can also use the mailing list to discuss new recipes prior to putting them into OpenEmbedded&#039;s bug tracker.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with Cacao as the runtime) and one day Hotspot is planned.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== ECJ ===&lt;br /&gt;
Instead of Sun&#039;s Java Compiler &#039;javac&#039; most packages in OpenEmbedded are compiled with the command-line version of the Eclipse project&#039;s ECJ. You need the package ecj-bootstrap-native to get access to the &#039;javac&#039; and &#039;ecj&#039; binary that are provided by it.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. A &#039;javac&#039; binary can be provided by either &#039;ecj-bootstrap-native&#039; or &#039;openjdk-javac-native&#039; (the latter just creates a symlink). Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
There are two recipes which provide this functionality: &lt;br /&gt;
&lt;br /&gt;
ecj-bootstrap-native uses the commandline variant of the Eclipse IDE&#039;s integrated compiler. In order to use that compiler add the following to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The second option is OpenJDK&#039;s Java compiler which is the F/OSS variant of good old &#039;javac&#039;. If you experience trouble with ecj you should try OpenJDK&#039;s&lt;br /&gt;
Java compiler by setting the following in your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;openjdk-javac-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; OpenJDK&#039;s javac is actually build in the package openjdk-language-tools-native (provides a &#039;sun-javac&#039; binary). The reason for this is to allow &#039;ecj-bootstrap-native&#039; and &#039;openjdk-language-tools-native&#039; to coexist in the staging dir.&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-boostrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ECJ 3.3 is recommended over the later releases as those seem to cause trouble.&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering both J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao and phoneme recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao or JamVM packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
Troubles have been experienced when compiling with ecj 3.4. Therefore prefer 3.3:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cacao and GCC 4.3 ==&lt;br /&gt;
It seems to me that Cacao (especially 0.99.3) is miscompiled when using GCC 4.3. You will experience that ecj-bootstrap-native will produce spurious errors when compiling classes. If that happens to you switch to JamVM for &#039;virtual/java-native&#039;.&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=791</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=791"/>
		<updated>2008-11-14T08:23:39Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* OpenJDK language tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=Where to get answers about Java support in OpenEmbedded?=&lt;br /&gt;
The Java support in OpenEmbedded is maintained through the [http://jalimo.org Jalimo] project. As such we encourage you to subscribe to this project&#039;s mailing list and post your question there. Developers of OpenEmbedded-derived distributions like Angstrom are also encouraged to delegate questions of their users to Jalimo.&lt;br /&gt;
&lt;br /&gt;
You can also use the mailing list to discuss new recipes prior to putting them into OpenEmbedded&#039;s bug tracker.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with Cacao as the runtime) and one day Hotspot is planned.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== ECJ ===&lt;br /&gt;
Instead of Sun&#039;s Java Compiler &#039;javac&#039; most packages in OpenEmbedded are compiled with the command-line version of the Eclipse project&#039;s ECJ. You need the package ecj-bootstrap-native to get access to the &#039;javac&#039; and &#039;ecj&#039; binary that are provided by it.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. A &#039;javac&#039; binary can be provided by either &#039;ecj-bootstrap-native&#039; or &#039;openjdk-javac-native&#039; (the latter just creates a symlink). Refer to the [[#Native Java compiler aka virtual/javac-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
At the moment only the package ecj-bootstrap-native provides virtual/javac-native but it is planned that in the future Sun&#039;s javac will be available.&lt;br /&gt;
&lt;br /&gt;
Add the following lines to your configuration to make the Java compiler setting fixed:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-boostrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ECJ 3.3 is recommended over the later releases as those seem to cause trouble.&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering both J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao and phoneme recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao or JamVM packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
Troubles have been experienced when compiling with ecj 3.4. Therefore prefer 3.3:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cacao and GCC 4.3 ==&lt;br /&gt;
It seems to me that Cacao (especially 0.99.3) is miscompiled when using GCC 4.3. You will experience that ecj-bootstrap-native will produce spurious errors when compiling classes. If that happens to you switch to JamVM for &#039;virtual/java-native&#039;.&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=790</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=790"/>
		<updated>2008-11-14T08:23:14Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: /* OpenJDK language tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=Where to get answers about Java support in OpenEmbedded?=&lt;br /&gt;
The Java support in OpenEmbedded is maintained through the [http://jalimo.org Jalimo] project. As such we encourage you to subscribe to this project&#039;s mailing list and post your question there. Developers of OpenEmbedded-derived distributions like Angstrom are also encouraged to delegate questions of their users to Jalimo.&lt;br /&gt;
&lt;br /&gt;
You can also use the mailing list to discuss new recipes prior to putting them into OpenEmbedded&#039;s bug tracker.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with Cacao as the runtime) and one day Hotspot is planned.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== ECJ ===&lt;br /&gt;
Instead of Sun&#039;s Java Compiler &#039;javac&#039; most packages in OpenEmbedded are compiled with the command-line version of the Eclipse project&#039;s ECJ. You need the package ecj-bootstrap-native to get access to the &#039;javac&#039; and &#039;ecj&#039; binary that are provided by it.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. A &#039;javac&#039; binary can be provided by either &#039;ecj-bootstrap-native&#039; or &#039;openjdk-javac-native&#039; (the latter just creates a symlink). Refer to the [[#Native virtual machine aka virtual/java-native|virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
At the moment only the package ecj-bootstrap-native provides virtual/javac-native but it is planned that in the future Sun&#039;s javac will be available.&lt;br /&gt;
&lt;br /&gt;
Add the following lines to your configuration to make the Java compiler setting fixed:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-boostrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ECJ 3.3 is recommended over the later releases as those seem to cause trouble.&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering both J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao and phoneme recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao or JamVM packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
Troubles have been experienced when compiling with ecj 3.4. Therefore prefer 3.3:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cacao and GCC 4.3 ==&lt;br /&gt;
It seems to me that Cacao (especially 0.99.3) is miscompiled when using GCC 4.3. You will experience that ecj-bootstrap-native will produce spurious errors when compiling classes. If that happens to you switch to JamVM for &#039;virtual/java-native&#039;.&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
	<entry>
		<id>https://www.openembedded.org/w/index.php?title=Java&amp;diff=789</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://www.openembedded.org/w/index.php?title=Java&amp;diff=789"/>
		<updated>2008-11-14T08:22:59Z</updated>

		<summary type="html">&lt;p&gt;Thebohemian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is here to answer all things Java related to OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=Where to get answers about Java support in OpenEmbedded?=&lt;br /&gt;
The Java support in OpenEmbedded is maintained through the [http://jalimo.org Jalimo] project. As such we encourage you to subscribe to this project&#039;s mailing list and post your question there. Developers of OpenEmbedded-derived distributions like Angstrom are also encouraged to delegate questions of their users to Jalimo.&lt;br /&gt;
&lt;br /&gt;
You can also use the mailing list to discuss new recipes prior to putting them into OpenEmbedded&#039;s bug tracker.&lt;br /&gt;
&lt;br /&gt;
=State of support=&lt;br /&gt;
==Virtual machine and class library==&lt;br /&gt;
Currently (September 2008) you will be able to build packages for your target system that use a many VMs and their class libraries. For a full J2SE environment on the target you can build JamVM and Cacao as the virtual machine and GNU Classpath as the class library.&lt;br /&gt;
&lt;br /&gt;
For J2ME you can have the &amp;quot;Connected Device Configuration&amp;quot; (CDC) in either the &amp;quot;Foundation&amp;quot; or &amp;quot;Personal&amp;quot; profile using the GPLed PhoneME Advanced virtual machine. See below for details.&lt;br /&gt;
&lt;br /&gt;
For J2ME&#039;s &amp;quot;Mobile Information Device Profile&amp;quot; (MIDP2.0) you can use MIDPath.&lt;br /&gt;
&lt;br /&gt;
Support for OpenJDK (with Cacao as the runtime) and one day Hotspot is planned.&lt;br /&gt;
&lt;br /&gt;
==Java libraries==&lt;br /&gt;
The number of available Java libraries is still small but can grow quickly as the necessary infrastructure is in place. Currently libraries such as dbus-java, kxml2, libmatthew, librxtx, sqlitejdbc, javasqlite, woodstox, xmlpull, SWT (3.4, Gtk+) are available.&lt;br /&gt;
&lt;br /&gt;
For the Maemo platform&#039;s &amp;quot;hildon&amp;quot; environment special SWT packages are available which allow a better integration (i.e. hildon menus, hildon file chooser dialog).&lt;br /&gt;
&lt;br /&gt;
== PhoneME Advanced ==&lt;br /&gt;
PhoneME Advanced is provided in the &#039;Foundation&#039; and &#039;Personal&#039; profile through the recipes phoneme-advanced-foundation and (surprise!) phoneme-advanced-personal. The way the recipes are written both can be compiled and installed at the same time on the target device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; At the moment the personal profile&#039;s AWT support relies on Qt3 which is heavily outdated. If possible you the foundation profile with SWT for the GUI or contribute to [https://phoneme.dev.java.net PhoneME] to fix this. :)&lt;br /&gt;
&lt;br /&gt;
When a PhoneME Advanced package is installed you will find the VM in $libdir_jvm (which is &#039;&#039;/usr/lib/jvm&#039;&#039; by default). The package provides a java-cdc symlink which is changeable through update-alternatives and a cvm-&amp;lt;profile name&amp;gt; symlink.&lt;br /&gt;
&lt;br /&gt;
==J2ME MIDP2.0==&lt;br /&gt;
J2ME MIDP2.0 is supported through the MIDPath project. MIDPath provides the neccessary libraries (taken from PhoneME and/or the respective JSRs) and OpenEmbedded has direct support for a few devices (e.g. button mappings). Please note that while MIDPath can run most MIDP2.0 programs it is no official MIDP2.0 implementation.&lt;br /&gt;
&lt;br /&gt;
MIDPath can be run on top of either PhoneME Advanced or JamVM/Cacao + GNU Classpath. If PhoneME is installed it is preferred&lt;br /&gt;
&lt;br /&gt;
==Toolchain==&lt;br /&gt;
In order to build Java packages no virtual machine needs to be installed on the build machine. OpenEmbedded builds everything on its own.&lt;br /&gt;
&lt;br /&gt;
Missing but planned to be included are popular Java build tools like Ant.&lt;br /&gt;
&lt;br /&gt;
=== GNU Classpath Tools ===&lt;br /&gt;
Included in the package classpath-native are the tools &#039;gjar&#039;, &#039;gjavah&#039;, &#039;gjavap&#039;, &#039;gjarsigner&#039; (and soon gjdoc). Those tools usually work without problems and should be fully compatible to the ones provided by OpenJDK.&lt;br /&gt;
&lt;br /&gt;
=== ECJ ===&lt;br /&gt;
Instead of Sun&#039;s Java Compiler &#039;javac&#039; most packages in OpenEmbedded are compiled with the command-line version of the Eclipse project&#039;s ECJ. You need the package ecj-bootstrap-native to get access to the &#039;javac&#039; and &#039;ecj&#039; binary that are provided by it.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK language tools ===&lt;br /&gt;
OpenEmbedded supports the OpenJDK language tools consisting of &#039;sun-javac&#039;, &#039;javap&#039;, &#039;javah&#039; and &#039;apt&#039;. Put &#039;openjdk-langtools-native&#039; to the dependencies of your recipe to use those binaries. Albeit the tools are from OpenJDK they run on Cacao/JamVM and GNU Classpath.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; openjdk-langtools-native is not a provider of &#039;virtual/javac-native&#039; it only provides a &#039;sun-javac&#039; binary. A &#039;javac&#039; binary can be provided by either &#039;ecj-bootstrap-native&#039; or &#039;openjdk-javac-native&#039; (the latter just creates a symlink). Refer to the [[#Native virtual machine aka virtual/java-native virtual/javac-native discussion]] for details.&lt;br /&gt;
&lt;br /&gt;
=Configuring=&lt;br /&gt;
In this section you learn about the things you can set up. In many OpenEmbedded-based distributions some or most of these decision may have already been made for you so there is no need to specify them. However in case you want to provide the Java support in your distribution you need to know which knobs are available.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap process==&lt;br /&gt;
As told in the toolchain support section the whole Java support in OpenEmbedded is self-hosting. This mean you do not need to have any bit of Java on your build machine as OpenEmbedded will build this itself.&lt;br /&gt;
&lt;br /&gt;
This bootstrap process contains the following steps: At first jikes-native is compiled which is a Java 1.4-capable compiler that does not need a runtime or (strictly) a class library to work. With this compiler we compile the initial runtime (package virtual/java-initial).&lt;br /&gt;
&lt;br /&gt;
virtual/java-initial is a preliminary runtime. This virtual package is currently provided by cacao-initial or jamvm-initial. After that ecj-initial is built. At that point we have a 1.5-capable compiler running on a Java 1.4 compatible VM.&lt;br /&gt;
&lt;br /&gt;
The compiler is then used to build virtual/java-native and finally virtual/javac-native. The former virtual package is provided by either cacao-native or jamvm-native. The latter package is currently only provided through ecj-bootstrap-native. Having built these packages provides the OpenEmbedded build environment with a Java5-capable compiler and runtime. At that point we are ready to compile any other Java package.&lt;br /&gt;
&lt;br /&gt;
==Bootstrap virtual machine aka virtual/java-initial==&lt;br /&gt;
The bootstrap virtual machine has the sole purpose of running ecj-initial (the bootstrap compiler) to compile a 1.5-capable runtime and library. The bootstrap VM runs on your build host and is therefore a -native package. Inside the native staging directory the VM provides a &#039;java-initial&#039; executable.&lt;br /&gt;
&lt;br /&gt;
As told above there are currently two packages that provide &#039;virtual/java-native&#039;. Add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;cacao-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your local or site configuration to choose the Cacao VM. This virtual machine has a JIT compiler and is generally faster but takes a bit longer to compile. Furthermore this VM is only tested to work correctly on X86 build hosts. If you chose Cacao there will also be a &#039;cacao-initial&#039; binary in your native staging directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There is a problem with Cacao 0.98 running on recent distributions where mmaping the zero page is not allowed. Chose jamvm-initial (see below) if you do not want to change the vm_mmap_min_adr restriction on your system.&lt;br /&gt;
&lt;br /&gt;
In case Cacao is unsuitable for you add&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-initial = &amp;quot;jamvm-initial&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your configuration. JamVM is an interpreting Java virtual machine. Despite interpreting only it is very fast (implements many modern interpreter techniques) and compiles quickly. Furthermore it is known to work on X86 and PowerPC build hosts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
==Native virtual machine aka virtual/java-native==&lt;br /&gt;
As for virtual/java-initial this virtual package provides a Java virtual machine which runs on your build host. Its purpose is to run any Java programs that are needed during your build process. The most prominent program that it is supposed to run is the compiler ECJ. The virtual/java-native package provides a &#039;java&#039; binary inside the native staging directory. At the moment you can chose between two runtimes: Cacao and JamVM.&lt;br /&gt;
&lt;br /&gt;
As for the general features it is the same as for java-initial. However for virtual/java-native later versions of the VMs are used so stability and platform support is better. For instance you can use cacao-native on PowerPC as well since the version of Cacao used properly supports it.&lt;br /&gt;
&lt;br /&gt;
To chose Cacao add the following lines to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;cacao-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Besides &#039;java&#039; cacao-native install a &#039;cacao&#039; binary into the native staging directory.&lt;br /&gt;
&lt;br /&gt;
If you favor JamVM (or are having trouble with Cacao) use:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/java-native = &amp;quot;jamvm-native&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There will also be a &#039;jamvm&#039; binary in native staging directory besides the &#039;java&#039; one with jamvm-native.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Native versions of jamvm are unsupported on amd64/x86_64 hosts since OpenEmbedded lacks a native libffi.&lt;br /&gt;
&lt;br /&gt;
== Native Java compiler aka virtual/javac-native ==&lt;br /&gt;
The virtual/javac-native package provides the &#039;javac&#039; binary which is to be found within the native staging directory. This compiler is used to build all of the Java packages within OpenEmbedded. &lt;br /&gt;
&lt;br /&gt;
At the moment only the package ecj-bootstrap-native provides virtual/javac-native but it is planned that in the future Sun&#039;s javac will be available.&lt;br /&gt;
&lt;br /&gt;
Add the following lines to your configuration to make the Java compiler setting fixed:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_virtual/javac-native = &amp;quot;ecj-bootstrap-native&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== ecj-bootstrap-native, ecj-initial and libecj-bootstrap ===&lt;br /&gt;
Since ecj-initial and ecj-bootstrap-native use the same jar file the compilation step for both packages is done through in the libecj-bootstrap recipe. Therefore in order to decide which ECJ version to use for compilation you need to set a version preference for that recipe:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-boostrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ECJ 3.3 is recommended over the later releases as those seem to cause trouble.&lt;br /&gt;
&lt;br /&gt;
== Target virtual machine ==&lt;br /&gt;
&#039;&#039;Note:&#039;&#039;&#039; There used to be a virtual/java package. It turned out that by having this it prevented offering both J2SE-compatible VMs for the target device.&lt;br /&gt;
&lt;br /&gt;
From a distributors point of view you can build the jamvm, cacao and phoneme recipes and provide them to your users. Those can then either install the packages directly by its name or rely&lt;br /&gt;
on a chosing of the packaging.&lt;br /&gt;
&lt;br /&gt;
At the moment Cacao and JamVM are supported runtimes. Cacao is ready for x86, PowerPC and ARM systems (others are untested and AVR32 is not suppported) and has a JIT compiler. JamVM can be used on x86, PowerPC, ARM and MIPS. PhoneME Advanced should support x86, PowerPC, ARM, MIPS and Sparc.&lt;br /&gt;
&lt;br /&gt;
When installed all J2SE runtimes provide the &#039;java&#039; executable (chosen through update-alternatives). PhoneME Advanced gives you a &#039;java-cdc&#039; executable.&lt;br /&gt;
&lt;br /&gt;
=== Runtime provider ===&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; When we talk of &#039;runtime provider&#039; here this is meant in the OpenEmbedded sense (PROVIDES = build provides, RPROVIDES = runtime provides)&lt;br /&gt;
The Cacao or JamVM packages are set to provide &#039;java2-runtime&#039;. Packages which need a J2SE-capable VM should RDEPEND on this. By inheriting the &#039;java-library&#039; class in your recipe this is done automatically.&lt;br /&gt;
&lt;br /&gt;
PhoneME on the other hand is set to provide &#039;java-cdc-runtime&#039;.&lt;br /&gt;
&lt;br /&gt;
== GNU Classpath for headless machines aka classpath-minimal ==&lt;br /&gt;
Through setting the provider for &#039;classpath&#039; you can decide whether you build a full class library with support for AWT/Swing (having a gtk+ dependency) or a variant that works without that and is primarily meant for headless devices. It might also be handy if you decide not to use AWT/Swing and use SWT instead. To chose the minimal variant add this to your configuration:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath-minimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise you need to add this line:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_classpath = &amp;quot;classpath&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently the Angstrom distribution does not set a preference and you have to provide your own.&lt;br /&gt;
&lt;br /&gt;
= Information on specific libraries =&lt;br /&gt;
== swt3.4-gtk and swt3.4-gtk-hildon ==&lt;br /&gt;
Some effort has been done to integrate Gtk+-based SWT 3.4 into the Hildon environment (that is what Maemo provides). Distributions targeting Maemo should set the preferred provider for swt3.4-gtk like this:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk-hildon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important&#039;&#039;: If you do not want the hildon variant it is best to declare&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_PROVIDER_swt3.4-gtk = &amp;quot;swt3.4-gtk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as well. So bitbake will not chose the wrong one by accident (which would otherwise pull in all kinds of unwanted dependencies).&lt;br /&gt;
&lt;br /&gt;
= Caveats, known issues, hints, miscellaneous information =&lt;br /&gt;
== Version suggestions ==&lt;br /&gt;
Everyone and his dog knows that combining glibc 2.8, gcc 2.95 and Linux kernel 2.6.26 is not going to work. In the GNU Classpath realm we also have a set of versions that do not fit together. Here are some suggestions for your PREFERRED_VERSIONs. Stick to these if you are unsure. You can always find out which version are &#039;&#039;supposed&#039;&#039; to be compatible by reading the READMEs of the VMs.&lt;br /&gt;
&lt;br /&gt;
=== jamvm-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-initial = &amp;quot;1.4.5&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao-initial and classpath-initial ===&lt;br /&gt;
Use this and nothing else:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-initial = &amp;quot;0.98&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-initial = &amp;quot;0.93&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== jamvm[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm-native = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_jamvm = &amp;quot;1.5.1&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cacao[-native] and classpath[-native] ===&lt;br /&gt;
These are the latest releases and they seem to be stable. Highly recommended:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao-native = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath-native = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same goes for the target device:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_cacao = &amp;quot;0.99.3&amp;quot;&lt;br /&gt;
  PREFERRED_VERSION_classpath = &amp;quot;0.97.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== libecj-bootstrap ===&lt;br /&gt;
Troubles have been experienced when compiling with ecj 3.4. Therefore prefer 3.3:&lt;br /&gt;
&lt;br /&gt;
  PREFERRED_VERSION_libecj-bootstrap = &amp;quot;3.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cacao and GCC 4.3 ==&lt;br /&gt;
It seems to me that Cacao (especially 0.99.3) is miscompiled when using GCC 4.3. You will experience that ecj-bootstrap-native will produce spurious errors when compiling classes. If that happens to you switch to JamVM for &#039;virtual/java-native&#039;.&lt;br /&gt;
&lt;br /&gt;
== Extra binaries and symlinks ==&lt;br /&gt;
Since both Cacao and JamVM can be installed in staging you can use this and modify the &#039;java&#039; or &#039;java-initial&#039; symlink if you want to switch to a certain VM.&lt;br /&gt;
&lt;br /&gt;
== Debugging Cacao on the target ==&lt;br /&gt;
You need to debug the Cacao JVM on your target device using GDB and need some pointers on how to get started? Read [https://wiki.evolvis.org/jalimo/index.php/CacaoDebugging this] page from the Jalimo Wiki.&lt;br /&gt;
&lt;br /&gt;
=Future plans =&lt;br /&gt;
==Default Bytecode compliance level==&lt;br /&gt;
Soon an option will be introduced to set the default bytecode compliance level. For any Java package that does not explicitly provide this level (not many do this) the one you set in your configuration will be used.&lt;br /&gt;
&lt;br /&gt;
==OpenJDK + Cacao==&lt;br /&gt;
The flexibility of the Cacao runtime allows it to run it with OpenJDK&#039;s class library. This allows you to use the official class library and a JIT-capable runtime on an ARM device (as of today Hotspot has no JIT on ARM).&lt;br /&gt;
&lt;br /&gt;
Since the middle of August 2008 OpenJDK + Cacao can be build and is included in the Debian armel sid repositories (package cacao-oj6-sdk). Xerxes Rånby is showing some webbapplets running using OpenJDK + CACAO on his blog: http://labb.zafena.se/?p=1&lt;br /&gt;
&lt;br /&gt;
==ant-native==&lt;br /&gt;
Ant is an often used tool in the Java world. Even OpenJDK uses it. Unfortunately it is also a complex beast with many dependencies (many of which use Ant itself). Still there is work in progress to build and use it inside OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Preliminary work has been done in the Jalimo Subversion repository. There is an &#039;ant-native&#039; recipe exists which actually works. :)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
This space is for *your* questions and those that appeared more often on the mailing list. Things will be added here by the Jalimo folk/OE-Java maintainers or by you asking a question.&lt;br /&gt;
&lt;br /&gt;
== Q: I do get all these editions, configurations and profiles that exist in the Java world wrong. Any pointer on this? ==&lt;br /&gt;
I found these articles in Wikipedia helpful to clarify the situation [http://en.wikipedia.org/wiki/Java_platform Java platform], [http://en.wikipedia.org/wiki/Java_ME Java ME].&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Software Components]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Thebohemian</name></author>
	</entry>
</feed>