blob: 5fd4f69e2667b6380b982a73cf56764175bab746 [file] [log] [blame]
<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon());
$pageTitle = "Generating the SWT JNI Code";
ob_start();
?>
<div id="midcolumn">
<h1>Generating the SWT JNI Code</h1>
<p>All of the C code used by SWT is generated by the <b>JNIGeneratorApp</b>
application included in the SWT Tools bundle and available on the
<a href="updatesite.php">SWT Tools Update Sites</a>.
This page describes how to use this tool when fixing bugs or adding
features to SWT.</p>
<b>Note</b> that this process has changed for SWT 3.5. For older versions see <a href="jnigen_34.php">Generating the SWT JNI Code for SWT 3.4</a>.
<p></p>
<h3>Adding native methods</h3>
<ol>
<li>Add the function prototype in <tt>OS.java</tt>, copying the style and structure
of the other functions in that file. Note that for Mac/Cocoa, portions of <tt>OS.java</tt>
are also <a href="macgen.php">generated</a>.
<p></p>
<li>Install the latest SWT Tools from the <a href="updatesite.php">SWT Tools Update Site</a>.
<p></p>
<li>Restart Eclipse.
<p></p>
<li>Use code assist templates like <b>jni*</b> (i.e. <i>jnifield</i> and <i>jnimethod</i>) to add javadoc tags that describe flags and casts for any primitive types. See <a href="jnigen_metadata.php">metadata</a> for more documentation.
<p></p>
<center><img src="images/jnitemplates.png" alt="build.xml"></center>
<p></p>
<li>Save the file. This should build the appropriate C files.
<p></p>
<li>Compile the new C code and copy the new libraries to the appropriate fragment. Steps:
<ul>
<li>right-click on the <tt>build.xml</tt> file of the appropriate fragment (i. e. org.eclipse.swt.&lt;ws&gt;.&lt;os&gt;.&lt;arch&gt;) depending on the os, platform and architecture being built</li>
<li>select "Run As -> Ant Build..."</li>
<li>on the Targets tab check the <tt>build_libraries</tt> target</li>
<li>on the JRE tab select "Run in the same JRE as the workspace"</li>
<li>on the Refresh tab check "Refresh resources upon completion" to refresh your workspace
after running the build; this ensures that Eclipse will pick up the fresh binaries</li>
<li>press the "Run" button to begin</li>
<p></p>
</ol>
<h3>Adding structs</h3>
<p>Often, methods return values or require parameters as a C struct. To
add a new structure, simply add a new class in the same package as
the OS.java file which matches the definition of the C structure.
This will be picked up and correctly handled by <i>JNIGeneratorApp</i>.</p>
<p>If a struct is input-only or output-only, this information can be used
by <i>JNIGeneratorApp</i> to generate more efficient C code. Use the
<b>flags</b> attribute of the native function to indicate this in the
metadata.</p>
<h3>More Hints</h3>
<ul>
<li>For GTK+ and Motif, all native functions must be wrapped in locking
code. When adding functions, simply copy the style and structure of the
other native functions.
<li>Many functions on Mac OS X return structs which use <b>unions</b>. For
an example of how to add the markup for a union, see the
<b>ControlFontStyleRec</b> structure and its metadata.
</ul>
<p>And there you go! If you're having trouble, please post to the SWT
mailing list or file a new bug in bugzilla.</p>
</div>
<?php
$html = ob_get_clean();
# Generate the web page
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>