ACE+TAO-7_0_8
[ACE_TAO.git] / ACE / ACE-INSTALL.html
blob277d398efe7d22279fa228d518085120fc1b7d68
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html><head><!-- -->
3 <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Building and Installing ACE and Its Auxiliary Libraries and Services</title>
5 <link rev="made" href="mailto:d.schmidt@vanderbilt.edu">
7 <style>
8 body {
9 background-color: #ffffff;
10 color: #000000;
12 table, th, td {
13 border: 1px solid black;
15 .indent {
16 margin-left: 2em;
18 .boxed {
19 border: 1px solid black;
20 border-radius: 0.3em;
21 padding-right: 0.5em;
22 padding-left: 0.5em;
23 margin: 0.5em;
25 pre, code {
26 background-color: #e3e3e3;
27 border-radius: 0.2em;
28 padding-right: 0.2em;
29 padding-left: 0.2em;
31 </style>
32 </head>
34 <body>
36 <hr>
37 <h1>Building and Installing ACE and Its Auxiliary Libraries and Services</h1>
39 <h2>Synopsis</h2>
41 The file explains how to build and install ACE, its Network Services,
42 test suite and examples on the various OS platforms and compilers that
43 it has been ported to. Please consult the <a href="NEWS">NEWS</a> and
44 <a href="ChangeLogs">ChangeLogs</a> files to see whether any recent changes
45 to the release will affect your code. In addition, you should check
46 out our <a
47 href="docs/ACE-development-process.html">development
48 process</a>. As you start working with ACE, we suggest you get copies
49 of the <a
50 href="http://www.dre.vanderbilt.edu/~schmidt/ACE/book1/">C++NPv1</a>, <a
51 href="http://www.dre.vanderbilt.edu/~schmidt/ACE/book1/">C++NPv2</a>, and
52 <a href="http://www.riverace.com/acebooks/">APG</a> books to help
53 guide you after you've built and installed ACE. You should also
54 consult the <a
55 href="docs/ACE-FMM.html">ACE
56 Frequently Made Mistakes page</a>. If you encounter any problems or
57 would like to request an enhancement, then use <a
58 href="https://github.com/DOCGroup/ACE_TAO">github
59 </a> to submit an issue in accordance with our <a
60 href="docs/ACE-bug-process.html">bug
61 report process</a>.<p>
63 </p><h2>Document Index</h2>
65 <ul>
66 <li><a href="#platforms">Platforms, C++ Compilers, and Support</a></li>
67 <li><a href="#installpre">Installation prerequisites</a></li>
68 <li><a href="#aceinstall">Building and Installing ACE</a></li>
69 <li><a href="#svcsinstall">Building and Installing ACE Network Services</a></li>
70 <li><a href="#sslinstall">Building and Installing The ACE_SSL Library</a></li>
71 <li><a href="#guireactor_install">Building and Using GUI Reactors Libraries</a></li>
72 <li><a href="#installnotes">Installation Notes</a></li>
73 <li><a href="#g++">Compiling ACE with GNU g++</a></li>
74 <li><a href="#minimum_build">What Do I Need to Build for TAO?</a></li>
75 <li><a href="#resource_requirements">System Resource Requirements</a></li>
76 <li><a href="#MPC">General MPC Information</a></li>
77 <li><a href="#eclipse">Working with ACE in Eclipse</a></li>
78 <li><a href="#advanced">Advanced Topics</a></li>
79 <li><a href="#power">Building from git</a></li>
80 </li></ul>
83 <p></p><hr><p>
84 </p><h2><a name="platforms">Platforms, C++ Compilers, and Support</a></h2>
86 <p>ACE has been ported to a large number of platforms using many different
87 compilers over the years.
88 The <a href="http://www.dre.vanderbilt.edu/">DOC group</a>,
89 <a href="http://www.riverace.com/">Riverace</a>,
90 <a href="http://www.theaceorb.com/">OCI</a>,
91 <a href="https://www.remedy.nl/">Remedy IT</a>, and members of the ACE
92 user community have all contributed ports to make ACE the successful
93 and far-reaching toolkit it is today. Any UNIX/POSIX/Windows
94 variation is probably an easy target platform for ACE. If you have
95 <a href="docs/ACE-porting.html">porting questions</a> or have a problem
96 compiling the ACE source distribution, please contact one of the
97 commercial support companies, or create a <a href="https://github.com/DOCGroup/ACE_TAO">github
98 issue or discussion</a> using the <a href="PROBLEM-REPORT-FORM">PROBLEM-REPORT-FORM</a>,
99 located in the ACE_wrappers directory.
100 The DOC groups at Washington University, UC Irvine, and Vanderbilt
101 University provide only "best effort" support for non-sponsors for the
102 latest release, as described in <a href="docs/ACE-bug-process.html">
103 docs/ACE-bug-process.html</a>.
104 Thus, if you need more "predictable" help, or help with earlier versions of
105 ACE, it's recommend that you check out the
106 <a href="http://www.dre.vanderbilt.edu/support.html">list of
107 commercial support companies</a> for additional assistance.
108 </p>
109 <p>The responsibility for maintaining ACE across the wide range of
110 supported platforms is divided among a few different groups:
111 <ul>
112 <li>The DOC group maintains platforms used in the course of their research
113 and sponsored work</li>
114 <li>Companies that provide support (Riverace, OCI, and Remedy IT), maintain
115 platforms they support in the course of their various service offerings</li>
116 <li>The ACE user community maintains any other desired platforms.</li>
117 </ul>
118 The <a href="http://www.dre.vanderbilt.edu/scoreboard/" target="_blank">
119 build scoreboard</a>
120 records the current status of build and regression testing during
121 development by all of the above groups. It is available to all users wishing
122 to provide build results. Members of the ACE community that maintain ACE on
123 platforms not maintained by the DOC group, Riverace, OCI, or Remedy IT are
124 encouraged to provide build and regression test results for the scoreboard
125 to ensure that all in-use platforms are represented.
126 See the <a href="https://raw.githubusercontent.com/DOCGroup/autobuild/master/README" target="_blank">autobuild README</a> for more information about
127 how to set up a build; contact one of the above groups to inquire about how
128 to get your build results recorded on the scoreboard.</p>
129 <p>Because older
130 platforms that are not maintained tend to fall into a broken state and
131 clutter the ACE sources with code that is no longer used, the development
132 team reserves the right to remove ACE configuration files and source code
133 specific to inactive platform configurations that are not
134 listed on the scoreboard.</p>
135 <p>The table below summarizes each group's role and where you can get more
136 detailed information. For information on TAO's platform coverage and
137 support, please also see <a href="TAO/TAO-INSTALL.html">TAO's install
138 document</a>.</p><p>
140 <table width="75%">
141 <caption><b>Groups Involved in ACE Development and Support<br></b></caption>
142 <thead>
143 <tr valign="top">
144 <th>Group</th>
145 <th>Platforms</th>
146 <th>For more information</th>
147 </tr>
148 </thead><tbody>
149 <tr>
150 <th>DOC Group</th>
151 <td>
152 </td>
153 <td>DOC sites at <a href="http://www.dre.vanderbilt.edu/">ISIS</a>,
154 <a href="http://www.uci.edu/">UCI</a> and
155 <a href="https://wustl.edu//">Washington University</a>
156 </td>
157 </tr>
158 <tr>
159 <th>Riverace</th>
160 <td>Offers ACE
161 <a href="http://www.riverace.com/training.htm">training</a>,
162 <a href="http://www.riverace.com/support.htm">support</a> and
163 <a href="http://www.riverace.com/consult.htm">consulting services</a>
164 for many platforms including AIX, HP-UX, Linux, Solaris, and Windows.
165 </td>
166 <td>Riverace's <a href="http://www.riverace.com/support.htm">ACE
167 Support page</a>.</td>
168 </tr>
169 <tr>
170 <th>OCI</th>
171 <td>Maintains ACE on certain platforms required for their TAO
172 software and service offerings.
173 </td>
174 <td>
175 <a href="http://www.objectcomputing.com/">OCI's web site</a>,
176 <a href="https://objectcomputing.com/products/tao">TAO page</a>,
177 and the <a href="../TAO/TAO-INSTALL.html">TAO install document</a></td>
178 </tr>
179 <tr>
180 <th>Remedy IT</th>
181 <td>Maintains ACE on many platforms required for their ACE and
182 TAO service offerings. We support AIX,
183 Embarcadero C++ Builder,
184 Windows CE, MinGW, Microsoft Visual C++, GCC,
185 Cygwin, VxWorks 6.x (kernel and rtp), OpenVMS on IA64,
186 BlueCAT Linux, RedHat Linux, Fedora, MacOSX, Solaris,
187 Tru64, SuSE Linux on IA32/EM64T/IA64, RTEMS, QNX, LynxOS,
188 HPUX on IA64, and Android.
189 The Intel C++ compiler is supported on
190 Windows 32/64bit, Linux IA32/EM64T/IA64, MacOSX.
191 </td>
192 <td>Remedy IT <a href="https://www.remedy.nl/">web site</a> and
193 the TAO <a href="TAO/TAO-INSTALL.html">install document</a>
194 </td>
195 </tr>
196 <tr>
197 <th>PrismTech</th>
198 <td>Maintains ACE on certain platforms required for their TAO
199 software and service offerings, including LynxOS.
200 </td>
201 <td>PrismTech's <a href="http://www.prismtech.com/">web site</a></td>
202 </tr>
203 <tr>
204 <th>ACE user community</th>
205 <td>Responsible for continued maintenance and testing of platforms
206 to which ACE has been ported, but aren't supported by the
207 above groups. These include
208 Digital UNIX (Compaq Tru64) 4.0 and 5.0;
209 IRIX 6.x; UnixWare 7.1.0;
210 Linux on PPC; OpenMVS;
211 Tandem; SCO; FreeBSD; NetBSD; OpenBSD;
212 Macintosh OS X; OS/9; PharLap ETS 13;
213 QNX RTP and Neutrino 2.0
214 </td>
215 </tr><tr>
216 <th>Not maintained</th>
217 <td>The following platforms have been ported to in the past but are
218 no longer maintained and may be removed from ACE at any time.
219 If you want to have support for these environments contact one
220 of the commercial support organisations. The platforms include:
221 Chorus; DG/UX; HP-UX 9, 10 and 11.00; pSOS;
222 SunOS 4.x and Solaris with SunC++ 4.x; VxWorks 5.4 and earlier;
223 Microsoft Visual C++ 5, 6, and 7.0; Borland C++ Builder 4, 5, 6, and 2006.
224 For up-to-date listings on platform that are deprecated and pending
225 removal from ACE, please see the <a href="NEWS">NEWS file</a>.
226 </td>
227 </tr>
228 </tbody></table></p><p>
230 </p><p>Although the DOC group has provided outstanding support for ACE
231 over the years, ACE's success has greatly increased the amount of
232 effort required to keep up with its maintenance, answer users'
233 questions, and give design guidance. Riverace offers world-class
234 commercial services to support ACE users. OCI, PrismTech, and Remedy
235 offer similar services for ACE and TAO, allowing the DOC group's primary focus
236 to shift back to their main goal: <em>research</em>. The DOC group is
237 fundamentally focused on (and <a
238 href="http://www.dre.vanderbilt.edu/~schmidt/resume-grants.html">funded
239 by</a>) advanced R&amp;D projects. The group continues to be
240 intimately involved in ACE+TAO development and maintenance, but with
241 revised priorities for maintenance. The <a
242 href="docs/ACE-bug-process.html">bug
243 fixing policies</a> followed by the DOC group are designed to strike a
244 balance between their many <a
245 href="http://www.dre.vanderbilt.edu/~schmidt/research.html">research
246 projects</a> and their commitment to the ACE+TAO <a
247 href="http://www.dre.vanderbilt.edu/~schmidt/ACE-users.html">user
248 community</a>. Naturally, we will be happy to accept well-tested
249 patches from the ACE+TAO user community for any platforms that aren't
250 supported by the DOC group, Riverace, OCI or Remedy IT. </p><p>
252 </p><p></p><hr><p>
253 </p><h2><a name="installpre">Installation prerequisites</a></h2>
255 <p> ACE (as well as TAO) use <A
256 HREF="http://htmlpreview.github.io/?https://github.com/DOCGroup/MPC/blob/master/docs/html/MakeProjectCreator.html">MPC</A>
257 (MakeProjectCreator) to generate files used by all supported build
258 tools (such as GNUmakefiles for UNIX based platforms, sln and vcproj
259 files for Visual Studio and Embarcadero makefiles) on various platforms. To
260 help new users to bootstrap quickly the release bundles of ACE (as
261 well as TAO) include all needed files to use the build
262 instructions in this document.
264 </p>
266 If it is necessary to generate
267 files for build tools for other compilers, one must
268 run MPC to generate the
269 appropriate files. Please see <a href="MPC/docs/USAGE">USAGE</a>, <a
270 href="MPC/docs/README">README</a>, and <a
271 href="bin/MakeProjectCreator/README">README for ACE</a> files for
272 details. The options that have been used to generate the above build
273 files can be found in <a
274 href="bin/MakeProjectCreator/config/global.features">
275 global.features</a> file.
276 </p>
278 <hr>
279 <h1><a name="aceinstall">Building and Installing ACE</a></h1>
281 The following sections explain how to build ACE on:
282 <ul>
283 <li><a href="#unix">UNIX</a></li>
284 <li><a href="#win32">Windows (including MinGW and Cygwin)</a></li>
285 <li><a href="#vxworks">VxWorks</a></li>
286 <li><a href="#android">Android</a></li>
287 <li><a href="#rtems">RTEMS</a></li>
288 </ul>
290 <h2>General Rules</h2>
291 <ul>
292 <li><p>Many features in ACE can be modified by defining some macros in
293 <code>$ACE_ROOT/ace/config.h</code>. These macros should
294 <em><b>always</b></em> appear <em><b>before</b></em> including
295 your platform specific config file.</p>
296 </li><li><p>However, if you want to undefine/redefine macros defined in the
297 platform specific config file, these <code>#undef</code> should
298 come <em><b>after</b></em> the config file.</p>
299 </li><li> If you're planning to build ACE on multiple platforms, you may
300 want to consider <a href="#cloning">cloning the source tree</a>
301 before you start. <p>
302 </p></li></ul>
304 <hr align="left" width="50%">
305 <h2><a name="unix">Building and Installing ACE on UNIX</a></h2>
307 As of ACE 6.0.6, you can building ACE on
308 UNIX with:
309 <ol>
310 <li><a href="#unix_traditional">Traditional ACE/GNU Make Configuration</a></li>
311 </ol>
312 The <a href="#win32">build process for Windows</a> is different from
313 the UNIX methods.
315 <h3><a name="unix_traditional">Using the Traditional ACE/GNU Configuration</a></h3>
317 Here's what you need to do to build ACE using GNU Make and ACE's traditional
318 per-platform configuration method:</p>
320 <ol>
321 <li>Install <a href="http://ftp.gnu.org/pub/gnu/make/">GNU make</a>
322 3.79.1 or greater on your system (available via <code>http</code>
323 anonymous <code>ftp</code> from <code>ftp.gnu.org</code> in the
324 <code>pub/gnu/make/</code> directory).
325 You <em>must</em> use GNU make when using ACE's traditional
326 per-platform configuration method or ACE won't compile.
327 </li>
328 <li>Add an environment variable called ACE_ROOT that contains the
329 name of the root of the directory where you keep the ACE wrapper
330 source tree. The ACE recursive Makefile scheme needs this information.
331 There are several ways to set the ACE_ROOT variable. For example:
332 <blockquote>
333 TSCH/CSH:
334 <code>setenv ACE_ROOT /home/cs/faculty/schmidt/ACE_wrappers</code>
335 </blockquote>
336 <blockquote>
337 BASH or Bourne Shell:
338 <code>export ACE_ROOT=/home/cs/faculty/schmidt/ACE_wrappers
339 </code>
340 </blockquote>
342 If you're building a number of versions of ACE, however, (e.g., for
343 different OS platforms or for different releases of ACE) you might use
344 the following approach (assuming TCSH/CSH):
345 <blockquote>
346 <code>setenv ACE_ROOT $cwd</code>
347 </blockquote>
348 </li>
349 <li>Create a configuration file, <code>$ACE_ROOT/ace/config.h</code>,
350 that includes the appropriate platform/compiler-specific
351 header configurations from the ACE source directory. For example:
352 <blockquote><code>
353 #include "ace/config-linux.h"
354 </code></blockquote>
355 The platform/compiler-specific configuration file
356 contains the #defines that are used throughout ACE to indicate
357 which features your system supports. See the
358 <code>$ACE_ROOT/ace/README</code> file for a description of these
359 macro settings. If you desire to add some site-specific or build-specific
360 changes, you can add them to your config.h file; place them
361 <strong>before</strong> the inclusion of the platform-specific
362 header file.
364 There are config files for most versions of UNIX. If there
365 isn't a version of this file that matches your
366 platform/compiler, you'll need to make one. Please open an issue at our
367 <a href="https://github.com/DOCGroup/ACE_TAO">github project</a>
368 if you get it working so it can be added to the master ACE
369 release.</p>
370 </li>
372 <li>Create a build configuration file,
373 <code>$ACE_ROOT/include/makeinclude/platform_macros.GNU</code>,
374 that contains the appropriate platform/compiler-specific
375 Makefile configurations, e.g.,
376 <blockquote><code>
377 include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
378 </code></blockquote>
379 This file contains the compiler and Makefile directives that are
380 platform/compiler-specific. If you'd like to add make options, you
381 can add them before including the platform-specific configuration.<p>
382 NOTE! There really is not a # character before 'include' in the
383 platform_macros.GNU file. # is a comment character.
384 </li>
385 <li>If you wish to install ACE (using &quot;make install&quot;), set the
386 installation prefix in platform_macros.GNU.
387 <blockquote><code>
388 INSTALL_PREFIX = /usr/local
389 </code></blockquote>
390 Headers will be installed to $INSTALL_PREFIX/include, executables to
391 $INSTALL_PREFIX/bin, documentation and build system files to
392 $INSTALL_PREFIX/share and libraries to $INSTALL_PREFIX/lib. The library
393 directory can be customized by setting INSTALL_LIB (for example,
394 INSTALL_LIB=lib64). With INSTALL_PREFIX set, RPATH will be enabled for
395 all executables and shared libraries. To disable RPATH (for example,
396 if $INSTALL_PREFIX/$INSTALL_LIB is already a system-known location for
397 shared libraries such as those listed in /etc/ld.so.conf), set the make
398 macro install_rpath to 0 by adding install_rpath=0 to platform_macros.GNU.
399 </li>
400 <li>Note that because ACE builds shared libraries, you'll need to set
401 LD_LIBRARY_PATH (or equivalent for your platform) to the directory
402 where binary version of the ACE library is built into. For example,
403 you probably want to do something like the following:
404 <blockquote>
405 <code>% setenv LD_LIBRARY_PATH $ACE_ROOT/lib:$LD_LIBRARY_PATH</code></blockquote>
406 </blockquote>
408 <blockquote>
409 <code>% export LD_LIBRARY_PATH=$ACE_ROOT/lib:$LD_LIBRARY_PATH</code></blockquote>
410 </blockquote>
411 </li>
412 <li>When all this is done, hopefully all you'll need to do is type:
413 <blockquote>
414 <code>% make</code></blockquote>
415 at the ACE_ROOT directory. This will build the ACE
416 library, tests, the examples, and the sample applications.
417 Building the entire ACE release can take a long time and consume
418 lots of disk space, however. Therefore, you might consider
419 cd'ing into the <code>$ACE_ROOT/ace</code> directory and
420 running <code>make</code> there to build just the ACE library.
421 As a sanity check, you might also want to build and run the
422 automated <a href="tests/README">"one-button" tests</a> in
423 <code>$ACE_ROOT/tests</code>. Finally, if you're also
424 planning on building <a href="https://www.dre.vanderbilt.edu/~schmidt/TAO.html">TAO</a>, you
425 should build the <a href="http://www.dre.vanderbilt.edu/~schmidt/PDF/gperf.pdf">gperf</a>
426 perfect hash function generator application in
427 <code>$ACE_ROOT/apps/gperf</code>.
428 </li>
429 <li>If you've set the INSTALL_PREFIX before building, now run
430 <blockquote><code>% make install</code></blockquote>
431 </li>
432 <li>If you need to regenerate the <code>ace/Svc_Conf_y.cpp</code> file,
433 you'll need to
434 get <a href="https://www.gnu.org/software/bison">GNU Bison</a>.
435 However, you should rarely, if ever, need to do this.
436 </li>
437 </ol>
439 <hr align="left" width="50%">
441 <h2><a name="win32">Building and Installing ACE on Windows</a></h2>
443 <p>This section contains instructions for building ACE on Microsoft
444 Windows with a variety of compilers and development environments.</p>
446 <p>First, if you are upgrading from an older release, the recommended practice
447 is to start with a clean directory. Unpacking the newer release over an older
448 one will not clean up any old files, and trying to use the environment's
449 "Clean" command will probably not account for all existing files.</p>
451 <p>For using MPC and our perl based test framework we recommend
452 our windows users to use <a href="https://www.activestate.com/products/perl">Active
453 State Perl</a> or <a href="http://strawberryperl.com">Strawberry Perl</a></p>
455 <ul>
456 <li><a href="#msvc">Microsoft Visual Studio</a></li>
457 <li><a href="#embarcadero">Embarcadero C++Builder</a></li>
458 <li><a href="#mingw">MinGW</a></li>
459 <li><a href="#cygwin">Cygwin</a></li>
460 </ul>
462 </p><p></p><hr align="left" width="50%"><p>
463 </p><h3><a name="msvc">Building and Installing ACE on Windows with
464 Microsoft Visual Studio</a></h3>
466 <p>ACE contains project files for
467 Visual Studio 2017 (vc141), and Visual Studio 2019 (vc142).
468 Visual Studio 2015/2017/2019 use different file formats but the same file
469 suffixes (<code>.sln</code> and <code>.vcproj</code>). To support both
470 environments, ACE supplies files with different names for the different
471 development and target platforms. The platform/name mapping is shown below.
472 All solution files have a <code>.sln</code> suffix and all project files have
473 a <code>.vcproj</code> suffix.</p>
475 <table width="400">
476 <caption><b>Mapping of Platform to Solution/Project File Name</b></caption>
477 <thead>
478 <tr valign="top">
479 <th>Platform</th>
480 <th>File Name</th>
481 </tr>
482 </thead><tbody>
483 <tr>
484 <th>Visual Studio 2017</th>
485 <td><i>name</i><code>_vs2017</code>
486 </td>
487 </tr>
488 <tr>
489 <th>Visual Studio 2019</th>
490 <td><i>name</i><code>_vs2019</code>
491 </td>
492 </tr>
493 </tbody></table>
495 <p>The VC++ compiler and linker can now be invoked from GNU make just like
496 most UNIX builds. Follow the instructions in the <a href="#unix_traditional">
497 ACE/GNU Configuration</a> sections and see the additional information in the
498 comments of
499 <a href="include/makeinclude/platform_win32_msvc.GNU">platform_win32_msvc.GNU</a>.
500 </p>
502 <p>If you happen to open an older file Visual Studio solution from a newer one, it will offer to convert
503 the file to the newer format for you
505 <ol>
506 <li>Uncompress the ACE distribution into a directory, where it will
507 create a ACE_wrappers directory containing the distribution. The
508 ACE_wrappers directory will be referred to as ACE_ROOT in the
509 following steps -- so ACE_ROOT\ace would be C:\ACE_wrappers\ace if
510 you uncompressed into the root directory.<br>
511 <br>
512 </li><li>Create a file called <code>config.h</code> in the ACE_ROOT\ace
513 directory that contains: <br>
514 <br>
515 <code>#include "ace/config-win32.h"</code><br>
516 <br>
518 </li><li>The static, DLL and MFC library builds are kept in
519 different workspaces. Files with names *_Static contain project
520 files for static builds. Workspaces for static and DLL builds will be
521 available through the stock release at DOC group's website. The
522 workspaces for MFC are not available and have to be generated using
523 MPC. Please see <a href="MPC/docs/README">MPC's README</a> for
524 details.<br><br>
525 </li><li>Now load the solution file for ACE (ACE_ROOT/ACE.sln).<br>
526 <br>
527 </li><li>Make sure you are building the configuration (i.e, Debug/Release)
528 the one you'll use (for example, the debug tests need the debug
529 version of ACE, and so on). All these different configurations are
530 provided for your convenience. You can either adopt the scheme to
531 build your applications with different configurations, or use
532 <code>ace/config.h</code> to tweak with the default settings on
533 NT.<br> <strong>Note:</strong> If you use the dynamic libraries,
534 make sure you include ACE_ROOT\lib in your PATH whenever you run
535 programs that uses ACE. Otherwise you may experience problems
536 finding ace.dll or aced.dll.<br>
537 <br>
538 </li><li>To use ACE with MFC libraries, also add the following to
539 your <code>config.h</code> file. Notice that if you want to
540 spawn a new thread with CWinThread, make sure you spawn the
541 thread with THR_USE_AFX flag set.<br>
542 <br>
543 <code>#define ACE_HAS_MFC 1</code><br>
544 <br>
545 By default, all of the ACE projects use the DLL versions of the
546 MSVC run-time libraries. You can still choose use the static (LIB)
547 versions of ACE libraries regardless of run-time libraries. The
548 reason we chose to link only the dynamic run-time library is that
549 almost every NT box has these library installed and to save disk
550 space. If you prefer to link MFC as a static library into ACE, you
551 can do this by defining <code>ACE_USES_STATIC_MFC</code> in your
552 <code>config.h</code> file. However, if you would like to link
553 everything (including the MSVC run-time libraries) statically,
554 you'll need to modify the project files in ACE yourself.<p>
555 </p></li><li>Static version of ACE libraries are built with
556 <code>ACE_AS_STATIC_LIBS</code><br> defined. This macro should
557 also be used in application projects that link to static ACE
558 libraries<br>
559 <br>
560 Optionally you can also add the line <br>
561 <br>
562 <code>#define ACE_NO_INLINE</code><br>
563 <br>
564 before the #include statement in ACE_ROOT\ace\config.h to disable
565 inline function and reduce the size of static libraries (and your
566 executables.)<br>
567 <br>
568 </li><li>ACE DLL and LIB naming scheme:<br>
569 <br>
570 We use the following rules to name the DLL and LIB files in ACE
571 when using MSVC.<br>
572 <br>
573 "Library/DLL name" + (Is static library ? "s" :
574 "") + (Is Debugging enable ? "d" : "")
575 + {".dll"|".lib"}<br>
576 <br>
577 </li></ol>
579 <p>More information for ACE/TAO on MSVC can be found
580 <a href="docs/msvc_notes.txt">here</a>. The doxygen version of this
581 document is available under Related Topics in the ACE Library.</p>
583 <b>ACE TESTS</b><p>
585 The tests are located in ACE_ROOT\tests. There is also a solution in
586 that directory to build all the tests (tests.sln)</p><p>
588 Once you build all the tests (Batch Build works well for this), you
589 can run perl script <code>run_test.pl</code> in the
590 <code>tests</code> directory to try all the tests.</p><p>
592 <a name="win32nonic">
593 <b> BUILDING ACE ON A WIN32 MACHINE THAT LACKS A NETWORK CARD </b></a></p><p>
595 <a name="win32nonic">You may want to run ACE on a non-networked machine. To do so, you must
596 install TCP/IP and configure it to ignore the absence of a network
597 card. This is one method:
599 </a></p><ol>
600 <a name="win32nonic"> <li>Run Control Panel
601 </li><li>Choose Network from Control Panel
602 </li><li>Add Adapter: MS Loopback Adapter
603 </li><li>Configure MS Loopback Adapter with 802.3 (default)
604 </li><li>Add Protocol: TCP/IP Protocol
605 </li><li>Configure TCP/IP Protocol with a valid IP address and subnet mask.
606 Leave everything else at the default settings.
607 </li><li>Add Service: Workstation
608 </li><li>Exit and Restart System
609 </li><li>Run Control Panel again
610 </li><li>Choose Services from Control Panel
611 </li><li>The following services are not necessary and may
612 be set to Disabled Startup: <br>
613 Alerter<br>
614 Computer Browser<br>
615 Net logon<br>
616 Messanger<br>
617 </li><li>Choose Network from Control Panel
618 </li><li>Confirm the following setup. This is all you need to run ACE:<br>
619 Installed Software:<br>
620 Computer Browser<br>
621 MS Loopback Adapter Driver<br>
622 TCP/IP Protocol<br>
623 Workstation<br>
624 Installed Adapter Cards:<br>
625 MS Loopback Adapter<p>
626 </p></li></a></ol>
628 <hr align="left" width="50%"><p>&nbsp;</p>
629 <h3><a name="embarcadero">Building and Installing ACE on Windows with Embarcadero C++</a></h3>
631 If you are building for a machine without a network card, you may want
632 to check <a href="#win32nonic">here</a> first. <p>
634 </p><ol>
635 <li>Uncompress the ACE distribution into a directory, where it will
636 create an
637 ACE_wrappers directory containing the source. The ACE_wrappers
638 directory will be referred to as ACE_ROOT in the following steps -- so
639 <code>ACE_ROOT\ace</code> would be <code>C:\ACE_wrappers\ace</code> when you uncompressed into the
640 root directory.<br>
641 <br>
642 </li><li>Create a file called <code>config.h</code> in the ACE_ROOT\ace
643 directory that contains at least: <br>
644 <br>
645 <code>#include "ace/config-win32.h"</code><br>
646 <br>
647 </li><li>Open a RAD Studio Command Prompt.<br>
648 <br>
649 </li><li>Set the ACE_ROOT environment variable to point to the ACE_wrappers
650 directory. For example:<br>
651 <br>
652 <code>set ACE_ROOT=C:\ACE_wrappers</code><br>
653 <br>
654 </li><li>Add ACE_wrappers\lib and ACE_wrappers\bin to the PATH environment variable:<br>
655 <br>
656 <code>set PATH=%ACE_ROOT%\lib;%ACE_ROOT%\bin;%PATH%</code><br>
657 <br>
658 </li><li>Change to the ACE_ROOT\ace directory.<br>
659 <br>
660 <code>cd %ACE_ROOT%\ace</code><br>
661 <br>
662 </li><li>Generate the bmake makefiles using <a href="#MPC">MPC</a>. Use the <code>bmake</code> project type for C++ Builder:<br>
663 <br>
664 <code>%ACE_ROOT%\bin\mwc.pl -type bmake</code><br>
665 <br>
666 </li><li>You can build several different versions of ACE by setting the following optional environment
667 variables before you run make:<br>
668 <br>
669 Set the environment variable below to build a debug version of ACE<br>
670 <code>set DEBUG=1</code><br>
671 <br>
672 Set the environment variable below to build a unicode version of ACE<br>
673 <code>set UNICODE=1</code><br>
674 <br>
675 Set the environment variable below to build a version of ACE with
676 Codeguard support. Should only be used when DEBUG is also set<br>
677 <code>set CODEGUARD=1</code><br>
678 <br>
679 By default we are using the clang based compilers. At the moment you
680 want to compile using the old bcc32 compiler set the CLASIC environment variable<br>
681 <code>set CLASSIC=1</code><br>
682 <br>
683 Set the environment variable below to build a version of ACE optimized
684 for a certain CPU. For this there are special compiler flags
685 (-3/-4/-5/-6), see the Embarcadero help for more info.<br>
686 <code>set CPU_FLAG=-6</code><br>
687 <br>
688 You can then start the build with the command
689 <br><code>make -f Makefile.bmak all</code><br>
690 <br>
691 You may also enable the options by passing them as command line options to make, for example:<br>
692 <code>make -f Makefile.bmak -DDEBUG all</code><br>
693 <br>
694 </li><li>Build ACE by doing:<br>
695 <br>
696 <code>make -f Makefile.bmak all</code><br>
697 <br>
698 </li></ol>
702 Note that when you run <code>make</code> in a sub directory you give <code>make -f Makefile.bmak all</code>. The <code>all</code> is needed to make sure the complete project is build.<p>
704 The C++ Builder port has been done by Jody Hagins, <a href="mailto:chris@kohlhoff.com">Christopher Kohlhoff</a> and <a href="mailto:jwillemsen@remedy.nl">Johnny Willemsen</a>. </p><p>
706 <b>ACE TESTS</b></p><p>
708 Before you can build the tests you need to build the protocols directory.
709 Change the directory to ACE_ROOT\protocols and start: </p><p>
710 </p><blockquote><code>
711 %ACE_ROOT%\bin\mwc.pl -type bmake<br>
712 make -f Makefile.bmak all
713 </code></blockquote><p>
715 The tests are located in ACE_ROOT\tests, change to this directory.
716 You build then the tests with the following commands:</p><p>
717 </p><blockquote><code>
718 %ACE_ROOT%\bin\mwc.pl -type bmake<br>
719 make -f Makefile.bmak all
720 </code></blockquote><p>
722 Once you build all the tests, you can run the automated test script using:</p><p>
723 </p><blockquote><code>perl run_test.pl</code></blockquote><p> in the
724 <code>tests</code> directory to try all the tests. You need to make
725 sure the ACE bin and lib directory (in this case
726 <code>%ACE_ROOT%\bin</code> and <code>%ACE_ROOT%\lib</code>)
727 are on the path before you try to run the tests. If your executables are
728 compiled into a subdirectory, add <code>-ExeSubDir subdirname</code> to the
729 command.</p><p>
731 <p></p><hr align="left" width="50%"><p>
732 </p><h3><a name="mingw">Building and Installing ACE on Win32 with MinGW/ MSYS</a></h3>
735 If you are building for a machine without a network card, you may want
736 to check <a href="#win32nonic">here</a> first.
738 </p><p>
739 Building and installing ACE on <a href="http://www.mingw.org/">MinGW</a>
740 uses a mix of a <a href="#unix">UNIX</a> building process and
741 <a href="#win32">Win32</a> configuration files.
742 Also, as MinGW uses GNU g++, you may want to take
743 a look at the <a href="#g++">Compiling ACE with GNU g++</a> section.
745 </p><p>
746 You will need the MinGW build tools and libraries, downloable from
747 <a href="http://www.mingw.org/"><tt>http://www.mingw.org</tt></a>.
749 <br>
750 For our build we require the packages
751 <b><tt>MinGW</tt></b> and <b><tt>MSYS</tt></b>.
753 </p><ol>
755 <li> Install the MinGW tools (including the MinGW Development toolkit) into a common directory, say c:/mingw.
756 <br><br>
758 </li><li> Install the MSYS tools into a common directory, say c:/msys.
759 <br><br>
761 </li><li> Open a MSYS shell. Set your <tt>PATH</tt> environment variable so
762 your MinGW's <tt>bin</tt> directory is first:
764 <blockquote><pre> % export PATH=/c/mingw/bin:$PATH
765 </pre></blockquote>
767 </li><li> Add an <tt>ACE_ROOT</tt> environment variable pointing to the
768 root of your ACE wrappers source tree:
770 <blockquote><pre> % export ACE_ROOT=/c/work/mingw/ACE_wrappers
771 </pre></blockquote>
773 From now on, we will refer to the root directory of the ACE
774 source tree as <tt>$ACE_ROOT</tt>.
775 <br><br>
777 </li><li> Create a file called <tt>config.h</tt> in the
778 <tt>$ACE_ROOT/ace</tt> directory that contains:
780 <blockquote><pre> #include "ace/config-win32.h"
781 </pre></blockquote>
783 </li><li> Create a file called <tt>platform_macros.GNU</tt> in the
784 <tt>$ACE_ROOT/include/makeinclude</tt> directory containing:
786 <blockquote><pre> include $(ACE_ROOT)/include/makeinclude/platform_mingw32.GNU
787 </pre></blockquote>
789 In the above text, don't replace <tt>$(ACE_ROOT)</tt> with the
790 actual directory, GNU make will take the value from the
791 environment variable you defined previously.
794 If you lack Winsock 2, add the line
796 </p><blockquote><pre> winsock2 = 0
797 </pre></blockquote>
799 before the previous one.
800 <br><br>
803 If you want to install ACE (using "make install") and want all the <tt>.pc</tt> files generated,
804 set the installation prefix in platform_macros.GNU.
805 </p><blockquote><pre> INSTALL_PREFIX=/c/ACE
806 </pre></blockquote>
807 Headers will be installed to $INSTALL_PREFIX/include, documentation and
808 build system files to $INSTALL_PREFIX/share and libraries to $INSTALL_PREFIX/lib. With INSTALL_PREFIX set, RPATH will be enabled.
809 To disable RPATH (for example, if $INSTALL_PREFIX/$INSTALL_LIB is already
810 a system-known location for shared libraries), set the make macro
811 install_rpath to 0 by adding install_rpath=0 to platform_macros.GNU.
813 <br><br>
815 </li><li> In the MSYS shell, change to the $ACE_ROOT/ace directory and
816 run make:
818 <blockquote><pre> % cd $ACE_ROOT/ace
819 % make
820 </pre></blockquote>
823 This should create <tt>libACE.dll</tt> (the Win32 shared library) and
824 <tt>libACE.dll.a</tt> (the Win32 import library for the DLL).
825 Note that the name for the ACE DLL follows the MinGW convention, which itself
826 resembles UNIX.
828 </p><p>
829 If you want static libs also, you may run:
831 </p><blockquote><pre> % make static_libs_only=1
832 </pre></blockquote>
834 </li><li> Run make install:
836 <blockquote><pre> % make install
837 </pre></blockquote>
839 This should create <tt>ACE.pc</tt> to use with pkg-config.
840 </p>
842 </li><li> <a name="mingwrunpath">
843 The same rules for Win32 search of DLLs apply for MinGW. If you
844 want to run some ACE programs from the MSYS shell, you may
845 need to add the directory for <tt>libACE.dll</tt> to your PATH:
847 </a><blockquote><pre><a name="mingwrunpath"> % export PATH=/c/work/mingw/ACE_wrappers/ace:$PATH
848 </a></pre></blockquote>
850 </li></ol>
852 <a name="mingwrunpath"><b>ACE TESTS</b></a><p>
854 <a name="mingwrunpath">The tests are located in <tt>$ACE_ROOT/tests</tt>.
855 After building the library, you can change to that directory and run
856 make:
858 </a></p><blockquote><pre><a name="mingwrunpath"> % cd $ACE_ROOT/tests
859 % make
860 </a></pre></blockquote>
863 <a name="mingwrunpath">Once you build all the tests, you can run
864 <code>run_tests.pl</code> in the
865 <code>tests</code> directory to try all the tests:
867 </a></p><blockquote><pre><a name="mingwrunpath"> % perl run_test.pl
868 </a></pre></blockquote>
871 <a name="mingwrunpath">If you are using ACE as a DLL, you will need to modify your PATH
872 variable as explained </a><a href="#mingwrunpath">above</a>.
874 </p><p>
875 You may want to check <tt>$ACE_ROOT/tests/README</tt> for the status
876 of the various tests on MinGW and the different Windows flavors.
878 </p><p></p><hr align="left" width="50%"><p>
879 </p><h3><a name="cygwin">Building and Installing ACE on Win32 with Cygwin</a></h3>
882 If you are building for a machine without a network card, you may want
883 to check <a href="#win32nonic">here</a> first.
885 </p><p>
886 Building and installing ACE on <a href="http://www.cygwin.com/">Cygwin</a>
887 uses the <a href="#unix">UNIX</a> building process.
888 Also, as Cygwin uses GNU g++, you may want to take
889 a look at the <a href="#g++">Compiling ACE with GNU g++</a> section.
891 </p><p>
892 You will need the Cygwin build tools and libraries, downloable from
893 <a href="http://www.cygwin.com/"><tt>http://www.cygwin.com</tt></a>.
894 For our build we require the following packages besides the packages the
895 setup selects by default:
896 <a name="cygwinpacks">
897 </a></p><blockquote>
898 <a name="cygwinpacks"><b><tt>gcc (version 3.3.3), cygserver, make, perl, binutils</tt></b>.
899 </a></blockquote>
901 <ol>
903 <a name="cygwinpacks"> <li> Install Cygwin (this can be easy downloading and running
904 <a href="http://cygwin.com/setup.exe"><tt>setup.exe</tt></a>
905 from the Cygwin site). For working with ACE we recommend
906 to select <code>DOS</code> as default text file type.
907 <br><br>
909 <li> Open a Cygwin shell. Set your <tt>PATH</tt> environment variable so
910 your Cygwin <tt>bin</tt> directory is first:
912 <blockquote><pre> % export PATH=//c/cygwin/bin:$PATH
913 </pre></blockquote>
917 <blockquote><pre> % export PATH=/cygdrive/c/cygwin/bin:$PATH
918 </pre></blockquote>
921 Note Cygwin uses ``<tt>/</tt>'' as directory separator,
922 and ``<tt>//X</tt>'' as a notation for Win32 drive <tt>X</tt>.
923 Note also that you <em>can't</em> use ``<tt>c:/cygwin/bin</tt>''
924 because, for Cygwin,
925 ``<tt>:</tt>'' is path separator character, as in UNIX.
926 <br><br>
928 </p></li><li> Add an <tt>ACE_ROOT</tt> environment variable pointing to the
929 root of your ACE wrappers source tree (in this example c:/work/cygwin/ACE_wrappers):
931 <blockquote><pre> % export ACE_ROOT=/cygdrive/c/work/cygwin/ACE_wrappers
932 </pre></blockquote>
935 Note here you <em>can't</em> use the ``<tt>//X</tt>'' Cygwin
936 notation as this is seen by Cygwin's compiler and it doesn't
937 support that (it <em>does</em> support ``<tt>/</tt>'' as directory
938 separator however).
940 </p><p>
941 From now on, we will refer to the root directory of the ACE
942 source tree as <tt>$ACE_ROOT</tt>.
943 <br><br>
945 </p></li><li> Create a file called <tt>config.h</tt> in the
946 <tt>$ACE_ROOT/ace</tt> directory that contains:
948 <blockquote><pre> #include "ace/config-cygwin32.h"
949 </pre></blockquote>
951 </li><li> Create a file called <tt>platform_macros.GNU</tt> in the
952 <tt>$ACE_ROOT/include/makeinclude</tt> directory containing:
954 <blockquote><pre> include $(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU
955 </pre></blockquote>
957 In the above text, don't replace <tt>$(ACE_ROOT)</tt> with the
958 actual directory, GNU make will take the value from the
959 environment variable you defined previously.
961 </li><li> On the Cygwin shell, change to the $ACE_ROOT/ace directory and
962 run make:
964 <blockquote><pre> % cd $ACE_ROOT/ace
965 % make
966 </pre></blockquote>
969 This should create <tt>libACE.dll</tt> (the Win32 shared library) and
970 <tt>libACE.dll.a</tt> (the Win32 import library for the DLL).
971 Note the name for the ACE DLL on Cygwin follows the UNIX convention.
972 <br><br>
974 </p><p>
975 If you want static libs also, you may run:
977 </p><blockquote><pre> % make static_libs_only=1
978 </pre></blockquote>
980 </li><li> <a name="cygwinrunpath">
981 The same rules for Win32 search of DLLs apply for Cygwin. If you
982 want to run some ACE programs from the Cygwin shell, you may
983 need to add the directory for <tt>libACE.dll</tt> to your PATH:
985 </a><blockquote><pre><a name="cygwinrunpath"> # export PATH=//c/work/cygwin/ACE_wrappers/ace:$PATH
986 </a></pre></blockquote>
988 <a name="cygwinrunpath"> If you are using MPC-generated Makefiles, then the DLLs have been
989 placed in the lib directory instead of ace and thus your PATH
990 addition would need to look like this:
992 </a><blockquote><pre><a name="cygwinrunpath"> # export PATH=//c/work/mingw/ACE_wrappers/lib:$PATH
993 </a></pre></blockquote>
996 </li></ol>
998 <a name="cygwinrunpath"><b>ACE TESTS</b></a><p>
1000 <a name="cygwinrunpath">The tests are located in <tt>$ACE_ROOT/tests</tt>.
1001 After building the library, you can change to that directory and run
1002 make:
1004 </a></p><blockquote><pre><a name="cygwinrunpath"> % cd $ACE_ROOT/tests
1005 % make
1006 </a></pre></blockquote>
1009 <a name="cygwinrunpath">Once you build all the tests, you can run
1010 <code>run_tests.pl</code> in the
1011 <code>tests</code> directory to try all the tests:
1013 </a></p><blockquote><pre><a name="cygwinrunpath"> % perl run_test.pl
1014 </a></pre></blockquote>
1017 <a name="cygwinrunpath">If you are using ACE as a DLL, you will need to modify your PATH
1018 variable as explained </a><a href="#cygwinrunpath">above</a>.
1020 </p><p>
1021 You may want to check <tt>$ACE_ROOT/tests/README</tt> for the status
1022 of the various tests on Cygwin and the different Windows flavors.
1023 </p>
1025 <p></P>
1026 <p></p><hr align="left" width="50%"><p>
1027 </p><h2><a name="vxworks">Building and Installing ACE on VxWorks</a></h2>
1028 For the most part, you should be able to follow the instructions above
1029 to build ACE and applications that use it. Start with the
1030 <a href="#unix">Unix instructions</a> above to build ACE and the
1031 applications that use it. Please see below for more information on
1032 <a href="#VxWorks/NT">building ACE on NT hosts for VxWorks targets</a>.<p>
1034 A few notes on VxWorks builds (thanks to
1035 <a href="mailto:Paul_von_Behren@stortek.com">Paul von Behren</a> and
1036 <a href="https://www.remedy.nl">Remedy IT</a> for these notes):</p>
1038 </p><ul>
1039 <li>VxWorks builds are done with a cross compiler, i.e., the compiles
1040 are done on a workstation creating object modules which are
1041 downloaded and loaded into the VxWorks target system.<p>
1042 </p></li><li>C++ object modules must be post-processed by a VxWorks
1043 utility called "munch" to set up calls to static constructors and destructors.
1044 ACE integrates the makefile includes/rules files
1045 distributed with VxWorks to achieve maximum compatibility and reuse the target
1046 specifications and buildcommands defined by Windriver itself.
1047 The original ACE support for VxWorks included a perl script called
1048 <a href="bin/ace_ld">$ACE_ROOT/bin/ace_ld</a>,
1049 which was called from the Makefiles, replacing
1050 the traditional <code>ld</code> step. Although this script is currently still
1051 available it is not used anymore.<BR>
1052 You must have perl installed to use <code>ace_ld</code>. If perl is not on your path, you'll
1053 have to set <code>PERL_PATH</code> to the full path (including
1054 perl.exe), either in your
1055 <code>$(ACE_ROOT)/include/makeinclude/platform_macros.GNU</code>
1056 or in your environment.<p>
1057 </p></li><li>Wind River provides GCC/G++ cross-compilers for the
1058 supported target platforms. The executables are named cc&lt;target&gt;
1059 and g++&lt;target&gt;; for example, ccppc and g++cpp for PowerPC
1060 targets.<p>
1061 </p></li></ul>
1063 You'll have to let ACE know the target type at compile time. There
1064 are several ways to do this; please see the
1065 <code>$ACE_ROOT/include/makeinclude/platform_vxworks5.5.x.GNU</code>
1066 platform file for detailed information.<p>
1068 The VxWorks platform_vxworks*.GNU files are set up so that shared
1069 libraries are not built on VxWorks, by default. Only static
1070 libraries, with .a extension, are built. Therefore, it's not
1071 necessary to set the LD_LIBRARY_PATH environment variable on your host
1072 system when building for VxWorks targets. Please note, however, if
1073 you use TAO on VxWorks that you will need to set your LD_LIBRARY_PATH
1074 to find the TAO IDL compiler libraries (installed in the ace
1075 directory) on the host.</p><p>
1077 These non-default VxWorks kernel configuration <code>#defines</code>
1078 are required with ACE:</p><p>
1080 </p><pre>#define INCLUDE_CPLUS /* include C++ support */
1081 #define INCLUDE_CPLUS_IOSTREAMS /* include iostreams classes */
1082 #define INCLUDE_POSIX_ALL /* include all available POSIX functions */
1083 </pre>
1085 For completeness, here are the non-default <code>#defines</code> that
1086 we used for VxWorks 5.3.1/g++ 2.7.2:
1088 <pre>#define INCLUDE_CPLUS /* include C++ support */
1089 #define INCLUDE_CPLUS_IOSTREAMS /* include iostreams classes */
1090 #define INCLUDE_CONFIGURATION_5_2 /* pre-tornado tools */
1091 #define INCLUDE_DEBUG /* pre-tornado debugging */
1092 #define INCLUDE_LOADER /* object module loading */
1093 #define INCLUDE_NET_SYM_TBL /* load symbol table from network */
1094 #define INCLUDE_SYM_TBL_SYNC /* synchronize host and target symbol tables */
1095 #define INCLUDE_NFS /* nfs package */
1096 #define INCLUDE_PING /* ping() utility */
1097 #define INCLUDE_POSIX_ALL /* include all available POSIX functions */
1098 #define INCLUDE_RDB /* remote debugging package */
1099 #define INCLUDE_RLOGIN /* remote login */
1100 #define INCLUDE_RPC /* rpc package */
1101 #define INCLUDE_SECURITY /* shell security for network access */
1102 #define INCLUDE_SHELL /* interactive c-expression interpreter */
1103 #define INCLUDE_SHOW_ROUTINES /* show routines for system facilities*/
1104 #define INCLUDE_SPY /* spyLib for task monitoring */
1105 #define INCLUDE_STARTUP_SCRIPT /* execute start-up script */
1106 #define INCLUDE_STAT_SYM_TBL /* create user-readable error status */
1107 #define INCLUDE_SYM_TBL /* symbol table package */
1108 #define INCLUDE_UNLOADER /* object module unloading */
1109 #define INCLUDE_WINDVIEW /* WindView command server */
1110 </pre>
1112 Also, automatic construction/destruction of static objects
1113 should be enabled.<p>
1115 If you use TAO, it's also a good idea to increase the
1116 <code>NUM_FILES</code> parameter from its default of 50 to,
1117 say, 1000.</p><p>
1119 Please note that those VxWorks kernel configuration parameters
1120 are set in the VxWorks configAll.h file. You must rebuild your
1121 VxWorks kernel after modifying that file.</p><p>
1123 If you're first getting started with ACE and/or VxWorks, I recommend
1124 just building the ACE library and tests first. (Some of the ACE
1125 examples, in System_V_IPC, don't build on VxWorks yet.) Then try
1126 running the tests. Please see $ACE_ROOT/tests/README for the latest
1127 status of the ACE tests on VxWorks.</p><p>
1129 Please note that the <code>main</code> entry point is renamed to
1130 <code>ace_main</code> (configurable via ACE_MAIN) on VxWorks with g++,
1131 to comply with its restriction against using <code>main</code>.
1132 In addition, ACE_HAS_NONSTATIC_OBJECT_MANAGER is enabled by default
1133 to cleanly support construction and destruction of static objects.
1134 Please see the <a href="#NonStaticObjectManager">Non-static
1135 ACE_Object_Manager</a> discussion for the important implication
1136 of this feature.</p><p>
1138 ACE threads (VxWorks tasks) can be named, for example, by supplying a
1139 non-null argument to the Thread_Manager spawn routines. However,
1140 names beginning with <code>"==ace_t=="</code> are forbidden because
1141 that prefix is used internally by ACE.</p><p>
1143 You can spawn a new task to run <code>ace_main</code>, using either
1144 VxWorks <code>sp</code>, or ACE'S <a name="spa"><code>spa</code></a>.
1145 <code>spa</code> can be used from the VxWorks shell to pass arguments
1146 to <code>ace_main</code>. Its usage is:
1148 </p><pre><code>
1149 spa ace_main, "arg1" [, ...]
1150 </code></pre>
1152 All arguments must be quoted, even numbers. You can start also ace_main
1153 without spawning another thread by using:<p>
1155 </p><pre><code>
1156 spaef ace_main, "arg1" [, ...]
1157 </code></pre>
1159 ACE also provides the function <code>vx_execae</code> which is capable of running
1160 <code>ace_main</code> in a separate thread, wait for the task to finish and return
1161 the return code from <code>ace_main</code>:
1163 <pre><code>
1164 int vx_execae (FUNCPTR acemain,char* arguments, int prio = 0, int opt = 0, int stacksz = 0);
1165 </code></pre>
1167 You could call this from the VxWorks shell like:
1168 </p>
1169 <pre><code>
1170 my_rc = vx_execae ace_main, "-o server.ior -ORBDottedDecimalAddresses 1"
1171 </code></pre><p>
1173 When <code>prio</code>, <code>opt</code> or <code>stacksz</code> are omitted or specified
1174 as <code>0</code> default values will be used. See the VxWorks shell documentation for the
1175 defaults for <code>prio</code> and <code>opt</code>. For <code>stacksz</code> the default is
1176 <code>ACE_NEEDS_HUGE_THREAD_STACKSIZE</code>.
1177 The <code>arguments</code> string will be parsed and passed on to <code>ace_main</code> as
1178 a regular <code>argc</code> and <code>argv</code>.</p><p>
1180 Be aware of the fact that when you execute <code>ace_main</code> directly from the VxWorks
1181 shell argc will be zero and argv* will also be zero. Using <code>argv[0]</code> will not return
1182 the program name, but will result in a crash.<br>
1183 The ACE helper functions <code>spa</code>, <code>spaef</code> and <code>vx_execae</code> prevent
1184 this problem by building a regular <code>argc</code> and <code>argv</code> which also contain a
1185 valid <code>argv[0]</code> element.</p>
1187 <h3><a name="VxWorks/SharedLibs">Building Shared Libraries for VxWorks</a>.</h3>
1189 <strong>NOTE</strong>: Since VxWorks support is currently being reworked with
1190 an initial focus on static builds the support for shared builds is momentarily
1191 broken. This will be remedied(!) as soon as possible.<p>
1193 ACE supports shared libraries for VxWorks, but only with the g++
1194 compiler. To build shared libraries instead of the default static
1195 libraries, added <code>shared_libs_only=1</code> to either your
1196 <code>ACE_wrappers/include/makeinclude/platform_macros.GNU</code> or
1197 your <code>make</code> invocation. Then, be sure to load the ACE (and
1198 any other) shared library before loading your executable(s).</p><p>
1200 A shared library for VxWorks uses the same code as for a static
1201 (non-shared) library. However, calls to static constructors/
1202 destructors are added. The code in the shared library <strong>must</strong>
1203 be reentrant if you shared it between programs (tasks). The
1204 ACE library meets this requirement.</p><p>
1206 Shared libraries reduce build time, executable size, and load
1207 time of the executable. But, you must manually load the shared
1208 library before loading your executable(s) with a command such as:
1209 </p><pre><code>
1210 -&gt; ld &lt; libACE.so
1211 </code></pre>
1212 Shared libraries can be unloaded the same way an executable
1213 (module) is unloaded.<p>
1215 <strong>NOTE</strong>: Shared libraries on VxWorks aren't the same as
1216 shared libraries on other operating systems. In particular, there is
1217 no support for creating copies of writeable global (static) data in
1218 the shared library. This includes the singleton ACE_Object_Manager
1219 instance pointer. If you share global data between separate programs,
1220 they may not work properly. See the discussion of shared code and
1221 reentrancy in the VxWorks' <em>Programmers Guide</em>.</p><p>
1223 Instead of trying to run separate programs onto a VxWorks target, we
1224 recommend creating just one program, and spawning a thread for each
1225 task. The TAO IDL_Cubit test <a href="TAO/performance-tests/Cubit/TAO/IDL_Cubit/collocation_test.cpp">collocation
1226 test</a> is a good example.</p><p>
1228 </p><h3><a name="VxWorks/LinkToKernel">Linking ACE and/or TAO Libraries into the VxWorks Kernel</a>.</h3>
1230 It's easy to link your ACE and/or TAO libraries into the VxWorks kernel.
1231 Just build <a href="#VxWorks/SharedLibs">shared versions</a>, but
1232 disable the munch step. The easiest way to do that is to set the
1233 <code>LD</code> make variable to the name of your linker. For
1234 example, to build a libACE.so for PowerPC that can be linked into
1235 the kernel:
1236 <pre>% cd $ACE_ROOT/ace
1237 % make LD=ldppc shared_libs_only=1
1238 </pre>
1239 After building the shared lib, link it into the kernel by setting
1240 the <code>MACH_EXTRA</code> make variable in the kernel configuration
1241 Makefile. Then, build the kernel using <code>make exe</code>.<p>
1243 </p><h3><a name="VxWorksTestScript">Using the one-button ACE tests with VxWorks</a>.</h3>
1245 It is possible to generate a script to execute all ACE tests. You can do this by executing
1246 </a></p><blockquote><pre><a name="vxworksscript">% perl run_test.pl -v -o > run_test.vxworks
1247 </a></pre></blockquote>
1249 The ACE tests write their output files in a directory named
1250 <code>log/</code>, below the current (<code>tests</code>) directory.<br/>
1251 </p>
1253 To run the tests from the build directory on an NT host where you crossbuild your
1254 VxWorks ACE/TAO you can set up the Target Server File System (TSFS) in your Target Server
1255 configuration. If you f.i. set the root for the TSFS to the root directory of your builddisk
1256 you can set the default directory for the target by issueing the following command
1257 from a Host shell: '@cd "/tgtsvr/{path to ACE}/ACE_wrappers/tests"'.
1258 The '@' addition makes sure this command is executed for the target environment and not the
1259 local host shell environment.
1260 If you also issue the command 'cd {path to ACE}/ACE_wrappers/tests' you can execute the
1261 generated one button testscript like: '&lt; run_test.vxworks'.
1262 </p>
1264 Running the ACE tests automatically from the ACE autobuild tool using Target Server and Host
1265 shell options is also supported.
1266 </p>
1268 If you don't have NFS included in your VxWorks kernel, you can use these steps, provided by
1269 <a href="mailto:clarence_m_weaver@md.northgrum.com">Clarence M. Weaver</a>,
1270 to run the tests and capture their output:</p><p>
1271 </p><ol>
1272 <li>What I did was create a log directory on the boot NT host of my VxWorks
1273 target.<p>
1274 </p></li><li>I copied all the test applications and the run_test.vxworks script to
1275 the parent of the log directory.<p>
1276 </p></li><li>Using the target shell not the host shell, I "cd" to the directory
1277 containing the script and test programs.<p>
1278 </p></li><li>Invoked the script using <code>&lt; run_test.vxworks</code> from this target shell.<p>
1279 </p></li></ol>
1281 <a href="mailto:Kirk.Davies@pobox.com">Kirk Davies</a> provided this
1282 approach for running the ACE tests on Tornado II:
1284 <ul>
1285 <li>Under Tornado II, I set up the Target Server File System (TSFS), and
1286 the test logs get written to the log subdirectory under that.<p>
1287 </p></li><li>You have to set an environment variable before running the tests:
1288 <pre>putenv("ACE_TEST_DIR=/tgtsvr")
1289 </pre><p>
1290 </p></li></ul>
1292 </p><h3><a name="VxWorks/NT">Building ACE on Tornado/NT hosts for VxWorks targets</a>.</h3>
1293 The following, very useful information was contributed by
1294 <a href="http://people.qualcomm.com/cryan">Chris Ryan</a>
1295 and <a href="mailto:Paul_von_Behren@stortek.com">Paul von Behren</a>.
1296 Please submit corrections, additions, or clarifications to our
1297 the <a href="https://github.com/DOCGroup/ACE_TAO">github project</a>.<p>
1299 <strong>NOTE:</strong>The make (version 3.74) that is provided with
1300 Tornado 2.2 cannot be used to build ACE. A working version is available
1301 from the WindRiver support site, download the
1302 <a href="https://secure.windriver.com/cgi-bin/windsurf/downloads/view_binary.cgi?binaryid=838">
1303 make3_80.gvk_patches</a> and the
1304 <a href="https://secure.windriver.com/cgi-bin/windsurf/downloads/view_binary.cgi?binaryid=100340">
1305 make3_80.tor2_2.new_dependency_rules</a> package and install them.</p><p>
1307 Using the Cygnus tools, this approach works:
1308 </p><ul>
1309 <li>You'll build both your NT and VxWorks executables in the same
1310 workspace (directory hierarchy). This works because the NT
1311 compiler and ACE's Makefiles put their output in different
1312 directories.<p>
1313 </p></li><li>Set up your
1314 <code>ACE_wrappers/include/makeinclude/platform_macros.GNU</code>
1315 as usual for VxWorks. See
1316 <a href="include/makeinclude/platform_vxworks5.5.x.GNU">the
1317 g++/VxWorks platform file</a> for more information.<p>
1318 </p></li><li>Create an <code>ACE_wrappers/ace/config.h</code> file that looks
1319 something like the following.
1320 <pre>#if defined (_MSC_VER) || defined (__BORLANDC__)
1321 # include "ace/config-win32.h"
1322 #else
1323 # include "ace/config-vxworks5.x.h"
1324 #endif
1325 </pre><p>
1326 </p></li><li>Set your <code>ACE_ROOT</code>, <code>CPP_LOCATION</code>,
1327 <code>WIND_BASE</code>, and <code>WIND_HOST_TYPE</code> environment
1328 variables.<p>
1329 </p></li><li>Build for NT, then build for VxWorks.<p>
1330 </p></li></ul>
1332 A few additional Windows Notes, from Paul von Behren:<p>
1333 </p><ul>
1334 <li>Cygnus has created a Win32 API which is compatible with a
1335 "generic" Unix environment. Using this library, they have ported a
1336 large collection of GNU tools to WinNT/95 - including a port of
1337 gcc/g++. See <a href="http://www.cygnus.com/misc/gnu-win32/">http://www.cygnus.com/misc/gnu-win32/</a>
1338 A related link is <a href="ftp://ftp.cygnus.com/pub/gnu-win32/latest/">ftp://ftp.cygnus.com/pub/gnu-win32/latest/</a><p>
1339 </p></li><li>To set up the command-prompt build environment, run
1340 <code>Tornado\host\x86-win32\bin\TorVars.bat</code>. This is done
1341 implicitly within the Tornado IDE.<p>
1342 </p></li><li>To run <code>ace_ld</code>, you still need perl installed -
1343 see <a href="https://www.activestate.com/products/perl">ActiveState Perl</a>
1344 or <a href="http://strawberryperl.com">Strawberry Perl</a>.<p>
1345 </p></li><li>The Tornado IDE will use a standard Makefile for project
1346 builds, but does not have a GUI interface for managing the
1347 Makefile. By default, it will use rules from Makefile in the current
1348 directory and you can configure it to add certain Makefile
1349 targets to the project. If you have <code>ACE_ROOT</code> defined
1350 before starting Tornado, you can specify an ACE Makefile as a Tornado
1351 target and Tornado will then call make from the menu.<p>
1352 </p></li></ul>
1354 And Chris Ryan's instructions for building for VxWorks targets
1355 on Windows NT hosts:
1357 <ol>
1358 <li>Path setting that seems to be working is:<p>
1359 </p><pre> /tornado/host/x86-win32/bin:
1360 /tornado/host/x86-win32/lib/gcc-lib/i386-wrs-vxworks/cygnus-2.7.2-960126:
1361 /tornado/host/x86-win32/i386-wrs-vxworks/bin:
1362 /ace/ace_wrappers/bin:
1363 /gnuwin32/b18/H-i386-cygwin32/bin:
1364 /gnuwin32/b18/tcl/bin:
1365 /WINNT/system32:
1366 /WINNT:
1367 /WINNT/system32/nls/ENGLISH:
1368 /bin
1369 </pre>
1371 Other environment variables:<p>
1372 </p><pre> WIND_BASE=/tornado
1373 SHELL=/bin/sh.exe
1374 TERM=pcbios
1375 TAO_ROOT=/ace/ACE_wrappers.vxworks/TAO
1376 CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.EXE
1377 GCC_EXEC_PREFIX=/tornado/host/x86-win32/lib/gcc-lib/
1378 WIND_HOST_TYPE=x86-win32
1379 ACE_ROOT=/ace/ACE_wrappers.vxworks
1380 </pre>
1382 </li><li><code>/tornado</code> is the root of the Tornado install
1383 (<code>$WIND_BASE</code>).
1385 </li><li><code>/gnuwin32</code> is the root of a Cygnus GNU download and install.
1387 </li><li><code>/bin</code> content is:<p>
1388 </p><pre> aced.dll
1389 cygwin.dll
1390 perl.exe
1391 rm.exe
1392 sh.exe
1393 true
1394 </pre>
1396 <code>aced.dll</code> is produced in an ACE NT source tree according to
1397 documented procedure for Windows VC++ ACE build.
1399 <code>cygwin.dll</code> is from the Cygnus GNU software download and install.
1401 </li><li>Basically, follow documented procedure for ACE build/install on UNIX
1402 platform. Create a <code>$ACE_ROOT/ace/config.h</code> that looks
1403 like:<p>
1404 </p><pre> #include "config-vxworks5.x.h"
1405 </pre>
1407 And create a
1408 <code>$ACE_ROOT/include/makeinclude/platform_macros.GNU</code>
1409 that looks like:<p>
1410 </p><pre>
1411 WIND_BASE = /tornado
1412 WIND_HOST_TYPE = x86-win32
1413 CPU = I80486
1414 include $(ACE_ROOT)/include/makeinclude/platform_vxworks5.5.x.GNU
1415 </pre>
1417 </li><li>When using cygnus windows GNUTools on WinNT you have to start
1418 make with "--unix" option, otherwise WinNT shell cmd.exe is responded and
1419 not sh.exe, i.e.,
1420 <pre> make --unix static_libs_only=1
1421 </pre>
1422 </li></ol>
1424 <h3>TAO on NT Tornado host, VxWorks target.</h3>
1426 <ol>
1427 <li>Build ACE and TAO_IDL in the NT tree as already documented.
1428 Be sure to build ACE's gperf on NT, in
1429 <code>ACE_wrappers/apps/gperf/src</code>.<p>
1431 </p></li><li>Build $TAO_ROOT/tao
1432 <pre> CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.exe
1433 cd $TAO_ROOT/tao
1434 /gnuwin32/b18/H-i386-cygwin32/bin/make
1435 </pre>
1437 </li><li>Build orbsvcs.
1438 <pre> CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.exe
1439 cd $TAO_ROOT/orbsvcs/orbsvcs
1440 /gnuwin32/b18/H-i386-cygwin32/bin/make
1441 </pre>
1443 </li><li>Build $TAO_ROOT/tests<p>
1444 </p></li></ol>
1447 <h3><a href="mailto:Jaffar_Shaikh@Mitel.COM">Jaffar Shaikh's</a>
1448 Notes for Building ACE and TAO for VxWorks on NT host</h3>
1449 <b></b><p><b>Scenario:</b> I was building the ACE and TAO for VxWorks
1450 on NT. The target system was a PPC860 based chassis and another a NT
1451 host based card.</p>
1452 <b><p>Host System:</p>
1453 </b><p>NT 4.0 workstation with 128 M RAM, 266MHz Pentium.</p>
1455 <b><p>Software Needed For Building TAO</p>
1456 </b><p>1) <a href="https://www.activestate.com/products/perl">ActiveState Perl</a>
1457 or <a href="http://strawberryperl.com">Strawberry Perl</a>
1458 </p>
1460 <p>2) Tornado 2.2.1 from Windriver.</p>
1462 <p>3) Cygwin GNU to build TAO. It is available for NT as a freeware
1463 from the <a href="http://www.cygwin.com">Cygwin</a> site</p>
1464 <p>The Cygwin Make (version 3.75) can only build the TAO not the
1465 Tornado II make (version 3.74)</p>
1467 <b><p>Environment Variables:</p>
1468 </b><p>On NT the environment Variables are set as follows, (from
1469 Control Panel-&gt; System -&gt; Environment)</p>
1470 <p>I added following Environment variable entries to PATH </p>
1472 <pre>
1473 C:\Perl\bin\;
1474 C:\tornado\host\x86-win32\bin;
1475 C:\tornado\host\x86-win32\powerpc-wrs-vxworks\bin;
1476 C:\tornado\host\x86-win32\lib\gcc-lib\powerpc-wrs-vxworks\cygnus-2.7.2-960126;
1477 C:\Corba\Ace_wrappers\bin;
1478 C:\Cygwin\bin;
1479 C:\Cygwin\usr\bin;
1480 C:\bin
1481 </pre>
1483 <p>Additional Environmental variables and the values,</p>
1484 <pre>
1485 CPU=PPC860
1486 LD_LIBRARY_PATH=
1487 SHELL=/bin/sh.exe
1488 ACE_ROOT=/Corba/ACE_wrappers
1489 WIND_BASE=/tornado
1490 SHELL=/bin/sh.exe
1491 TERM=pcbios
1492 TAO_ROOT=/Corba/ACE_wrapper/Tao
1493 CPP_LOCATION=/Program Files/Microsoft Visual Studio/VC98/Bin/CL.exe
1494 GCC_EXEC_PREFIX=/tornado/host/x86-win32/lib/gcc-lib/
1495 WIND_HOST_TYPE=x86-win32
1496 PERL_PATH=/perl/bin/perl.exe
1497 </pre>
1499 <b><p>Directories of importance</p>
1500 </b><p>C:\Corba &lt;-- Ace_wrappers (uzipped)</p>
1501 <p>C:\tornado &lt;-- Tornado installed</p>
1502 <p>C:\Perl &lt;-- Perl installed</p>
1503 <p>C:\Cygwin &lt;-- Cygwin installed</p>
1504 <p>C:\bin &lt;-- Copy these files,</p>
1505 <p> Ace.dll, &lt;-- After you build Ace</p>
1506 <p> gperf.exe &lt;-- After you build gperf</p>
1507 <p> Cygwin1.dll, &lt;-- After you install Cygwin</p>
1508 <p> perl.exe, &lt;-- After you install Perl</p>
1509 <p> rm.exe &lt;-- After you install Cygwin</p>
1510 <p> sh.exe &lt;-- After you install Cygwin</p>
1511 <p> true &lt;-- After you install Cygwin</p>
1512 <b><p>Create Files</p>
1513 </b><p>1) C:\Corba\ACE_Wrappers\ace\config.h</p>
1514 <p>with entry</p>
1515 <pre>
1516 #if defined (_MSC_VER) || (__BORLANDC__)
1517 #include "ace/config-win32.h"
1518 #else
1519 #define ACE_HAS_IP_MULTICAST
1520 #include "ace/config-vxworks5.x.h"
1521 #endif
1522 </pre>
1524 <p>2) C:\Corba\ACE_wrappers\include\makeinclude\platform_macros.GNU</p>
1525 <pre>
1526 WIND_BASE = /tornado
1527 WIND_HOST_TYPE = x86-win32
1528 include $(ACE_ROOT)/include/makeinclude/platform_vxworks5.5.x.GNU
1529 ACE_COMPONENTS=FOR_TAO (you may choose this option to build ACE library that supports TAO)
1530 </pre>
1532 <p></p>
1533 <b><p>Steps to Build</p>
1534 </b><p>1) Build Ace.dll under NT</p>
1535 <p>In MS Visual C++ open C:\Corba\ACE_wrappers\ace.sln And build Ace
1536 DLL</p>
1537 <p>Copy Ace.dll in C:\bin</p>
1539 <p>2) Build gperf utility under NT</p>
1540 <p>In MS Visual C++ open
1541 C:\Corba\ACE_wrappers\apps\gperf\src\gperf.sln. Build gperf.exe</p>
1542 <p>Copy gperf.exe to C:\bin</p>
1544 <p>3) Mount Directries in Cygwin</p>
1545 <p>Click on Cygnus Solutions -&gt; Cygwin Bash Shell</p>
1546 <p>Mount following directories by using mount command.</p>
1547 <p>create respective directories first then use mount command </p>
1549 <p>e.g. Create /Corba directory then use $mount -s "C:\Corba"
1550 /Corba</p>
1552 <p>C:\Corba mount to /Corba</p>
1553 <p>C:\tornado mount to /tornado</p>
1554 <p>C:\Perl mount to /perl</p>
1555 <p>C:\Cygwin mount to /cygwin</p>
1556 <p>C:\bin mount to /bin</p>
1557 <p>C:\Program Files mount to /Program Files </p>
1559 <p>4) Build ACE in Cygwin</p>
1560 <p>$cd /Corba/ACE_wrappers/ace </p>
1561 <p>$make static_libs_only=1</p>
1562 <p>This will build your ace library libACE.a for VxWorks. If you use
1563 option shared_libs_only=1 then the build will be libACE.so. The other
1564 options are same as follows.</p>
1566 <p>5) Build TAO in Cygwin</p>
1567 <p>$cd $TAO_ROOT/tao</p>
1568 <p>$make debug=0 optimize=1 static_libs_only=1 minimum_orb=1
1569 </p>
1570 <p>for shared libs use shared_libs_only=1</p>
1572 <p>The minimum Tao does not have following components,</p>
1573 <p>Dynamic Skeleton Interface</p>
1574 <p>Dynamic Invocation Interface</p>
1575 <p>Dynamic Any</p>
1576 <p>Interceptors</p>
1577 <p>Interface Repository</p>
1578 <p>Advanced POA features</p>
1579 <p>CORBA/COM interworking</p>
1581 <p>You may play around with above options to find suitable build for
1582 your needs. For example when you give option debug=1 all the debug
1583 symbols will be created and the build will huge in size. The debug
1584 symbols are necessary when you want to debug your code.</p>
1586 <hr align="left" width="50%">
1588 <h2><a name="android">Building and Installing ACE on Android</a></h2>
1590 <ul>
1591 <li><a href="#android-target">Choosing the Target</a></li>
1592 <li><a href="#android-toolchain">Generating a Toolchain (Optional)</a></li>
1593 <li><a href="#android-building">Building</a></li>
1594 <li><a href="#android-install">Installing ACE on Android</a></li>
1595 <li><a href="#android-logging">Logging</a></li>
1596 <li><a href="#android-openssl">OpenSSL</a></li>
1597 </ul>
1599 <p>ACE can be built for Android by using the <a
1600 href="https://developer.android.com/ndk/">Android Native Development Kit
1601 (NDK)</a>. This is different than the standard way of writing Android
1602 applications in Java which run the on the Android Runtime or the older Dalvik
1603 Virtual Machine. Applications and libraries built using the NDK are native
1604 Linux applications written in C or C++ specifically compiled to run on Android
1605 systems and libraries can be included in normal Android apps. In addition,
1606 applications and libraries built using the NDK have access to Android-specific
1607 APIs much like the ones available to Java-based Android applications.
1608 </p>
1610 <p><b>NOTE: ACE requires NDK r18 or later. Building with the NDK directly requires NDK r19 or later.</b></p>
1612 <div class="boxed">
1613 <p><b>Windows Users:</b> These instructions are written for a Unix based
1614 platform like Linux, but can also be used on Windows. If you are using an
1615 virtualized Linux environment like Windows Subsystem for Linux (WSL), Docker,
1616 or a traditional VM, then you can use the Linux version of the NDK and ignore
1617 rest of this note and all the other Windows specific notes.
1618 </p>
1620 <p>If that is not the case, you should also pay attention to the notes marked
1621 with "<b>Windows Users:</b>" in addition to the rest of the instructions. In
1622 addition to the Windows version of the Android NDK, you will also need
1623 <a href="https://www.msys2.org">MSYS2 for Unix utilities that ACE needs</a>.
1624 </div>
1626 After downloading the NDK, you will have to decide on what target you want to
1627 build for, which is covered in the next section, then decide if you want to
1628 build directly using the NDK or using
1629 <a href="#android-toolchain">a generated standalone toolchain</a>. Generating a
1630 toolchain is optional and only really makes sense if you're building for just
1631 one architecture/API level pair and don't need to keep the entire NDK around.
1633 <h3><a name="android-toolchain">Choosing the Target</a></h3>
1635 <p>To build ACE for Android you need to know the specific Android target you
1636 want. The specific target is defined by two things:</p>
1638 <dl class="indent">
1639 <dt>- The minimal API level to target.</dt>
1640 <dd>A lower level means larger amount of potential users but also
1641 potentially less features. Android has <a
1642 href="https://source.android.com/setup/start/build-numbers">many API levels
1643 to target</a>. They roughly correspond to the versions of Android.
1644 </dd>
1645 <dt>- The CPU architecture to target (Also called the Application Binary
1646 Interface or ABI by the NDK documentation).</dt>
1647 <dd>In addition to ARM, Android also supports x86 and MIPS,
1648 although support for MIPS has been dropped from the NDK. <a
1649 href="https://developer.android.com/ndk/guides/abis">This is the official
1650 documentation on the ABIs</a>. These are the ABIs that ACE supports at the
1651 time of writing and must be passed to ACE as <code>android_abi</code>:
1652 <!-- Check to see if any architectures have been added or removed. If so
1653 update this list and the table below as well-->
1654 <dl id="android_abis">
1655 <dt><code>armeabi-v7a</code></dt>
1656 <dd>32-bit ARM. Builds with NEON extensions enabled by default. Include
1657 <code>android_neon := 0</code> in your <code>platform_macros.GNU</code>
1658 if you want to support processors without NEON support.</dd>
1659 <dt><code>arm64-v8a</code></dt>
1660 <dd>64-bit ARM, Sometimes referred to as <code>aarch64</code>.</dd>
1661 <dt><code>x86</code></dt>
1662 <dd>32-bit x86</dd>
1663 <dt><code>x86_64</code></dt>
1664 <dd>64-bit x86</dd>
1665 </dl>
1666 <p><b>
1667 It should be noted that starting in August 2019, the Google Play
1668 Store will require new apps to have 64-bit libraries if they have native
1669 libraries. 32-bit native libraries will still be supported but apps must
1670 also have 64-bit libraries. Look up any restrictions that may affect apps
1671 you want to publish on the Play Store, including targeted API level
1672 requirements.
1673 </b></p>
1674 </dd>
1675 </li>
1676 </dl>
1678 <h3><a name="android-toolchain">Generating a Toolchain (Optional)</a></h3>
1680 <p>To generate a toolchain, one use must use
1681 <code>build/tools/make_standalone_toolchain.py</code> in the NDK. A destination must be
1682 chosen and is denoted here as <code>$TOOLCHAIN</code>. For example, to generate a
1683 toolchain targeting 32-bit ARM Android 7.0 "Nougat" (API Level 24) and later: </p>
1684 <p class="indent">
1685 <code>./make_standalone_toolchain.py --arch arm --api 24 --install-dir $TOOLCHAIN</code>
1686 </p>
1687 <p><code>$TOOLCHAIN/bin</code> must be in your <code>$PATH</code> when building ACE and
1688 applications using ACE.</p>
1690 <p>This table shows how the <code>android_abi</code> variable and the
1691 <code>--arch</code> argument correlate:</p>
1692 <table class="indent" id="android_abi_toolchain_table">
1693 <tr>
1694 <th><code>android_abi</code></th>
1695 <th><code>--arch</code></th>
1696 </tr>
1697 <tr>
1698 <td><code>armeabi-v7a</code></td>
1699 <td><code>arm</code></td>
1700 </tr>
1701 <tr>
1702 <td><code>arm64-v8a</code></td>
1703 <td><code>arm64</code></td>
1704 </tr>
1705 <tr>
1706 <td><code>x86</code></td>
1707 <td><code>x86</code></td>
1708 </tr>
1709 <tr>
1710 <td><code>x86_64</code></td>
1711 <td><code>x86_64</code></td>
1712 </tr>
1713 </table>
1715 <div class=boxed>
1716 <p><b>Windows Users:</b>
1717 Android NDK includes Python in <code>prebuilt\windows-x86_64\bin</code> for
1718 64-bit Windows NDKs. For the example above, assuming <code>%NDK%</code> is the
1719 location of the NDK and <code>%TOOLCHAIN%</code> is the desired location of the
1720 toolchain, run this command instead:</p>
1722 <p class="indent">
1723 <code>
1724 %NDK%\prebuilt\windows-x86_64\bin\python.exe
1725 %NDK%\build\tools\make_standalone_toolchain.py
1726 --arch arm --api 24
1727 --install-dir %TOOLCHAIN%</code>
1728 </p>
1730 <p>For Windows <code>%TOOLCHAIN%\bin</code> and the location of the MSYS2
1731 utilities must be in <code>%PATH%</code> when cross compiling ACE. The default
1732 location for these would be <code>C:\msys64\usr\bin</code>.
1733 </div>
1735 <h3><a name="android-building">Building</a></h3>
1737 <ul>
1738 <li>
1739 If building TAO, build the ACE and TAO tools (<code>ace_gperf</code> and
1740 <code>tao_idl</code>) for the host. Follow the <a
1741 href="../TAO/TAO-INSTALL.html">cross compilation setup instructions provide
1742 in TAO-INSTALL.html</a>.
1743 <div class="boxed indent">
1744 <p><b>Windows Users:</b> If cross compiling TAO and the host tools were
1745 built using using Visual Studio, make sure <code>cl.exe</code> can be run
1746 from the environment when building for Android, as <code>tao_idl</code>
1747 will need to use it as a C preprocessor.
1748 </div>
1749 </li>
1750 <li>Setup the Android build<ul>
1751 <li>Create <code>ace/config.h</code>: <code>#include "ace/config-android.h"</code></li>
1752 <li>Create <code>include/makeinclude/platform_macros.GNU</code>:
1753 <ul>
1754 <li>
1755 Set <code>android_abi</code> to one of
1756 <a href="#android_abis">the options above</a>.
1757 If using a standalone toolchain this must match the
1758 <code>--arch</code> argument used according
1759 to <a href="#android_abi_toolchain_table">the table above</a>.
1760 </li>
1761 <li>If using the NDK directly, set <code>android_ndk</code> to the
1762 location of the extracted NDK and <code>android_api</code> to the API
1763 level desired.</li>
1764 <li>Set options for debug and optimization options as desired.</li>
1765 <li>If you want to compile static, add <code>static_libs_only:=1</code></li>
1766 <li>Must include <code>include $(ACE_ROOT)/include/makeinclude/platform_android.GNU</code>.</li>
1767 <li>
1768 If building TAO, set the <code>tao_idl</code> options specified in
1769 the cross compiling instructions in <code>TAO-INSTALL.html</code>
1770 </li>
1771 </ul>
1772 </ul>
1773 </li>
1774 </li>
1775 <li>Generate makefiles (if necessary).</li>
1776 <li>Build with GNU make. If using a standalone toolchain, make sure you
1777 have <code>$TOOLCHAIN/bin</code> in your <code>$PATH</code>.
1778 <div class="boxed indent"><p>
1779 <b>Windows Users:</b> If using a standalone toolchain,
1780 Make sure you have <code>%TOOLCHAIN%\bin</code>
1781 and MSYS2's <code>bin</code> in your <code>%PATH%</code> when building.
1782 If you are cross compiling TAO you will also need a preprocessor for
1783 <code>tao_idl</code> available (See Windows note above).</p>
1784 </div>
1785 </li>
1786 </ul>
1787 </p>
1789 <h3><a name="android-install">Installing ACE on Android</a></h3>
1791 <p>Native applications using the ACE library can be installed onto devices by
1792 several different methods. The files can be include as assets of Java
1793 application and can be written by the Java application into it's executable
1794 program directory. The native application can be downloaded by a Java
1795 application and written into the Java applications executable program
1796 directory. The native application can also be uploaded using the Software
1797 Development Kit's ADB tool. This method requires uploading the native
1798 application to a directory that allows execution and having any output
1799 directed to a writable directory.</p>
1801 <h3><a name="android-logging">Logging</a></h3>
1803 On Android, <code>ACE_Log_Msg</code> (and therefore <code>ACE_DEBUG</code> and
1804 <code>ACE_ERROR</code>) uses Android's logging system (aka Logcat) by default
1805 in addition to <code>stderr</code> because <code>stdout</code> and
1806 <code>stderr</code> are discarded under normal circumstances. To disable this
1807 at runtime, run:
1808 </p>
1810 <pre class="indent">
1811 ACE_LOG_MSG-&gt;clr_flags (ACE_Log_Msg::SYSLOG);
1812 </pre>
1814 <p>To disable this at compile time include these lines in <code>config.h</code>:</p>
1816 <pre class="indent">
1817 #define ACE_DEFAULT_LOG_FLAGS ACE_Log_Msg::STDERR
1818 #define ACE_DEFAULT_LOG_BACKEND_FLAGS 0
1819 </pre>
1821 <h3><a name="android-openssl">OpenSSL</a></h3>
1823 Depending on the features of ACE, TAO, or other software desired, you might need
1824 OpenSSL. On Android, OpenSSL isn't part of the NDK Library and Android
1825 preloads the system SSL library (either OpenSSL or BoringSSL) for the Java
1826 Android API. This means OpenSSL <b>MUST</b> be statically linked to avoid
1827 conflicts with the almost certianly incompatible system SSL library.
1829 To build OpenSSL for Android, please read <code>NOTES.ANDROID</code> that comes
1830 with OpenSSL's source code. The static libraries will used if the shared
1831 libraries are not found. This can be accomplished by either disabling the
1832 generation of the shared libraries by passing <code>no-shared</code> to
1833 OpenSSL's <code>Configure</code> script or just deleting the so files after
1834 building OpenSSL.
1835 </p>
1837 <hr>
1838 <h1><a name="svcsinstall">Building and Installing ACE Network Services</a></h1>
1840 The following explains how to build the ACE <a href="http://www.dre.vanderbilt.edu/~schmidt/ACE-netsvcs.html">network services</a> on <a href="#unixsvcs">UNIX</a> and <a href="#win32svcs">Win32</a>.
1842 <p></p><hr align="left" width="50%"><p>
1843 </p><h2><a name="unixsvcs">Building and Installing ACE Network Services on UNIX</a></h2>
1845 Building and installing ACE Network Services on UNIX is relatively
1846 simple (the <a href="#win32svcs">process</a> for Win32 is different).
1847 Here's what you need to do:<p>
1849 </p><ol>
1851 <li>Build and install ACE on UNIX as described <a href="#unix">earlier</a>. If ACE is built at the root of the ACE
1852 source tree (and ACE has been ported to your platform, of course) the
1853 netsvcs static and shared object libraries should be built
1854 automatically. In addition, the server driver program
1855 (<code>main</code>) contained in <a href="netsvcs/servers/main.cpp">$ACE_ROOT/netsvcs/servers/main.cpp</a>
1856 should also be compiled and ready to run.<p>
1858 </p></li><li>Set your <code>LD_LIBRARY_PATH</code> environment variable to
1859 where the binary version of the ACE netsvcs library. For
1860 example, you probably want to do something like the following<p>
1862 </p><pre><code>
1863 % setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$ACE_ROOT/lib:$LD_LIBRARY_PATH
1864 </code></pre><p>
1866 </p></li><li>By default, if the shared object library is built, the services
1867 are linked into the <code>main</code> driver program dynamically.
1868 To specify which services should be linked in and executed, edit the
1869 <a href="netsvcs/servers/svc.conf">$ACE_ROOT/netsvcs/servers/svc.conf</a>
1870 file. During your editing, you should update information (such as the
1871 default service port numbers) that affects the initialization of
1872 services in this file. Refer to the
1873 <a href="http://www.dre.vanderbilt.edu/~schmidt/ACE-papers.html#config">Service Configurator</a>
1874 documentation to learn how the configuration file is parsed and
1875 how the services are dynamically linked and executed. In
1876 addition, refer to the <a href="http://www.dre.vanderbilt.edu/~schmidt/ACE-netsvcs.html">Network
1877 Services</a> documentation to learn more about how to configure
1878 each network service.<p>
1880 </p></li><li>If you only want to link the services statically, simply remove
1881 or rename the svc.conf file.<p>
1882 </p></li></ol>
1884 <p></p><hr align="left" width="50%"><p>
1885 </p><h2><a name="win32svcs">Building and Installing ACE Network Services on Win32</a></h2>
1887 Once again, there are supplied project for Visual C++ 7.1 or later for
1888 the Network Services.<p>
1890 </p><hr>
1891 <h1><a name="sslinstall">Building and Installing the ACE_SSL Library</a></h1>
1893 <p>The first step for all platforms is to build and install the
1894 <a href="http://www.openssl.org/">OpenSSL</a> distribution. The
1895 ACE_SSL library must then be built according to the instructions
1896 below.</p>
1897 <h2>Unix</h2>
1898 <ol>
1899 <li>Make sure the OpenSSL header file directory is in your compiler's
1900 include path, and that OpenSSL libraries are in your library link/load
1901 path (e.g. <code>LD_LIBRARY_PATH</code>). If you
1902 installed OpenSSL into a set of directories unknown by the compiler,
1903 set the <code>SSL_ROOT</code> environment variable to point to the
1904 top level directory of your OpenSSL distribution, i.e. the one
1905 containing OpenSSL's <code>include</code> and <code>lib</code>
1906 directories.</li>
1907 <li>Build ACE as described above. When building ACE, add
1908 <code>ssl=1</code>
1909 to your <code>make</code>
1910 command line invocation, or add it to your
1911 <code>platform_macros.GNU</code> file.</li>
1912 <li>Build the ACE_SSL library in the <tt>$ACE_ROOT/ace/SSL</tt>
1913 directory. The <code>ACE_ROOT</code> environment variable should be set
1914 prior to this point.</li>
1915 </ol>
1916 <h2>Microsoft Visual Studio</h2>
1917 <ol>
1918 <li>Set the <code>SSL_ROOT</code> environment variable to the location
1919 of the directory containing the OpenSSL <code>inc32</code> and
1920 <code>out32dll</code> directories.
1921 <li>Add <code>ssl=1</code> to your MPC
1922 <code>$ACE_ROOT/bin/MakeProjectCreator/config/default.features</code>
1923 or <code>$ACE_ROOT/local.features</code> file.
1924 <li>At the moment you are using OpenSSL v1.1 or
1925 newer also add <code>openssl11=1</code> to your MPC
1926 <code>$ACE_ROOT/bin/MakeProjectCreator/config/default.features</code>
1927 or <code>$ACE_ROOT/local.features</code> file.
1928 <li>Re-run MPC to add
1929 support for building the ACE_SSL library to your MSVC++
1930 workspaces and projects.
1931 <li>Open the <code>ACE.sln</code> solution, and refer to the ACE build
1932 and installation instructions above for details on creating a
1933 <code>config.h</code> configuration header for this platform. Once
1934 the <code>config.h</code> file has been created, build the
1935 <code>ACE_SSL</code> project.</li>
1936 </ol>
1937 <h2>Embarcadero C++</h2>
1938 <p>Support for building ACE's ACE_SSL library and TAO's SSLIOP
1939 pluggable protocol with Embarcadero C++ does exist.
1940 <ol>
1941 <li>Set the <code>SSL_ROOT</code> environment variable to the location
1942 of the directory containing the OpenSSL <code>inc32</code> and
1943 <code>out32</code> directories.
1944 <li>Add <code>ssl=1</code> to your MPC
1945 <code>$ACE_ROOT/bin/MakeProjectCreator/config/default.features</code>
1946 or <code>$ACE_ROOT/local.features</code> file, and re-run MPC to add
1947 support for building the ACE_SSL library to your Embarcadero C++ makefiles.
1948 <li>Build ACE and TAO.
1949 </ol>
1950 </p>
1952 <hr><p>
1953 </p><h1><a name="guireactor_install">Building and Using GUI Reactors Libraries</a></h1>
1954 There is a general method for building and using <code>ACE_Reactors</code> for various GUI
1955 libraries.
1956 <h2> Building GUI Reactor Library </h2>
1957 <ol>
1958 <li>Try to generate build files using MPC. Inspect the output of MPC to find out which features are
1959 necessary to build given reactor. Add these features to
1960 <code>ACE_wrappers/bin/MakeProjectCreator/*.features</code> file, or pass them directly to MPC
1961 using <code>-features</code> command line option. For example, for <code>FlReactor</code> the procedure
1962 consists of five steps
1963 <ol>
1964 <li> In the first pass one gets that <code>x11</code> (X11 libraries) is missing.<br>
1965 <code>$ mwc.pl -type gnuace
1966 Skipping ACE_FlReactor (ace_flreactor.mpc), it requires x11.
1967 </code></li>
1968 Ensure that <code>X11</code> libraries are installed, then pass <code>x11=1</code> feature to MPC.
1969 <li>In the second pass one gets that <code>gl</code> (OpenGL library) is missing.<br>
1970 <code>$ mwc.pl -type gnuace -features x11=1 ace.mwc
1971 Skipping ACE_FlReactor (ace_flreactor.mpc), it requires gl.
1972 </code></li>
1973 Ensure that <code>OpenGL</code> libraries are installed, then pass <code>gl=1</code> feature to MPC.
1974 <li>In the third pass one gets that <code>fl</code> (Fast Light Toolkit) is missing.<br>
1975 <code>$ mwc.pl -type gnuace -features x11=1,gl=1 ace.mwc
1976 Skipping ACE_FlReactor (ace_flreactor.mpc), it requires fl.
1977 </code></li>
1978 Ensure that <code>Fast Light Toolkit</code> libraries are installed, then pass <code>fl=1</code>
1979 feature to MPC.
1980 <li>In the fourth pass one gets that <code>ace_flreactor</code> feature is missing<br>
1981 <code>$ mwc.pl -type gnuace -features x11=1,gl=1,fl=1 ace.mwc
1982 Skipping ACE_FlReactor (ace_flreactor.mpc), it requires ace_flreactor.
1983 </code></li>
1984 Allow MPC to generate makefiles for <code>FlReactor</code> by setting <code>ace_flreactor=1</code> feature.
1985 <li>In the last pass one obtains files for building <code>FlReactor</code>.<br>
1986 <code>$ mwc.pl -type gnuace -features x11=1,gl=1,fl=1,ace_flreactor=1 ace.mwc
1987 </code></li>
1988 </ol>
1989 Currently to simplify MPC generation some of features are turned on by default in
1990 <code>ACE_wrappers/bin/MakeProjectCreator/global.features</code>. For examples to generate
1991 files related with Fl one has to provide only fl=1 feature. To obtain a more fine grained controll
1992 over MPC generation process one may modify <code>ACE_wrappers/bin/MakeProjectCreator/*.features</code>
1993 files.
1994 </li>
1995 <li> Required build files are generated now, it is enough then to invoke build tool.
1996 For example for under <code>MPC::gnuace</code> one has to call
1997 <code>make fl=1</code>. For <code>MPC::vc7</code> target all features are
1998 encoded in generated project files, thus it is enough to compile ACE using MSVC.
1999 </li>
2000 </ol>
2001 The build procedure leads to a specific GUI Reactor library. For example, for
2002 <code>Qt</code> and <code>Linux </code> one gets <code>libQtReactor.so</code>, while for
2003 <code>Windows</code> the results are shared <code>QtReactor.dll</code> and import
2004 <code>QtReactor.lib</code> libraries or their variants depending on build options.
2005 When compiling TAO also GUI related libraries are created like <code>libTAO_QtResource.so</code>.
2006 <h2> Using GUI Reactor Library </h2>
2007 Here one has at least three use cases:
2008 <ol>
2009 <li><b>Applications with their own build system.</b>
2010 To use ACE support for GUI one has to include specific GUI headers and
2011 link with specific <code>ACE_[GUI]Reactor</code> library. When using TAO support for GUI one has
2012 also to link with specific <code>TAO_[GUI]Resource</code> library.</li>
2013 <li><b>Applications with build system using MPC.</b>
2014 In general, it is better to create specific base projects for using ACE GUI support in such application.
2015 Base projects provided by ACE <code>ACE_wrappers/bin/MakeProjectCreator/[ace,tao]_[gui][reactor,resource].mpb</code>
2016 may be an examples of how to do this.</li>
2017 <li><b>Internal ACE applications like tests or examples.</b>
2018 MPC project for internal ACE application using GUI support should be derived from
2019 <code>ace_[gui]reactor.mpb</code> base projects. To employ TAO support for GUI one should derive
2020 the project from <code>tao_[gui]resource.mpb</code> These base projects ensure that all necessary libraries
2021 are linked to the application, specifies features necessary to build a project and moreover impose a
2022 build order consistant with ACE. For example, the application project using <code>XtReactor</code> should be
2023 derived from <code>ace_xtreactor.mpb</code>.</li>
2024 </ol>
2025 <h2>Notes on specific GUI Reactors</h2>
2026 <ul>
2027 <li> <code>QtReactor</code></li>
2028 The build is controlled by <code>ace_qtreactor</code> [1 by default] feature.
2029 To build this reactor one has to provide feature <code>qt</code> [0 by default] (Qt library). Moreover,
2030 it is assumed that <code>Qt</code> was installed in a standard way
2031 and <code>QTDIR</code> points to <code>Qt</code> installation folder. To build TAO
2032 support for <code>Qt</code> one should use <code>tao_qtresource</code> [1 by default] feature.
2033 <li> <code>XtReactor</code></li>
2034 The build is controlled by <code>ace_xtreactor</code> [1 by default] feature.
2035 To build this reactor one has to provide the following features: <code>x11</code> [1 by default]
2036 (X11 libraries) and <code>xt</code> [1 by default] (X11 Toolkit).
2037 Moreover, some examples and tests related with <code>XtReactor</code>
2038 needs additionall features namely either <code>motif</code> [0 by default] (Motif/Lesstif libraries) or
2039 <code>athena</code> [0 by default] (Athena widgets). To build TAO
2040 support for <code>xt</code> one should use <code>tao_xtresource
2041 </code> [1 by default] feature.
2042 <li> <code>TkReactor</code></li>
2043 The is controlled by <code>ace_tkreactor</code> [1 by default] feature. To build this reactor one has to provide
2044 <code>tk</code> [0 by default] (Tcl libraries) feature. To build TAO
2045 support for <code>Tk</code> one should use <code>tao_tkresource</code> [1 by default] feature.
2046 <li> <code>FlReactor</code></li>
2047 The build is controlled by <code>ace_flreactor</code> [1 by default] feature.
2048 To build this reactor one has to provide the following features: <code>x11</code>
2049 [1 by default] (X11 libraries),
2050 <code>gl</code> [1 by default] (OpenGl) and <code>fl</code>
2051 [0 by default] (Fast Light Toolkit). To build TAO
2052 support for <code>Fl</code> one should use <code>tao_flresource</code> [1 by default] feature.
2053 <strong>MS Windows:</strong> The paths to <code>fltkdll</code> and
2054 <code>OpenGL32</code> libraries, as well as <code>fltk</code> header files
2055 should be setup manually for succesfull compilation. Obviosuly,
2056 <code>x11</code>switch is ignored for this platform.</li>
2057 </ul>
2059 <hr>
2060 <h1><a name="installnotes">Installation Notes</a></h1>
2062 <ul>
2063 <li><b>Windows (Windows NT, 2000, XP, 2003, etc., and Windows '9x/ME) </b><p>
2065 Please see the <a href="#NonStaticObjectManager">Non-static
2066 ACE_Object_Manager</a> discussion below.</p><p>
2068 </p></li><li><b>Windows CE</b><p>
2070 Take a look at (<a href="docs/CE-status.txt">CE-status.txt</a>) for
2071 up-to-date information about ACE on Windows CE and Windows Mobile.
2073 </p></li><li><b> Solaris 7, 8, 9, and 10 using Sun ONE Studio 8 (C++ 5.5)
2074 or higher, Centerline C++ 2.x, GNU gcc 2.95 and
2075 later.</b><p>
2077 All the source code and tests should build and run without any
2078 problems on Solaris 7, 8, and 9 platforms using the above
2079 Sun C++ compilers.
2081 There are likely to be build problems with older versions or
2082 different patchlevels of Sun C++. Likewise, on
2083 Solaris with g++ you may need to use GNU as instead of
2084 /usr/ccs/bin/as, if you want -gstabs+ and -pipe support.
2086 Thanks to Susan Liebeskind &lt;shl@janis.gtri.gatech.edu&gt;
2087 for providing the following useful information:</p><p>
2089 By default, ACE uses both the Solaris and POSIX thread
2090 interface. To disable use of the Solaris thread interface, add
2091 <code>-D_POSIX_PTHREAD_SEMANTICS</code> to the
2092 <code>CFLAGS</code> in your
2093 <code>$(ACE_ROOT)/include/makeinclude/platform_macros.GNU</code>.
2094 See the Solaris Intro (3) man page for more information.</p><p>
2096 To disable ACE thread support completely, build with the
2097 <code>threads=0</code> make flag. See the <a href="#flags">Makefile Flags</a> section below for more
2098 information on make flags.</p><p>
2100 If you use g++ on Solaris 7, you might need to rebuild
2101 it on a SunOS 5.7 (Solaris 7) host. Some versions of g++
2102 provide replacements for system header files. The
2103 replacements on older SunOS systems are not compatible with the
2104 SunOS 5.7 system headers. </P>
2106 </li><li><b>AIX</b><p>
2108 ACE is currently supported on AIX 5.2 and higher using IBM's
2109 Visual Age C++ 6 and XL C++ 7 compilers as well as g++ 3.2.</p><p>
2111 The <code>ace/config-aix-5.x.h</code> file is recommended for all
2112 compilers on all AIX 5L versions. The Asynchronous I/O functionality
2113 is disabled by default because its use requires the system administrator
2114 to explicitly enable it in the kernel using SMIT. If this has been
2115 done and you want to enable asynchronous I/O support in ACE, add:
2116 <code>#define ACE_HAS_AIO_CALLS</code> to your <code>config.h</code>
2117 file before including <code>ace/config-aix-5.x.h</code>.</p><p>
2119 The Visual Age 6.0.0.3 and 6.0.0.4 do have some bugs that makes
2120 them unusable for building TAO. TAO has been tested with 6.0.0.12 and
2121 had no problems with that version.</p><p>
2123 For your <code>platform_macros.GNU</code> file, you should use
2124 <code>platform_aix_ibm.GNU</code> when building ACE with any of the
2125 IBM compilers and <code>platform_aix_g++.GNU</code> when building ACE
2126 with g++.</p><p>
2128 BTW, here's a technique from Rob Jordan &lt;<a href="mailto:jordan@hursley.ibm.com">jordan@hursley.ibm.com</a>&gt;
2129 that can reduce the size of the ACE libraries by about one
2130 third, and can also be applied to applications. It works by
2131 optimising the sharing of template functions, which are created
2132 in an "unusual" way under AIX. It also speeds up
2133 compilation.</p><p>
2135 Here's how to optimise the ACE library generation:</p><p>
2137 Look at the <a href="ace/GNUmakefile.ACE">ace/GNUmakefile.ACE</a>
2138 in <code>$ACE_ROOT/ace</code>. Create a file called
2139 <code>ACE_All_Src.cpp</code>, and add a line to #include
2140 each of the source files
2141 listed under <code>FILES=</code> in the GNUmakefile. Create a
2142 file called <code>ACE_All_Tmp.h</code>
2143 and add a line to #include each of the .h files listed under
2144 <code>TEMPLATE_FILES=</code> in the GNUmakefile. Now update the
2145 GNUmakefile so that
2146 <code>FILES=ACE_All_Src</code> and
2147 <code>TEMPLATE_FILES=ACE_All_Tmp</code>.</p><p>
2149 </p></li><li><b><a name="Linux">Linux</a></b><p>
2151 ACE has been ported to Linux on
2152 Intel, PowerPC platforms. If you use a RedHat 5.x
2153 distribution, it's best to use RedHat 5.1 or later. ACE works
2154 without any modifications on RedHat 5.1 and later, and on
2155 Debian 2.1 on Intel. Use the
2156 <code>platform_linux.GNU</code> and <code>ace/config-linux.h</code>
2157 in your <code>platform_macros.GNU</code> and
2158 <code>config.h</code> files, respectively. The same
2159 files can be used on PowerPC, with LinuxPPC
2160 1999 (R5), with glibc 2.1.1.</p><p>
2162 If you run out of memory, it's easy to add virtual memory on
2163 Linux. Please see the <code>mkswap</code> man page. You'll
2164 need at least 256 to 300 Mb of virtual memory (RAM + swap) to
2165 compile all of ACE+TAO. The <a href="#resource_requirements">System
2166 Resource Requirements section</a> has some suggestions on how
2167 to reduce the memory requirement.</p><p>
2169 The glibc 2.0 dynamic loader isn't thread safe. If you want to
2170 use the Invocation API you'll have to set
2171 <code>LD_BIND_NOW=true</code>. If you want to use
2172 <code>dlopen</code>, you should use <code>RTLD_NOW</code>. The
2173 dynamic loader in glibc 2.1 is thread safe.</p><p>
2175 <strong>NOTE:</strong> The TAO NameService uses IP multicasting
2176 by default, though it is not required. IP multicast on Linux
2177 requires the following:</p><p>
2179 </p><ul>
2180 <li>Enable IP multicast in the Linux kernel. It is enabled in
2181 the default RedHat 5.1 kernel. In older distributions, you
2182 can enable it by rebuilding your kernel with CONFIG_IP_MULTICAST
2183 enabled.<p>
2184 </p></li><li>Enable IP multicast in ACE. It is enabled by default in
2185 <code>ace/config-linux.h</code>. If you don't use
2186 IP multicast, add <code>#define ACE_HAS_IP_MULTICAST 0</code>
2187 to your <code>ace/config.h</code> before building ACE.<p>
2188 </p></li><li>There must be a network interface that is up and supports
2189 multicast. If you have linuxconf, it's easiest to use that
2190 to add a network route for multicast (224.0.0.0) on one of
2191 your network interfaces, such as <code>eth0</code>. If
2192 you don't have or use linuxconf, try adding a multicast
2193 routing table entry using something like this:<p>
2194 </p><pre> <code># route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0</code>
2195 </pre><p>
2196 </p></li></ul>
2198 Some of the ACE tests fail on older, pre-glibc2 Linux platforms,
2199 such as RedHat 4.2. The problems are with threads and
2200 thread-specific storage.</p><p>
2202 </p></li><li><b>SCO UNIX</b><p>
2204 ACE has been ported to SCO UNIX using the GNU g++ 2.7.2
2205 compiler. Arturo Montes &lt;<a href="mailto:mitosys@colomsat.net.co">mitosys@colomsat.net.co</a>&gt;
2206 maintains this code. In addition, he also maintains a version
2207 of <a href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/FSU-threads.tar.gz">FSU pthreads</a>.</p><p>
2209 </p></li><li><b>SGI IRIX 5.x and 6.x</b><p>
2211 ACE used to build fine using the SGI C++ and GNU GCC compilers
2212 for IRIX 5.x. It has been ported to IRIX 6.x using the SGI
2213 MipsPro 7.1 C++ compiler; be aware that in IRIX 6.2 there is a
2214 number of patches that have to be installed and exceptions
2215 appear to fail with the O32 ABI. Please check the config files
2216 for the details.</p><p>
2218 </p></li><li><b>OSF/1 3.2 and 4.0 (a.k.a. Digital UNIX 4.0)</b> <p>
2220 The Digital UNIX C++ 5.4 through 5.7 compilers have problems
2221 with ACE's templates. They compile the lib and most of the test
2222 programs, although they warn about template usage. Most tests
2223 run, some dump core. If you use a 5.x version of cxx, be sure
2224 to set the CXX_VER variable to CXX_5, either on your make
2225 command line or in an environment variable. The ACE Makefiles
2226 assume by default that the cxx version is 6.x or later.</p><p>
2228 CXX 6.0 and 6.1 are much improved over 5.x: V6.0-020, V6.1-025,
2229 and later build all of ACE cleanly. All of the tests in
2230 $(ACE_ROOT)/tests run successfully with CXX 6.0 and CXX 6.1.
2231 Please note that problems have been reported with some versions
2232 of CXX 6.1, notably versions -021 and earlier. It's best to use
2233 V6.1-022 or later.</p><p>
2235 NOTE: if you use Digital UNIX 4.0f or later, you <strong>must</strong>
2236 use <code>ace/config-tru64.h</code> instead of
2237 <code>ace/config-osf1-4.0.h</code>. <code>ace/config-tru64.h</code>
2238 can be used for all supported compilers on any version of
2239 Digital UNIX after and include 4.0. And, with 4.0f and later when
2240 using Digital CXX, you <strong>must</strong> use
2241 <code>include/makeinclude/platform_tru64_cxx.GNU</code> instead of
2242 <code>include/makeinclude/platform_osf1_4.0.GNU</code>.</p>
2244 </li><li><b> FreeBSD </b><p>
2246 FreeBSD is a fast evolving platform. However, it has the
2247 advantage of having standard releases. At this moment, ACE is
2248 only perodically tested against -stable (3.1R) and we rely a lot
2249 on FreeBSD users' feedbacks. </p><p>
2251 Notice that on older FreeBSD, <code>ld.so</code> only looks for
2252 so libraries with <b>version number</b> appended. ACE makefiles
2253 create symlinks for most shared libraries if
2254 <code>versioned_so</code> is defined to 1 in
2255 <code>$ACE_ROOT/ace</code> with appropriate ACE version.
2256 However, this does not work for libACE.so itself so you have to
2257 create it manually (If you figure out how to do this, please let
2258 us know) like this: </p><p>
2260 <code>ln -sf $ACE_ROOT/ace/libACE.so $ACE_ROOT/ace/libACE.so.4.5</code></p><p>
2262 On newer FreeBSD (3.0 or later,) this is no longer necessary.</p><p>
2264 </p></li><li><b>NetBSD</b><p>
2266 Like older FreeBSD, NetBSD's <code>ld.so</code> also requires
2267 versioned .so files.</p><p>
2269 </p></li><li><b>OpenBSD</b><p>
2271 ACE has been ported to OpenBSD 3.1 and GNU g++ 2.95.3.</p><p>
2273 As with FreeBSD and NetBSD, OpenBSD requires versioned .so
2274 files. This is currently handled by the build files and no
2275 additional work is needed.</p><p>
2277 ACE has been ported to OpenBSD with and without pthreads
2278 enabled. When using pthreads, though, C++ exceptions must be
2279 disabled. This is a known problem with the current release of
2280 OpenBSD (see www.openbsd.org, bug #1750). ACE emulated
2281 exceptions work fine.</p><p>
2283 Compiling TAO may require the user data segment size
2284 restrictions and possibly other options to be increased. This
2285 is done by modifying the default user class in /etc/login.conf
2286 or by adding a new class and modifying the master passwer file
2287 accordingly.</p><p>
2289 </p></li><li><b> UnixWare </b> <p>
2291 Steve Huston &lt;<a href="mailto:shuston@riverace.com">shuston@riverace.com</a>&gt;
2292 has ported ACE to work with UnixWare 2.01 and g++.</p><p>
2294 Ganesh Pai &lt;<a href="mailto:gpai@voicetek.com">gpai@voicetek.com</a>&gt;
2295 subsequently did the port for version 2.1.2, also with g++.</p><p>
2297 Phil Mesnier &lt;<a href="mailto:mesnier_p@ociweb.com">
2298 mesnier_p@ociweb.com</a>&gt; updated the port to support
2299 UnixWare 7.1.0, with help from Michael Meissnitzer
2300 &lt;<a href="mailto:michael.meissnitzer@siemens.at">
2301 michael.meissnitzer@siemens.at</a>&gt;, Christian Klepp &lt;
2302 <a href="mailto:christian.klepp@siemens.at">christian.klepp@siemens.at
2303 </a>&gt; and Engelbert Staller &lt;<a href="mailto:engelbert.staller@siemens.at">
2304 engelbert.staller@siemens.at</a>&gt;
2305 Building ACE (and TAO) on Unixware 7.1.0 requires a very specific
2306 g++ build environment. In particular, you must build and install
2307 g++ 2.95.2, along with binutils 2.9.1. The order (and the declaration
2308 of configuration) is extremely important. Using the gcc compiler
2309 provided on the Skunkware CD on a pentium system, here is the recipe
2310 I used to build a working environment (as root):<br>
2311 </p><pre> mkdir /usr/local/newgnu
2312 &lt; ftp and untar binutils-2.9.1 &gt;
2313 &lt; ftp and untar gcc-2.95.2 &gt;
2314 mkdir -p build/binutils build/gcc
2315 cd build/binutils
2316 ../../binutils-2.9.1/configure i386-sco-sysv4
2317 gmake # takes a long time
2318 gmake install # this creates /usr/local/i386-sco-sysv4/...
2319 mkdir /usr/local/i486-pc-sysv5/bin
2320 cd /usr/local/i486-pc-sysv5/bin
2321 for a in /usr/local/i386-sco-sysv4/bin/*; do ln -s $a .; done
2322 #links all the newly installed utilities
2324 cd /usr/local/newgnu/build/gcc
2325 ../../gcc-2.95.2/configure --with-gnu-as --with-gnu-ld
2326 gmake bootstrap # takes a long time
2327 gmake install
2328 mkdir /usr/local/i586-UnixWare7.1.0-sysv5/bin
2329 for a in /usr/local/i386-sco-sysv4/bin/*; do ln -s $a .; done
2330 </pre>
2331 Once done, ACE and TAO will successfully build and link.<p>
2333 </p></li><li><b><a name="LynxOS">LynxOS</a></b><p>
2335 ACE builds and runs properly on LynxOS 4.0 for Intel
2336 and PowerPC targets. LynxOS 2.x and 3.x are no longer supported.
2338 If you run out of memory on LynxOS, these might help:</p><p>
2340 </p><ul>
2341 <li>Increase the limits in <code>/etc/starttab</code>,
2342 then reboot system. We use these limits:
2343 <pre># Data, stack, and core file limits (in Kbytes)
2344 80000
2345 16000
2346 102400</pre><p>
2347 </p></li><li>Enable or expand virtual memory, with something like:
2348 <pre># mkcontig /swap 320
2349 # prio 17 vmstart /swap</pre>
2350 See the <code>mkcontig</code> and <code>vmstart</code>
2351 man pages, and <code>/bin/rc</code>.<p>
2352 </p></li></ul>
2354 Please see the comments in the
2355 <a href="include/makeinclude/platform_lynxos.GNU">ACE
2356 platform_lynxos.GNU file</a> for information on, and an
2357 example of, tailoring for your particular platform.<p>
2359 NOTE: if you want to use IP multicast on LynxOS, be sure to add
2360 this line to your <code>/net/rc.network</code>, and reboot:</p><p>
2361 </p><pre><code>
2362 /bin/route add "224.0.0.0" "$my_name"
2363 </code></pre>
2365 </li><li><strong>VxWorks</strong><p>
2367 David Levine has
2368 ported ACE to VxWorks 5.2/5.3/5.3.1/5.4 with the GreenHills
2369 1.8.8/1.8.9, g++ and diab compilers that are distributed with
2370 VxWorks/Tornado. It is not possible to use VxWorks 5.4
2371 and earlier with ACE anymore because the compilers delivered with
2372 5.4 and earlier don't support the C++ features ACE needs.</p><p>
2374 At this moment <a href="https://www.remedy.nl">Remedy IT</a> is upgrading
2375 and stabilizing ACE/TAO support for Tornado 2.2/VxWorks 5.5.1.
2376 Since the existing support for previous VxWorks version has been unsupported
2377 and broken for some time and most (potential) users seem to have upgraded to
2378 VxWorks 5.5.1 no backporting effort is done. See also <a href="#vxworks">here</a>.
2379 </p><p>
2381 Tornado 2.2/VxWorks 5.5.1 support IP multicast. That is not enabled
2382 by default in ACE for VxWorks, because it depends on your
2383 kernel configuration. To enable it, add
2384 <code>#define ACE_HAS_IP_MULTICAST</code> to your
2385 <code>ace/config.h</code>.</p><p>
2387 NOTE: In order for the ACE Broadcast and Multicast tests to work the VxWorks kernel
2388 should receive the packages it sends out locally. By default this is not supported.
2389 To enable this behaviour you need to include the IFF_SIMPLEX flag for your required
2390 NIC driver. See the following Windriver <a href="https://secure.windriver.com/cgi-bin/windsurf/techtips/public/viewSum.cgi?4542">SPR 4542</a>
2391 for more information.</p><p>
2393 In addition to all of the other benefits of ACE, it helps work
2394 around some deficiencies with VxWorks. The problems are:</p>
2397 </p><ol>
2398 <li>The program entry point cannot be called "main" with g++. ACE
2399 renames it to "ace_main" (configurable via ACE_MAIN) on VxWorks.
2400 While this may seem trivial, it is important with legacy code.
2401 ACE itself ran into this problem.<p>
2403 </p></li><li>argc/argv isn't used with VxWorks entry points. ACE provides
2404 a wrapper function that transparently converts shell command
2405 line arguments to argc/argv form. See <a href="#spa">below</a>
2406 for details.<p>
2408 </p></li></ol>
2410 Please note that ACE uses one of the spare fields in the Wind
2411 River task control block, spare4, for thread-specific storage.
2412 This field is specified in only one place, in ace/OS_NS_Thread.inl, so it
2413 can easily be changed to one of the other spare fields, if
2414 necessary.</p><p>
2416 ACE destroys dynamically
2417 allocated singletons in the ACE library. But, they may not
2418 properly destroy some static objects. If you have trouble
2419 running a program multiple times, it may be necessary to unload
2420 the module, using unld, and reload it between runs.
2421 Alternatively, you could try calling <code>cplusDtors</code> and
2422 then <code>cplusCtors</code> between runs.</p><p>
2424 </p></li><li><b>MVS OpenEdition</b> <p>
2426 All of ACE has been ported to OpenEdition by Chuck Gehr &lt;<a href="mailto:gehr@sweng.stortek.com">gehr@sweng.stortek.com</a>&gt;.
2427 The ACE library, all the tests and most of the examples and apps
2428 build clean. There are still some problems that need to be
2429 ironed out:</p><p>
2431 MVS does not support the dynamic linking dl...() calls that the
2432 Service Configurator uses to dynamically link services at run
2433 time. As a result, all the examples and apps that use a svc.conf
2434 file (for dynamically configuring service objects) do not work,
2435 however, most of these apps can be built/run statically. Also,
2436 the Svc_Conf_l.cpp and Svc_Conf_y.cpp files are generated using
2437 flex and yacc on a ascii (not ebcdic) machine and as a result
2438 they don't work very well with ebcdic svc.conf files. We should
2439 be able to regenerate these files on MVS but MVS doesn't have
2440 flex. This is something that needs to be done.</p><p>
2442 Some of the tests do not execute properly. This is a minority
2443 and over time the goal is to get to 100%.</p><p>
2445 The make scheme for some of the apps still doesn't work
2446 perfectly on MVS. This is mainly due to the way shared
2447 libraries are handled on MVS. See <a href="#mvs">additional
2448 build tips for MVS</a> for more on this.</p><p>
2450 </p></li><li><strong>QNX Neutrino</strong><p>
2452 ACE has been ported to <a href="http://www.qnx.com/products/os/neutrino.html">QNX Neutrino
2453 2.0</a>. We cross-compile for Neutrino on a QNX4 host using g++
2454 2.8.1, using the <a href="ace/config-qnx-neutrino.h">ace/config-qnx-neutrino.h</a>
2455 and <a href="include/makeinclude/platform_qnx_neutrino.GNU">include/makeinclude/platform_qnx_neutrino.GNU</a>
2456 configuration files. Many of the ACE tests succeed, though some
2457 fail. As the porting effort progresses, we hope to eliminate
2458 these failures. If you know of fixes, please send them to
2459 us.</p><p>
2460 </p></li><li><strong>QNX RTP</strong><p>
2462 ACE has been ported to <a href="http://get.qnx.com/">QNX RTP
2463 </a>. We compile for QNX RTP using the GCC compiler shipped with the
2464 distribution, using the <a href="ace/config-qnx-rtp.h">ace/config-qnx-rtp.h</a>
2465 and <a href="include/makeinclude/platform_qnx_rtp_gcc.GNU">include/makeinclude/platform_qnx_rtp_gcc.GNU</a>
2466 configuration files.
2467 Many of the ACE tests succeed, though some
2468 fail. As the porting effort progresses, we hope to eliminate
2469 these failures. If you know of fixes, please send them to
2470 us.</p><p>
2471 <strong><blink><font color="#ff0000">WARNING:</font></blink></strong>
2472 Under the current version of QNX RTP ACE fails if compiled with
2473 inline=0 . </p><p>
2475 </p></li><li><strong><a name="rtems">RTEMS</a></strong><p>
2477 The support for RTEMS has been revived from version x.5.4. This version
2478 was the first version that build again out of the box on RTEMS. Compilation
2479 and testing was done for RTEMS with and without networking support. The
2480 ACE GNU makefiles do automatically detect whether networking support
2481 is available or not.
2483 Besides the standard config.h/platform_macros.GNU file you will need
2484 to set <code>RTEMS_MAKEFILE_PATH</code> to point to the location
2485 of your RTEMS installation, see below for an example.</p>
2486 <p><code>export RTEMS_MAKEFILE_PATH=/opt/rtems/CPU-rtems/BSP</code></p>
2488 When building without network support you will need the ace_for_tao
2489 subsetting functionality enabled. For this add <code>ace_for_tao = 1</code>
2490 to your <code>bin/MakeProjectCreator/config</code> file and regenerate the
2491 GNU makefiles as described <a href="#power">here</a>.</p><p>
2493 </p></li><li><strong>PharLap ETS</strong><p>
2495 ACE has been ported to Ardence's
2496 <a href="http://www.ardence.com/embedded/products.aspx?ID=71">PharLap ETS</a>
2497 version 13. The port was originally done for Pharlap 9.1 and MSVC 6,
2498 but has been updated to Pharlap ETS 13 with Visual Studio .NET 2003
2499 (VC7.1).</p><p> To build for PharLap, you'll need to use MPC to
2500 generate .sln/.vcproj files with the ETS configurations. For example:
2501 <pre>
2502 cd \ace\ACE_wrappers
2503 perl bin/mwc.pl -type vc71 -relative ACE_ROOT=C:/ace/ACE_wrappers -relative TAO_ROOT=C:/ace/ACE_wrappers/TAO -value_template configurations='"ETS Debug"' -value_template configurations+='"ETS Release"' -name_modifier *_ETS TAO_ACE.mwc
2504 </pre>
2505 That command will generate the same .sln and .vproj files as for
2506 regular Windows builds with VC7.1, but they'll have names with an
2507 <code>_ETS</code> suffix and will include the "ETS Debug" and
2508 "ETS Release" configurations.</p><p>
2509 After generating the needed VC7.1 files, use the ace/config-pharlap.h
2510 configuration file, and the instructions
2511 for building on Windows. Building the ACE library is the same as
2512 for regular Windows platforms, except you choose one of the PharLap
2513 ETS configurations to build within Visual Studio.
2514 For an example of how to build binaries, see the tests directory.
2515 The tests_pharlap_msvc.lnk file is a LinkLoc commands file that the
2516 ACE tests are built with. It is likely that local sites may need
2517 to adjust this file for their target environment.
2518 </p><p>
2519 When executing programs on the target system, it is possible that not
2520 all of the VC++ support DLLs are resident on the target. In particular,
2521 the debug-supporting DLLs may not be present. If you require these, be
2522 sure to add those needed. For example, on the standard LabVIEW RT 8.2
2523 distribution using Pharlap ETS, the following DLLs must be copied to
2524 the target before being able to run Debug programs:
2525 <ul>
2526 <li>msvcp71d.dll</li>
2527 <li>msvcr71d.dll</li>
2528 </ul>
2529 </p><p>
2530 <note>To build ACE for National Instruments' LabVIEW RT, use
2531 the Pharlap ETS information above, but add the following line to your
2532 config.h file:
2533 <pre>
2534 #define ACE_PHARLAP_LABVIEW_RT
2535 </pre>
2536 This setting makes the necessary adjustments for LabVIEW's implementation
2537 of Pharlap ETS.</note>
2539 <note>By default, the ACE tests log their output/results to the
2540 system console on Pharlap ETS. To change this behavior and make the
2541 test output log to a file in the <code>log</code> directory under the
2542 current working directory while executing, add the following line to
2543 your config.h file:
2544 <pre>
2545 #define ACE_PHARLAP_TESTLOG_TO_FILE
2546 </pre>
2547 This setting has no affect on TAO tests which always write test output
2548 to stdout.
2549 </note>
2551 </p></li><li><strong>Mac OS X (10.2.x)</strong><p>
2553 </p><p>ACE builds and runs on Mac OS X 10.2.x, but the following are
2554 needed to build it:</p>
2556 <p>1. The latest version of the Apple Developer Tools
2557 (December 2002)</p>
2558 <p>2. The dlcompat library (obtained either through Fink or
2559 SourceForge)</p>
2561 <p>When creating $ACE_ROOT/ace/config.h for Mac OS X, you need
2562 to add the following if you obtained dlcompat via Fink:</p>
2564 <p>#define ACE_NEEDS_DL_UNDERSCORE</p>
2566 <p>You'll also need to do:</p>
2568 <p>setenv DYLD_LIBRARY_PATH $ACE_ROOT/ace:$ACE_ROOT/lib</p>
2569 <p>setenv MACOSX_DEPLOYMENT_TARGET 10.2</p>
2571 <p>Currently, all ACE tests pass except Process_Mutex_Test and
2572 MEM_Stream_Test. Also, Mac OS X doesn't yet support *nix
2573 aio_* calls, and ACE does not know anything about Mach.</p>
2575 <p>The work to port ACE to Mac OS X was done by several people,
2576 John Zorko
2577 &lt;<a href="mailto:j.zorko@att.net">j.zorko@att.net</a>&gt; is
2578 only one of them.</p>
2580 </p></li><li><strong>iPhone/iPod Touch/iPad</strong><p>
2582 </p><p>ACE builds and runs on the iPhone/iPod Touch/iPad Hardware
2583 and Simulator. Keep in mind that ACE/TAO needs to be built
2584 statically since Apple does not allow third party dynamic libraries
2585 to be deployed on the hardware. The following are needed to build ACE:</p>
2587 <p>1. The iPhone SDK.</p>
2588 <p>2. When creating $ACE_ROOT/ace/config.h, include
2589 config-macosx-iphone-hardware.h if you want to deploy on the
2590 hardware, include config-macosx-iphone-simulator.h if you want
2591 to deploy on the simulator. Even though those includes are named
2592 after the iPhone, the includes work for iPhone/iPod Touch, and iPad.</p>
2593 <p>3. You need to define two environment variables. The first is
2594 IPHONE_TARGET. Set IPHONE_TARGET to SIMULATOR if you want to deploy
2595 on SIMULATOR. Set IPHONE_TARGET to HARDWARE if you want to deploy on
2596 the hardware device.</p>
2597 <p>4. When creating $ACE_ROOT/include/makeinclude/platform_macros.GNU,
2598 include 'include $(ACE_ROOT)/include/makeinclude/platform_macosx_iphone.GNU'
2599 in the file.</p>
2603 </li></ul>
2606 <hr>
2607 <h2><a name="g++">Compiling ACE with GNU g++</a></h2>
2609 If you use the GNU GCC g++ compiler please note the following:
2611 <ul>
2612 </p></li><li>ACE/TAO needs g++ 4.8 or better. Older versions are not usable anymore<p>
2614 </p></li><li>Make sure to update your gcc <code>config.status</code>
2615 file. This file is produced when installing gcc; it specifies
2616 where to install the binary files that gcc uses. For example,
2617 it specifies whether to use Solaris's <code>/usr/ccs/bin</code>
2618 binary utils or GNU binary utils. The
2619 <code>config.status</code> file is an output of the gcc
2620 <code>configure</code> script; it is preferable to use the
2621 <code>--prefix</code> option to <code>configure</code> instead
2622 of hacking its output.<p>
2624 </p></li><li>If you are getting weird link errors when building libACE
2625 on Solaris you are probably using the GNU linker. Try using the
2626 Sun linker (/usr/ccs/bin/ld) instead. Note that gcc first looks
2627 for the GNU linker if it is installed along with gcc. The only
2628 way to not use the GNU linker is to delete it from the
2629 installation or to build your own compiler with no linker. Be
2630 aware that you still need the libraries and includes of gcc.<p>
2632 NOTE: if you do use the GNU linker, you might need to change
2633 the <code>-G</code> flag to <code>-shared</code> in
2634 the <code>SOFLAGS</code> definition in your
2635 <code>include/makeinclude/platform_macros.GNU</code>.</p><p>
2637 </p></li><li>Don't get too confused about contradictory statements in
2638 the gcc documentation. It was written by different
2639 people...<p>
2641 </p></li><li>Make sure that the linker invoked by gcc produces code
2642 that initializes static objects. Please see gcc's
2643 documentation for using <code>collect2</code>.<p>
2645 </p></li></ul>
2648 <hr><p>
2649 </p><h2><a name="minimum_build">What Do I Need to Build for TAO?</a></h2>
2650 Toshio Hori &lt;toshi@etl.go.jp&gt; provided these suggestions on building
2651 just what's needed for (a subset of) TAO:<p>
2653 I usually make:
2654 </p><pre> $ACE_ROOT/ace,
2655 $ACE_ROOT/apps/gperf,
2656 $TAO_ROOT/tao,
2657 $TAO_ROOT/TAO_IDL, and
2658 $TAO_ROOT/orbsvcs/orbsvcs
2659 </pre>
2660 and the whole make takes less than an hour on my Solaris 7 for intel,
2661 Pentium-III/550MHz, 256MB memory, 512MB swap machine. (Top secret: I
2662 renice the 'make' process to the highest priority, -20... ;-)
2664 To save time and space, I set
2665 <pre> TAO_ORBSVCS = Naming Time Trader ImplRepo
2666 </pre>
2667 in <code>$ACE_ROOT/include/makeinclude/platform_macros.GNU</code> also. See
2668 <a href="TAO/docs/configurations.html#orbsvcs">TAO's orbsvcs
2669 library customization instructions</a> for more information.<p>
2672 </p><hr><p> </p><h2><a name="resource_requirements">System Resource
2673 Requirements</a></h2> The amount of system resources required to build
2674 ACE and TAO varies greatly. The required system resources are
2675 influenced by OS and compiler platform, build options, and component
2676 configurations. As a rough guide, the typical peak memory requirement
2677 can be well over 512 MB (notably, for TAO's orbsvcs). Depending on
2678 your OS and compiler configuration, an <strong>entire</strong> build
2679 of ACE and TAO can use well over 4 GB of disk space. It's usually not
2680 necessary to build <strong>all</strong> of ACE and TAO, though.<p>
2682 Much less disk space is required for just the libraries. For example,
2683 see the <a href="docs/ACE-subsets.html#ACE%20Library%20Size%20Breakdown">ACE
2684 library subset sizes</a>.</p><p>
2686 If you run out of memory when building, you might consider trying
2687 some or all of these suggestions:</p><p>
2688 </p><ul>
2689 <li>Enable or increase virtual memory. If you're on a <a href="#Linux">Linux</a> or <a href="#LynxOS">LynxOS</a> platform,
2690 please see the appropriate sections above.<p>
2691 </p></li><li>Disable/enable optimization and/or debugging. See the
2692 <a href="#flags">Makefile Flags</a> discussion for information
2693 on how to do that via ACE's Makefiles.<p>
2694 </p></li><li>If you're using g++, try removing <code>-pipe</code> from
2695 <code>CFLAGS</code> in your
2696 <code>include/makeinclude/platform_macros.GNU</code> file.<p>
2697 </p></li><li>Restrict the components that you build. For ACE and TAO, see the
2698 discussion of <code>ACE_COMPONENTS</code> in the
2699 <a href="docs/ACE-subsets.html">ACE subsets</a> page. For TAO's
2700 orbsvcs, see the discussion of <code>TAO_ORBSVCS</code> in
2701 <a href="TAO/docs/configurations.html#orbsvcs">orbsvcs Library configuration information</a>.<p>
2703 If disk space is a problem, disabling debugging should greatly
2704 reduce object code, and therefore, library size. This is especially
2705 true with g++.</p><p>
2707 Toshio Hori &lt;toshi@etl.go.jp&gt; provided these tips for reducing
2708 disk space usage:</p><p>
2710 To save space on a Unix machine, I usually run
2711 'find . -name \*.sln -o -name \*.vcproj -o -name \*.bmak | xargs rm -f'
2712 in $ACE_ROOT at first after I untar the distribution. They are
2713 meaningless in my environment (Files named '*.sln' and '*.vcproj' are
2714 used for MSVC++ and files named '*.bmak' are for Embarcadero C++
2715 Builder.)</p><p>
2717 Finally, to save space, may want to run 'make clean' after 'make'. It
2718 removes generated object files and leaves libraries/executables
2719 intact. If you want to remove any of the libraries/executables, as
2720 well, try 'make realclean'.</p><p>
2722 </p></li></ul>
2724 <p></p><hr><p>
2725 </p><h1 name="MPC">General MPC information</a></h1>
2728 The <A HREF="
2729 http://htmlpreview.github.io/?https://github.com/DOCGroup/MPC/blob/master/docs/html/MakeProjectCreator.html">
2730 Makefile Project Creator (MPC)</A> is a tool that takes platform and
2731 building tool generic files (mpc files) as input, which describe basic
2732 information needed to generate a "project" file for various build
2733 tools, including Make, NMake, Visual C++ 6, Visual C++ 7, etc. Please
2734 see <a href="MPC/docs/USAGE">USAGE</a>, <a
2735 href="MPC/docs/README">README</a> for documentation on MPC.
2736 </p>
2739 A common usage for creating a Windows workspace containing just the
2740 core ACE and TAO libraries and executables is the following:
2741 </p>
2743 <pre><code>
2744 C:> cd %TAO_ROOT%
2745 C:> %ACE_ROOT%\bin\mwc.pl -type vs2019 TAO_ACE.mwc
2746 </pre></code>
2749 Replace vs2019 with whatever project type you want to use. On Linux and
2750 other UNIX platform use the gnuace type:
2751 </p>
2753 <pre><code>
2754 % cd $TAO_ROOT
2755 % $ACE_ROOT/bin/mwc.pl -type gnuace TAO_ACE.mwc
2756 </pre></code>
2759 This creates the appropriate GNUmakefiles. Additional information on
2760 how to obtain, configuration, and build ACE+TAO using MPC appear at
2761 the OCI <A
2762 HREF="http://www.theaceorb.com/faq/index.html#HowToBuildACEandTAOonWindows">FAQ</A>.
2763 </p>
2766 If you are attempting to generate project files using MPC, and you get
2767 the following error message:
2768 </p>
2770 <pre>ERROR: Unable to find the MPC modules in /builds/ACE_wrappers/MPC.
2771 You can set the MPC_ROOT environment variable to the location of MPC.
2772 </pre>
2775 You need to do one of the following:
2776 </p>
2778 <ol>
2779 <li>If you have already obtained MPC, either move it underneath the
2780 ACE_wrappers directory or set your MPC_ROOT environment variable to point
2781 to the full path of MPC.</li>
2782 <li>Check out MPC from the DOC Group git repository
2783 and set your MPC_ROOT environment variable.</li>
2784 </ol>
2787 You can check
2788 out MPC from the DOCGroup git repository using the following command.
2789 </p>
2791 <pre>git clone https://github.com/DOCGroup/MPC.git MPC
2792 </pre>
2795 The <A HREF="MPC/docs/README">README</A> and <A HREF="MPC/docs/USAGE">USAGE</A> files in the MPC/docs directory are an up-to-date
2796 source of documentation, however it is not a complete set of
2797 documentation. The TAO Developer's Guide from OCI starting with the
2798 1.3a version contains more information about MPC.
2799 </p>
2802 The MPC chapter from the TAO Developer's Guide is available at <a
2803 href="http://downloads.ociweb.com/MPC/">
2804 http://downloads.ociweb.com/MPC/</a>. Some of MPC has changed since
2805 this version, but it is largely accurate. An updated version will be
2806 available as newer versions of the TAO Developer's Guide are released.
2807 In the meantime, please see the README and USAGE files in the MPC
2808 directory.
2809 </p>
2812 </p><h1><a name="eclipse">Working with ACE in Eclipse</a></h1>
2816 The Eclipse CDT C++ development environment can be used to develop ACE applications. You can configure a new CDT project to build ACE using either a local source distribution or checking out ACE from CVS in Eclipse. These are the steps to create the CDT project to build ACE.
2817 </p>
2820 <h2>To create an Eclipse project for ACE starting from CVS:</h2>
2821 <ol>
2822 <li>In the "CVS Repository Exploring" perspective, navigate to the module containing ACE.</li>
2823 <li>Checkout the module using "Check Out As" and select the "project configured using the New Project Wizard" option.</li>
2824 <li>Select "Standard Make C++ Project" for the project type.</li>
2825 <li>Follow the steps outlined above, up to the point of running make, for building ACE on your platform. Use "path_to_your_eclipse_workspace"/"project_name" as your $ACE_ROOT.
2826 <li>If you had to regenerate the makefiles using MPC, select the root folder for your poject and use the import wizard to add them to your project.</li>
2827 <li>Select the root folder for the project and use the "Create Make Target" wizard to setup the appropriate make command and options.</li>
2828 <li>Select the root folder and run "Build Make Target." This will build ACE.</li>
2829 </ol>
2830 </p>
2835 <h2>To create an Eclipse project for ACE from a local source distribution:</h2>
2836 <ol>
2837 <li>Launch the "New Project Wizard" in Eclipse.</li>
2838 <li>Select "Standard Make C++ Project" for the project type.</li>
2839 <li>On the project name page, uncheck the "use default" location option and replace the default path with the path to your source distribution.</li>
2840 <li>Follow the steps, up to the point of running make, for building ACE on your platform.
2841 <li>If you had to regenerate the makefiles using MPC, select the root folder for your poject and use the import wizard to add them to your project.</li>
2842 <li>Select the root folder for the project and use the "Create Make Target" wizard to setup the appropriate make command and options.</li>
2843 <li>Select the root folder and run "Build Make Target." This will build ACE.</li>
2846 </ol>
2847 </p>
2849 </p>
2851 <hr><p>
2852 </p><h1><a name="advanced">Advanced Topics</a></h1>
2854 <ul>
2855 <li><a href="docs/ACE-porting.html">Porting ACE and TAO to a New OS Platform</a>
2856 </li><li><a href="#NonStaticObjectManager">Non-static ACE_Object_Manager</a>
2857 </li><li><a href="#cloning">Cloning the Source Tree</a>
2858 </li><li><a href="#mvs">Additional Build Tips for MVS</a>
2859 </li><li><a href="#flags">Makefile Flags</a>
2860 </li><li><a href="docs/ACE-SSL.html">ACE SSL effort</a>
2861 </li></ul>
2863 <p></p><hr align="left" width="50%"><p>
2864 </p><h2><a name="NonStaticObjectManager">Non-static
2865 ACE_Object_Manager</a></h2> The ACE_Object_Manager can be instantiated
2866 as a static object, can be instantiated on the stack of the main
2867 program thread, or can be explicitly instantiated and destroyed by the
2868 application with <code>ACE::init ()</code> and <code>ACE::fini
2869 ()</code>. The comments in the header file,
2870 <a href="ace/Object_Manager.h"><code>ace/Object_Manager.h</code></a>, as well as Section 1.6.3 in
2871 <a href="http://www.riverace.com/docs">The ACE Programmer's Guide</a>
2872 provide more detail.<p>
2874 <strong><blink><font color="#ff0000">NOTE:</font></blink></strong>
2875 Special requirements are imposed on applications if the
2876 ACE_Object_Manager is instantiated, by ACE, on the stack of the main
2877 thread. This behavior is selected by defining
2878 <code>ACE_HAS_NONSTATIC_OBJECT_MANAGER</code> in
2879 <code>ace/config.h</code>. Again, see the ACE Object_Manager header file,
2880 <a href="ace/Object_Manager.h"><code>ace/Object_Manager.h</code></a> for more information. One of
2881 these requirements is discussed here, because it is so important.
2882 Please note that <code>ACE_HAS_NONSTATIC_OBJECT_MANAGER</code> is
2883 defined in the distributed ACE <code>config.h</code> headers for
2884 VxWorks and Win32.</p><p>
2886 The important requirement is that the program <strong>must</strong>
2887 declare its <code>main</code> function with two arguments, even if
2888 they're not used, and with <code>int</code> return type:
2890 </p><pre><code>
2892 main (int, char *[])
2893 </code></pre>
2895 If you don't declare <code>main</code> <strong>exactly</strong> that
2896 way, then you'll see a link error about <code>ace_main_i</code> being
2897 undefined.<p>
2899 Alternatively, this feature can be disabled by commenting out the
2900 #define ACE_HAS_NONSTATIC_OBJECT_MANAGER in the
2901 <code>ace/config.h</code>. But, that will make repeated testing more
2902 difficult on VxWorks. And, you'd either have to call static
2903 constructors and destructors manually or unload/load the program
2904 between runs. On Win32, disabling the feature can possibly lead to
2905 shutdown difficulties.</p><p>
2907 <strong><blink><font color="#ff0000">WARNING:</font></blink></strong>
2908 <code>ACE_HAS_NONSTATIC_OBJECT_MANAGER</code> assumes that your
2909 <code>main</code> function is named <code>main</code>. Any violation
2910 of this assumption is at your peril. If you really need to call your
2911 entry point something other than <code>main</code>, you'll need to
2912 construct and destroy the ACE_Object_Manager. The best way to do that
2913 is to call <code>ACE::init ()</code> and <code>ACE::fini ()</code>.
2914 Or, see the <code>#define</code> of <code>main (int, char *[])</code>
2915 in <a href="ace/OS_main.h"><code>ace/OS_main.h</code></a> to see how ACE does
2916 that for entry points named <code>main</code>.
2918 </p><p></p><hr align="left" width="50%"><p>
2919 </p><h2><a name="cloning">Cloning the Source Tree</a></h2>
2921 On UNIX platforms, we typically like to support multiple platform
2922 builds using the same ACE source tree. This idiom is supported by ACE
2923 using the $ACE_ROOT/bin/create_ace_build.pl script.
2925 To clone the source tree, create ./build and ./build/{your build name}
2926 subdirectories under the ACE_wrappers directory.
2927 Then invoke the create_ace_build.pl script to clone the source tree using
2928 soft links from your build directory back to the actual sources.
2929 Here is an example:</p><p>
2931 </p><pre>% cd ACE_wrappers
2932 % mkdir build build/build-SunOS5
2933 % perl bin/create_ace_build.pl -a -v build-SunOS5
2934 % cd build/build-SunOS5
2935 % setenv ACE_ROOT $cwd
2936 % make
2937 </pre><p>
2939 This will establish a complete tree of links. In addition, make sure
2940 you set your <code>LD_LIBRARY_PATH</code> to
2941 <code>$ACE_ROOT/lib:$LD_LIBRARY_PATH</code> on SVR4 UNIX
2942 platforms.</p><p>
2944 When you do a make in the $ACE_ROOT directory you will be producing
2945 object code that is not stored in the same place as the original
2946 source tree. This way, you can easily build another platform in a
2947 parallel tree structure.</p><p>
2949 See the comments at the top of the create_ace_build.pl script for
2950 further usage information.
2952 </p><p></p><hr align="left" width="50%"><p>
2953 </p><h2><a name="mvs">Additional Build Tips for MVS</a></h2>
2955 For all intents and purpose, MVS OpenEdition (OE) is another flavor of
2956 UNIX, therefore, the instructions under <a href="#aceinstall">Building
2957 and Installing ACE on Unix</a> can be used along with the following
2958 additional tips:<p>
2960 You can get a copy of GNU make that has been ported to MVS OpenEdition from
2961 the <a href="http://www.s390.ibm.com/products/oe/index.html">IBM OpenEdition web site</a>.
2962 ACE's make scheme generates compile commands that have options and
2963 operands interspersed. By default, the c89/cc/c++ compiler expects all options to
2964 precede all operands. To get around this, you must set a special
2965 compiler environment variable (_CXX_CCMODE) to 1 which tells the compiler
2966 to allow options and operands to be interspersed.</p><p>
2968 Note that the environment variable <code>LD_LIBRARY_PATH</code> is
2969 called <code>LIBPATH</code> on MVS.</p><p>
2971 Shared objects are built a little different on MVS than on
2972 other UNIX implementations. This has been accounted for in the makefiles
2973 that come with ACE When the linker (via the cxx command) builds the
2974 libACE.so file it will also create a file called libACE.x. This is a
2975 side-deck file and it must be included in subsequent link edits with
2976 application code. For more information on this see the C/C++ MVS
2977 Programming Guide. If you want to build your application statically,
2978 i.e., using libACE.a instead of libACE.so, you can set ACELIB to
2979 ACELIB_STATIC in platform_mvs.GNU.</p><p>
2981 When the libACE.so file is built (via the MVS pre-linker and binder), you
2982 will get a rc=4 from the pre-linker. This is ok. This is due to some
2983 warnings about unresolved references which should get resolved during the
2984 link step. Note, however, there shouldn't be any unresolved references
2985 from the binder (linkage editor). You can get pre-link and link maps by
2986 uncommenting the PMAP and LMAP lines in the platform_mvs.GNU file.
2988 </p><p></p><hr align="left" width="50%"><p>
2989 </p><h2><a name="flags">Makefile Flags</a></h2>
2991 GNU make provides many options to customize its operation. See its
2992 documentation for more information. One example is that for multi-cpu
2993 UNIX machines you will be able to build faster if you use:<p>
2995 </p><pre><code>
2996 % make -j <em>n</em>
2997 </code></pre><p>
2999 which allows parallel compilation. The number <i>n</i> should
3000 typically be the number of CPUs. It is likely that builds will be
3001 faster even on single-CPU UNIX machines with <code>make -j
3002 2</code>.</p><p>
3004 ACE further supports the following flags. They can be enabled either
3005 on the command line, e.g., "make purify=1", or added to your
3006 <code>platform_macros.GNU</code>. To disable the option,
3007 set the flag to null,
3008 e.g., "make debug=". Some flags support setting to 0 disable, e.g.,
3009 "make debug=0". debug=1 is enabled in the platform files that are
3010 released with ACE.</p><p>
3012 Please note that the effects of a flag may be platform specific.
3013 Also, combinations of certain flags may or may not be allowed on
3014 specific platforms, e.g., debug=1 opt=1 is supported by g++ but
3015 not all other C++ compilers.</p><p>
3017 If you use Purify or Quantify: purify or quantify <strong>must</strong>
3018 be on your <code>PATH</code>. By default, ACE puts the Purify/Quantify
3019 caches below <code>/tmp</code>. To override that, set the
3020 <code>PURE_CACHE_BASE_DIR</code> variable, either in your environment
3021 or on the <code>make</code> make command line, to the destination
3022 directory for your instrumented libraries.</p><p>
3024 </p><pre>Flag Description
3025 ---- -----------
3026 debug Enable debugging; see DCFLAGS and DCCFLAGS.
3027 exceptions Enable exception handling (not supported by all platforms).
3028 include_env Support old-style ACE_TRY_ENV declarations in methods.
3029 This switch is necessary for compiling TAO applications
3030 in the native exception configuration that were written
3031 for TAO versions before 1.2.2.
3032 In TAO 1.2.2, new macros were introduced that supercede
3033 the direct ACE_TRY_ENV declarations. These are the
3034 ACE_ENV_ARG macros that are defined in ace/CORBA_macros.h
3035 and are documented in docs/exceptions.html.
3036 This switch only affects the exceptions=1 configuration.
3037 It is for backward compatibility only.
3038 There will be warnings about unused _ACE_environment_variable
3039 parameters when using include_env=1.
3040 If possible, do not use it, but instead change your TAO
3041 applications to use the ACE_ENV_ARG macros.
3042 fast Enable -fast option, e.g., with Sun C++.
3043 inline Enable ACE inlining. Some platforms enable inlining by
3044 default, others do not.
3045 optimize Enable optimization; see OCFLAGS and OCCFLAGS.
3046 pace Enable PACE as the underpinnings of ACE_OS.
3047 probe Enable ACE_Timeprobes.
3048 profile Enable profiling; see PCFLAGS and PCCFLAGS.
3049 purify Purify all executables.
3050 quantify Quantify all executables.
3051 repo Use GNU template repository (g++ with repo patches only).
3052 rtti Enable run-time type identification. On some platforms,
3053 it is enabled by default, so this is ignored.
3054 shared_libs If migrating from prior version use <code>shared_libs_only</code>
3055 static_libs If migrating from prior version use <code>static_libs_only</code>
3056 shared_libs_only Only build shared libraries. Ignored if no SHLIBs are
3057 specified by the Makefile, as in performance-tests/Misc.
3058 static_libs_only Only build static libraries.
3059 threads Build with thread support.
3060 xt Build with Xt (X11 Toolkit) support.
3061 fl Build with FlTk (Fast Light Toolkit) support.
3062 tk Build with Tk (Tcl/Tk) support.
3063 qt Build with Qt (Trolltech Qt) support.
3064 ssl Build with OpenSSL support.
3065 rapi Build with RAPI
3066 split Build the library by first splitting up the ACE source
3067 to several files, with one object code entity for each
3068 source file. This allows an application that is linked
3069 with ACE to extract _exactly_ what it needs from the
3070 library, resulting in a smaller executable. Setting this
3071 to 1 overrides debug to 0.
3073 Usually, users do not need to be concerned with make targets.
3074 Just enter "make" on the command line to build. A few notable
3075 targets are listed below.
3077 Target Description
3078 ------ -----------
3079 show_statics Lists all static objects in object files built for
3080 current directory. Only supported for g++.
3081 show_uninit Lists all uninitialized in object files built for
3082 current directory. Only supported for g++.
3084 </pre>
3086 </p><hr>
3088 <h2><a name="power">Building from git</a></h2>
3090 If users are building from our <a href="https://github.com/DOCGroup/ACE_TAO">Git repository</a> the
3091 GNUmakefiles, and project files for building on various platforms will
3092 not be available. Git users are expected to <a href="#generate_using_mpc">generate them</a>
3093 using <a href="https://raw.githubusercontent.com/DOCGroup/MPC/master/docs/README">MPC</a> before building ACE or TAO.
3094 We point out some suggestions below to get bootstrapped
3095 quickly.
3097 <ul>
3098 <li>You can clone all code easily from our git repository.
3099 <ul>
3100 <code>git clone https://github.com/DOCGroup/ACE_TAO.git</code>
3101 </ul>
3102 </p></li><li>Please make sure that you have <a href="http://www.perl.org/">
3103 perl</a> installed, preferably perl
3104 5.8 or higher. Users on Win32 based platforms are recommended to use
3105 <a href="https://www.activestate.com/products/perl"> Active
3106 State Perl</a> or <a href="http://strawberryperl.com">Strawberry Perl</a>.
3107 We use both perl versions without problems. We have
3108 ran into problems trying to use the cygwin version of perl on Win32
3109 based platforms. <p>
3110 </p></li>
3111 <a name="generate_using_mpc"></a>
3112 <li>To build ACE and associated tests, examples,
3113 and associated utility libraries with GNUmakefiles, you must
3114 generate GNUmakefiles with MPC:<p>
3115 <code> $ACE_ROOT/bin/mwc.pl -type gnuace ACE.mwc</code> </p>
3116 <p>On Windows, with Visual Studio 2015, you must generate solution and project files with MPC:<p>
3118 <code> $ACE_ROOT/bin/mwc.pl -type vc14 ACE.mwc </code> </p><p>
3120 On Windows, with Visual Studio 2017, you must generate solution and project files with MPC:<p>
3121 <code> $ACE_ROOT/bin/mwc.pl -type vs2017 ACE.mwc </code> </p>
3123 On Windows, with Visual Studio 2019, you must generate solution and project files with MPC:<p>
3124 <code> $ACE_ROOT/bin/mwc.pl -type vs2019 ACE.mwc </code> </p>
3125 </li><li>If you want to build TAO and its associated libraries
3126 please see <a href="TAO/TAO-INSTALL.html">TAO-INSTALL</a> for details.
3127 </li></ul>
3129 <hr><p>
3130 Back to the <a href="https://www.dre.vanderbilt.edu/~schmidt/ACE.html">ACE</a>
3131 home page.
3132 </p><p>
3133 <!--<EM>
3134 Visitor #
3135 from
3136 <EM><br> -->
3138 <!-- hhmts start -->
3140 <!-- hhmts end -->
3143 </p></body></html>