1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
<!-- $Id: ACE-porting.html 92151 2010-10-05 07:27:20Z johnnyw $ -->
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<META NAME="Template" CONTENT="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html
.dot">
<META NAME="GENERATOR" CONTENT="Mozilla/4.05 [en] (Win95; I) [Netscape]">
<TITLE>Porting ACE and TAO to a New OS Platform</TITLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000">
<HR><P> <H3>Porting ACE, TAO, and CIAO to a New OS Platform</H3><P>
<A HREF="http://www.dre.vanderbilt.edu/ACE">ACE</A>, <A
HREF="http://www.dre.vanderbilt.edu/TAO">TAO</A>, and <A
HREF="http://www.dre.vanderbilt.edu/CIAO">CIAO</A> have been
ported to <A HREF="http://www.dre.vanderbilt.edu/versions.html">many
OS platforms</A>. Porting ACE, TAO, and CIAO to new platforms is
fairly easy. The following document describes the step-by-step
process to use when porting the various <A
HREF="http://www.cs.wustl.edu/~schmidt/ACE-overview.html">components
and layers</A> in ACE to a new OS platform. Once ACE is ported, it is
straightforward to port TAO and CIAO, as well.<P>
Before starting a port that you plan to contribute back to the
ACE+TAO+CIAO open-source community, we recommend that you do the
following:
<UL>
<LI> Read and follow the <A HREF="ACE-guidelines.html">programming style
guidelines</A> we use when writing ACE, TAO, and CIAO code,
which will make it much easier to integrate and maintain your port
in the source tree. <P>
<LI> Contact <A HREF="mailto:d.schmidt@vanderbilt.edu">Douglas
C. Schmidt</A> and let him know that you're planning to contribute
a port, which will make it make easier to work out the logistics
of when/how the port will be integrated. <P>
</UL>
<hr align=left width="50%"><P>
<H4>Create a <CODE>config.h</CODE> Header File for the Target OS Platform</H4>
A <CODE>config-*.h</CODE> header file exists in <A
HREF="../ace/">$ACE_ROOT/ace</A> for each platform to which ACE has
been ported. This file contains the portability macros for each
particular configuration of ACE. A complete description of the
existent macros can be found in the <A
HREF="../ace/README">$ACE_ROOT/ace/README</A> file. <P>
Currently, you must edit this file by hand to port it to new OS
platforms, though on some platforms it's possible to use the ACE <A
HREF="../configure.ac">autoconf script</A>. It's a good idea to use
the <CODE>config-*.h</CODE> files for platforms with similar
characteristics as examples.
<hr align=left width="50%"><P>
<H4>Port the <CODE>ACE_OS</CODE> Namespace</H4>
The <CODE>ACE_OS</CODE> namespace encapsulates most of variation
between the different OS implementations, <EM>e.g.</EM>, UNIX, Win32,
and various real-time operating systems. It is the core of the ACE OS
abstraction layer. Most work required to port ACE to a new OS
platform resides in this namespace. There are <EM>many</EM> examples
of how ACE has been ported to other operating systems in the
<CODE>ACE_OS</CODE> class in the
<CODE>$ACE_ROOT/ace/OS_NS_*.{h,inl,cpp}</CODE> files. <P>
Optional features in pthreads are covered by <CODE>ACE_HAS_*</CODE>
and/or <CODE>ACE_LACKS_*</CODE> macros, which are described in the <A
HREF="../ace/README">$ACE_ROOT/ace/README</A> file. Particular
platform features, such as DCE pthreads calls that end in
<CODE>_np</CODE>, should be bracketed by platform defines rather than
by inventing more <CODE>ACE_HAS_*</CODE> or <CODE>ACE_LACKS_*</CODE>
definitions. <P>
An important part of porting ACE to a new platform is to map the
threading API correctly. Currently, ACE has support for the following
thread APIs: <P>
<UL>
<LI> <B>UNIX International (UI) Threads</B>
(<CODE>ACE_HAS_STHREADS</CODE>) - Solaris.<P>
<LI> <B>POSIX Pthreads</B> (<CODE>ACE_HAS_PTHREADS</CODE>) -Final standard (also
called draft 10) [MIT, Linux, and Solaris]. <P>
<LI> <B>Win32 Threads</B> (<CODE>ACE_HAS_WTHREADS</CODE>) - Windows
NT, Windows '95/98, and Windows CE <P>
<LI> <B>VxWorks Tasks</B> (<CODE>ACE_VXWORKS</CODE>) - VxWorks <P>
</UL>
If your OS platform does not support any of these threading packages,
you must port the <CODE>ACE_OS::thr_*</CODE> functions. <P>
<hr align=left width="50%"><P>
<H4>Port the C++ Wrapper Facade Components</H4>
After porting the <CODE>ACE_OS</CODE> namespace, the next step is to
port all of the ACE C++ wrapper facade components, such as sockets,
threads, synchronization mechanisms. A full list of the categories
and classes can be found in the <A
HREF="ACE-categories.html">$ACE_ROOT/ACE-categories</a> file. It is
easiest to concentrate on porting one category at the time. The ACE
release contain a <A HREF="../tests/README">regression test suite</A>
in the <A HREF="../tests/">$ACE_ROOT/tests/</A> directory. These
tests can be used to validate the correctness of the various ACE C++
wrapper facades as they are ported. <P>
<hr align=left width="50%"><P>
<H4>Port the Higher-level Framework Components of ACE</H4>
Having ported (and tested) all the components of the ACE OS adaptation
layer and C++ wrapper facades, you can proceed to port the higher
level components of ACE, such as the Reactor, Service Configurator,
Connector, Acceptor, and Streams frameworks. At this point, it should
be relatively easy to port the rest of ACE because most of the
platform-dependent code is localized in the lower layers of ACE. <P>
<hr align=left width="50%"><P>
<H4>Port TAO and CIAO</H4>
After porting and successfully testing all the ACE framework
components, it should be straightforward to port and <A
HREF="../TAO/TAO-INSTALL.html">install</A> TAO and <A
HREF="../TAO/CIAO/CIAO-INSTALL.html">install</A> CIAO because the bulk
of their platform-dependent code is localized in ACE. Typically, the
only problems that arise when porting TAO and CIAO is bugs and
limitations with C++ compilers. <P>
<HR><P>
<H3>C++ Features Required to Port ACE, TAO, and CIAO</H3>
ACE, TAO, and CIAO have been ported to most C++ compilers. The
following is a list of which C++ features a compiler must support in
order to compile ACE and TAO:
<UL>
<LI> <B>Templates</B> -- The C++ compiler must support templates.
However, it need not support template member functions and of
the advanced concepts outlined in <A
HREF="http://www.moderncppdesign.com/"> Modern C++ Design</A>. <P>
<LI> <B>Multiple inheritance and dynamic binding</B> -- The C++
compiler must support multiple inheritance and dynamic
binding. <P>
<LI> <B>Namespaces</B> -- ACE+TAO+CIAO utilizes C++ namespaces, so the
C++ compiler must support them.<P>
<LI> <B>ANSI casts and RTTI</B> -- ACE+TAO+CIAO uses the ANSI C++
casts, so the C++ compiler must support them, which implies
support for RTTI.<P>
</UL>
The following is a list of which C++ features that ACE, TAO, CIAO can
take advantage of if a compiler supports them:
<UL>
<LI> <B>Exceptions</B> -- The ACE library itself is ``exception
neutral,'' <EM>i.e.,</EM> it does not catch or throw C++
exceptions. However, you can use exceptions in code
that uses ACE including throwing exceptions inside call back
methods, as long as you provide the code to handle it.
TAO requires the use of C++ exceptions,
<CODE>ACE_HAS_EXCEPTIONS</CODE> must be defined. <P>
<LI> <B>STL</B> -- Unfortunately many of the platforms that ACE
supports don't have an STL library. Moreover, different versions
of STL behave differently. ACE therefore does not depends on
STL and does not use it internally. If your target
platform(s) support STL you should be able to
use it with ACE, TAO, and CIAO without problems, though your C++
compiler may have problems with it (this is beyond the scope
of ACE, however). <P>
If you are considering STL, you might consider
<A HREF="http://www.stlport.org/">STLport</a>,
which is a port of the SGI STL to numerous platforms that ACE,
TAO, and CIAO also support. <P>
</UL>
<P><HR><P>
Back to the <A
HREF="http://www.cs.wustl.edu/~schmidt/ACE-documentation.html">ACE
documentation</A> page.<BR>
Back to <A HREF="index.html">ACE Documentation Home</A>.
<!--#include virtual="/~schmidt/cgi-sig.html" -->
</BODY>
</HTML>
|