
     _________________________________________________________________
   
  Building and Installing TAO
  
   The following table summarizes platforms on which TAO runs:
   
   Fully supported, i.e., continually tested and used daily Solaris 2.5,
   2.6, and 7, Windows NT/2000 (MSVC 5.0 and 6.0), Linux/Intel,
   Linux/Alpha, VxWorks, LynxOS, Digital UNIX 4.0 and 5.0, IRIX 6.x, and
   QNX Neutrino 2.0
   Nearly fully supported, i.e., periodically tested Windows 9x/ME, HP/UX
   10.x and 11.x, AIX 4.x
   Partially supported, i.e., infrequently tested FreeBSD, NetBSD, SunOS
   4.x, Chorus
   Planned support, i.e., pending pSoS, MVS, Windows CE, Tandem, SCO,
   UnixWare
   
   Any UNIX/POSIX/Win32 variation is a potential target platform for ACE.
   If you have [1]porting questions or have a problem compiling the ACE
   wrappers on the platforms shown above please send email to either
   [2]ACE Newsgroup or the [3]ACE mailing list and we'll try to help you
   fix the problems. You can also submit bug reports and enhancement
   requests in our [4]bug tracking system.
   
   TAO can be obtained [5]electronically via the WWW and ftp. [6]ACE is
   bundled with the TAO release. You'll always need the most recent
   version of ACE because TAO tracks changes to ACE very closely.
   
   WARNING: For users who have used ACE with other ORBs, linking TAO with
   a version of ACE that is also linked against another ORB vendor's
   library, e.g., liborbix.so, will produce undefined and most likely
   unpredictable and erroneous results.
     _________________________________________________________________
   
  On UNIX platforms
  
    1. Set ACE_ROOT environment variable as outlined in the [7]ACE
       installation notes.
    2. Build and install ACE under $ACE_ROOT.
          + Change directory to $ACE_ROOT/ace and execute [8]make.
          + Also build GPERF under $ACE_ROOT/apps/gperf
    3. Set TAO_ROOT environment variable to $ACE_ROOT/TAO.
    4. Build and install the TAO release under $TAO_ROOT.
       The easiest and recommended way to compile the complete TAO
       distribution by simply simply executing [9]make in the $TAO_ROOT
       directory.
       A smaller subset, that may be of interest to test basic TAO
       functionality, is: $TAO_ROOT/tao, $TAO_ROOT/TAO_IDL,
       $TAO_ROOT/tests/Param_Test. Then you can execute the run_test.pl
       script in $TAO_ROOT/tests/Param_Test and/or follow the
       instructions contained in the README file in the same directory.
       If you wish to compile the services distributed with TAO,
       including the Naming_Service you must include $TAO_ROOT/orbsvcs to
       the list above.
    5. To test that the TAO release is properly configured, follow
       instructions on executing the various examples under
       $TAO_ROOT/tests.
       
    A Note On Make
    
   Since TAO is built atop ACE, TAO re-uses ACE's Makefile structure as
   well. Thus, just like ACE requires GNU Make, so too does TAO. More
   exactly, versions of make which are known to not work include those
   from Solaris 4.x and 5.x, HP-UX, the latest BSD, etc.
   
   GNU Make can be obtained from various places in source form.
     _________________________________________________________________
   
  For Cross-Compiled Targets, such as VxWorks and LynxOS
  
   If you are building TAO for a VxWorks target, please see the detailed
   instructions for building and installing ACE and TAO in
   [10]$ACE_ROOT/ACE-INSTALL.html.
   
   Cross-compiling TAO is not much different than building it for
   self-host. The one major difference is that TAO's IDL compiler must be
   built and run on the host; it's not necessary to run it on the target.
   There are several ways to do this, below we document the two most
   common approaches:
   
    Modifying the default location for the IDL compiler
    
   By default TAO assumes that the IDL compiler is located in:
   $TAO_ROOT/TAO_IDL/tao_idl and that the GPERF tool is located in
   $ACE_ROOT/bin/gperf, this is fine for hosted builds, but not for
   cross-compilation. Unfortunately there is no good default for
   cross-compilation builds because different sites choose a different
   location for their tools.
   
   You can override the default values by adding two lines in your
   platform_macros.GNU file, as follows:

$ echo 'TAO_IDL := /your/path/tao_idl' \
     >> platform_macros.GNU
$ echo 'TAO_IDLFLAGS := -g /your/path/gperf' \

   You could even use:
$ echo 'TAO_IDL := tao_idl' \
     >> platform_macros.GNU
$ echo 'TAO_IDLFLAGS := -g gperf' \

   if the tools are in your path.
   
   Obviously you must first build the tools for the host platform,
   typically you would do this as follows:

# (1) Create a clone directory for the host:

$ cd ACE_wrappers
$ mkdir -p build/HOST
$ ./bin/create_ace_build build/HOST

# (2) Configure the host build:

$ echo '#include "ace/config-HOST.h"' > build/HOST/ace/config.h
$ echo 'include $(ACE_ROOT)/include/makeinclude/platform_HOST.GNU' \
     > build/HOST/include/makeinclude/platform_macros.GNU

# Often host builds are static:
$ echo 'static_libs_only=1' \
     >> build/HOST/include/makeinclude/platform_macros.GNU

# (3) Build the host tools

$ cd build/HOST
$ export ACE_ROOT=$PWD
$ make -C ace
$ make -C apps/gperf
$ make -C TAO/TAO_IDL

   Then configuring the location of the tools for the target could be
   done as shown here:

# (4) Create a clone directory for the target:

$ cd ACE_wrappers
$ mkdir -p build/TARGET
$ ./bin/create_ace_build build/TARGET

# (5) Configure the target build:

$ echo '#include "ace/config-TARGET.h"' > build/HOST/ace/config.h
$ echo 'include $(ACE_ROOT)/include/makeinclude/platform_TARGET.GNU' \
     > build/TARGET/include/makeinclude/platform_macros.GNU

# (6) Configure the TARGET build to use the HOST IDL compiler and
#     gperf tools, as described above.

    Alternative configuration, using links
    
   Some developers prefer to set up the host tools using symbolic links
   (Unix) or copy of tao_idl (NT). By way of example, here is how you
   could setup a croos-compilation environment for Unix, the host is
   SunOS5/g++, the target is VxWorks. It assumes that the ACE+TAO
   distribution has been unpacked, with TAO below ACE_wrappers. It uses
   the ACE_wrappers/bin/create_ace_build script to create a shadow build
   tree:
    1. cd ACE_wrappers
    2. bin/create_ace_build SunOS5_g++
    3. bin/create_ace_build vxworks
    4. cd build/vxworks/TAO
    5. /bin/rm -r TAO_IDL
    6. ln -s ../../SunOS5_g++/TAO/TAO_IDL
       
   To build on the host:
    1. cd build/SunOS5_g++
    2. export ACE_ROOT=`pwd`; export
       LD_LIBRARY_PATH=`pwd`/ace:$LD_LIBRARY_PATH
    3. (cd ace; make && cd ../tests; make && cd ../TAO; make) > make.log
    4. cd ../vxworks
    5. export ACE_ROOT=`pwd`
    6. (cd ace; make && cd ../tests; make && cd ../TAO; make) > make.log
       
   For NT hosts, please see the detailed instructions for building and
   installing ACE and TAO in [11]../ACE-INSTALL.html, and [12]Building
   ACE on Tornado/NT hosts for VxWorks targets
   
   Please note that dynamic loading of libraries is not supported by TAO
   for any cross-compiled target. Therefore, dynamic service
   configuration of the TAO ORB is not supported.
   
   If using perfect hashing, TAO_IDL needs gperf to be built on the host.
   That's the default on many platforms. First, build gperf in the
   ACE_wrappers/apps/gperf/src/ directory. Then, add a symlink or copy to
   the bin/ directory for the target.
   
    Which one is right for me?
    
   Using links to cross-compile TAO may appear simpler at first glance.
   However, storing the location in the platform_macros.GNU is more
   amenable for sites where many developers share the same configuration
   files, or where ACE+TAO are compiled once and used by a medium or
   large size group.
     _________________________________________________________________
   
  On Windows NT and Windows 2000
  
   TAO_IDL does not contain its own preprocessor, so it needs to use an
   external preprocessor. Depending on which compiler was used to build
   TAO_IDL, the default preprocessor will change. For example, if
   compiled with MSVC, TAO_IDL will look for CL.EXE in the path. There
   are cases where this will not work, such as in cross-compiling or if
   the preprocessor is not in the path. These situations require that
   environment variables are set on the machine to override the built-in
   settings. More information about these environment variables can be
   found in the [13]TAO_IDL documentation.
   
   It is also advisable to set either the ACE_ROOT environment variable
   as outlined in the [14]ACE installation notes or the TAO_ROOT
   environment variable. This is only required if you are planning to use
   the <orb.idl> standard include in your IDL code. Notice that some of
   the TAO services use this feature, so you are better off definining
   the environment variable in all cases.
   
   [15]Barry Hoggard maintains a [16]CORBA Page which contains very
   helpful information on setting MSVC project settings for TAO
   applications.
   
   Remember to [17]set up ACE before building TAO.
   
    Visual C++ 5.0/6.0
    
   It works best if TAO is placed in ACE_wrappers so TAO ends up in
   ACE_wrappers\TAO because the Visual C++ 5/6 Project files are set up
   to work in this configuration. If you move it, then make sure you
   change the project files to look for the include and library files in
   the correct place.
   
    1. Make sure ACE is built (For Visual C++ 5.0/6.0, use ace.dsw).
    2. First make sure ACE_wrappers\bin is listed in the Executable
       Directories in Tools|Options. This is needed if using the TAO_IDL
       compiler under MSVC. If you intend to also use the release version
       of the libraries, also add ACE_wrappers\bin\Release to the
       directories. Note: The order that these are listed is important.
       If your main development is with the debug versions, make sure
       \bin is before \bin\Release, otherwise put the \bin\Release first.
       Because the output names for the release and debug versions of
       TAO_IDL are the same, extra care must be taken when both versions
       are generated simulataneously.
    3. Load the workspace tao\TAO.dsw and build the TAO library.
    4. To build the Cubit test, load the workspace
       performance-tests\Cubit\TAO\IDL_Cubit\IDL_Cubit.dsw and build both
       client and server.
       
    TAOACE.dsw and other collection dsw files
    
   TAOACE.dsw is a Visual C++ 5.0/6.0 workspace that loads the projects
   ACE, TAO, TAO_IDL (the compiler), gperf, the orb services libraries,
   and the standalone executables (such as Naming Service, etc.). It can
   be used to build all the files needed to build/run TAO applications.
   
    Borland C++ Builder
    
   To build TAO using C++Builder please follow the [18]ACE installation
   notes, with the difference being that you should run:
   
     make -f Makefile.bor
     
   from the ACE_ROOT\TAO directory instead of ACE_ROOT\ace.
   
   For more detailed information on building and using TAO with Borland's
   C++ Builder environment, please see the [19]online help provided by
   [20]Christopher Kohlhoff.
   
    Upgrading From Older Releases
    
   When a newer version of ACE/TAO is installed, rebuild all should be
   used to make sure everything is built correctly.
   
    Changing Include Paths
    
   If you prefer #include <corba.h> over #include <tao/corba.h> then you
   will need to change your Project Settings to also contain the TAO/tao
   directory. You'll find this in the C/C++ settings under Input.
   
    Creating Static Libraries (*.lib)
    
   TAO, orbsvcs, TAO_IDL, and the Simple Test all have extra project
   files for static library builds. TAOACE_static.dsw contains some of
   these projects, and is set up much like [21]TAOACE.dsw, except that
   there are not as many static projects as their are dynamic projects
   and their isn't the same dependencies set up.
   
   To use the static libraries in a project, make sure to the following
   settings are used in the Project Settings.
   
     * C/C++ | General: Add the Preprocessor Definitions ACE_HAS_DLL=0,
       ACE_OS_HAS_DLL=0 and whatever other libraries that are included
       (such as TAO_HAS_DLL=0)
     * Link: Link with the static libs, such as TAOs.lib or TAOsd.lib
     _________________________________________________________________
   
  How to add IDL files into your Visual C++ projects
  
   Point of contact: [22]Nanbor Wang.
   
   Each IDL file generates .h, .i and .cpp files. Here is an example of
   adding an IDL file named foobar.idl into a VC project.
    1. Create/open the workspace. In addition to creating server project
       and client project, create a separate "Utility Project" call
       foobar_idl for compiling the shared IDL file. Add the IDL file
       <foobar.idl> to foobar_idl project and other non-IDL generated
       files into both client and server projects.
    2. Added foobarC.h, foobarC.i, foobarC.cpp, foobarS.h, foobarS.i, and
       foobarS.cpp into server project and foobarC.h, foobarC.i,
       foobarC.cpp into client projects.
    3. Now open the project setting window of foobar_idl (Project ->
       Setting... or just press Alt-F7.) Select the IDL file in the
       projects. Choose to set the setting for "All Configuration." Make
       sure the "Always use custom build step" is checked and "Exclude
       from build" is unchecked.
    4. Click on the "Custom Build" tab. Add this entry as the build
       command for IDL files:
tao_idl $(InputPath) -o $(InputDir) -I $(InputDir)
   Notice that your absolute path to TAO_IDL may vary.
    5. Now add the following entries as "Output file(s)."

      $(InputDir)\$(InputName)S.h
      $(InputDir)\$(InputName)C.h
      $(InputDir)\$(InputName)C.i
      $(InputDir)\$(InputName)C.cpp
      $(InputDir)\$(InputName)S.i
      $(InputDir)\$(InputName)S.cpp
      $(InputDir)\$(InputName)S_T.h
      $(InputDir)\$(InputName)S_T.i
      $(InputDir)\$(InputName)S_T.cpp

   Add only one entry in each line.
    6. You might also want to add the TAO_IDL compiler in as a dependency
       here if you update TAO often. That way, if the compiler is
       changed, the IDL files are recompiled automatically in the next
       build.
    7. We are all set. Click OK.
    8. Add foobarC.cpp and foobarS.cpp to the server project and
       foobarC.cpp into the client project.
    9. Make both client and server projects dependent projects of
       foobar_idl project to make sure the IDL file get compiled before
       client and server projects.
       
   Notice that these procedures only setup the IDL compiler to perform
   correctly.
   
   P.S. If anyone knows how to set a default setting in VC so we don't
   need to perform these procedures every time a new project gets set up,
   please let us know. Thanks.
     _________________________________________________________________
   
  Perl Scripts
  
   Several of TAO's tests and examples contain perl scripts that automate
   the execution of these tests. The scripts are found as "run_test.pl"
   in the directory of the test.
   
   The versions of perl that we use are 5.005_02 on NT and 5.003 on
   Solaris. The scripts may work on earlier versions of perl, but we
   cannot say for sure that they do.
     _________________________________________________________________
   
  Native Exceptions
  
   TAO will use native exceptions if TAO_HAS_EXCEPTIONS is defined when
   it is compiled. This can be accomplished in two ways: by defining
   ACE_HAS_EXCEPTIONS in the config.h or config-*.h files (such as on
   Windows) or by using make exceptions=1 when you compile TAO.
   
   Take note though, that this only enables support in ACE/TAO, the
   correct compiler flags must also be given to the compiler to enable
   them.
     _________________________________________________________________
   
  minimumTAO
  
   By default, all components in TAO will be compiled. If you only want
   support for [23]minimumTAO, define TAO_HAS_MINIMUM_CORBA. This can be
   accomplished in two ways: by defining TAO_HAS_MINIMUM_CORBA in the
   config.h or orbconf.h files or by using make minimum_corba=1 when you
   compile TAO.
   
   WARNING: Make sure that if you build liborbsvcs with minimum_corba=1
   you also build libTAO with minimum_corba=1!
     _________________________________________________________________
   
  Connection Caching feature
  
   By default, TAO includes the connection caching and purging feature
   which reuses "old" connections by purging them according to the
   caching strategy opted for (Least Recently Used, Least Frequently
   Used, First In First Out). This way socket descriptors are reused
   thereby increasing scalability.
   
   This feature can be controlled by defining or commenting out
   TAO_USES_ROBUST_CONNECTION_MGMT in $TAO_ROOT/tao/orbconf.h.
   
   But the code related to this feature consists of classes with large
   template lists and can cause problems with linkers and assemblers
   which cant grok long names.
   
   Tips:
   
   Check on SunOS5.6 (and above) whether the assembler used is of the Sun
   Workshop 5 version else you could get linker errors due to huge
   symbols.
   
   If using egcs2.95 as the compiler the -fsquangle option could be used
   which shortens the symbol names. Thanks to [24]Skye Sweeney for trying
   it out and [25]Ossama Othman for discovering the option with egcs.
   Note: Both the ACE library and TAO library need to built using this
   option.
     _________________________________________________________________
   
  System Resource Requirements
  
   Please see the [26]ACE-INSTALL.html System Resource Requirements
   discussion for information on system resources required to build ACE
   and TAO.
   
   Back to the [27]TAO home page.

References

   1. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/docs/ACE-porting.html
   2. news:comp.soft-sys.ace
   3. mailto:ace-users@cs.wustl.edu
   4. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/docs/usage-bugzilla.html
   5. http://www.cs.wustl.edu/~schmidt/TAO-obtain.html
   6. http://www.cs.wustl.edu/~schmidt/ACE.html
   7. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/ACE-INSTALL.html
   8. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/TAO/TAO-INSTALL.html#makenotes
   9. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/TAO/TAO-INSTALL.html#makenotes
  10. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/ACE-INSTALL.html#vxworks
  11. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/ACE-INSTALL.html#vxworks
  12. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/ACE-INSTALL.html#VxWorks/NT
  13. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/TAO/docs/compiler.html#idl_env
  14. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/ACE-INSTALL.html
  15. http://www.torus-software.com/
  16. http://www.torus-software.com/corba/
  17. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/ACE-INSTALL.html
  18. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/ACE-INSTALL.html#borland
  19. http://www.tenermerx.com/tao_bcb/index.html
  20. mailto:chris@kohlhoff.com
  21. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/TAO/TAO-INSTALL.html#taoace
  22. mailto:nanbor@cs.wustl.edu
  23. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/TAO/docs/minimumTAO.html
  24. mailto:ssweeney@sanders.com
  25. mailto:othman@cs.wustl.edu
  26. file://localhost/tmp/ACE_wrappers_stage-11052/ACE_wrappers/ACE-INSTALL.html#resource_requirements
  27. http://www.cs.wustl.edu/~schmidt/TAO.html
