1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
|
omniORB on OpenVMS platforms
============================
This file contains information on building omniORB on OpenVMS (Alpha and
and VAX) platforms.
Changes in 3.0.0 prerelease
---------------------------
New requirements
................
At least OpenVMS version 7.1 is now required. OpenVMS VAX and Compaq C++ 5.6
are still supported but Compaq C++ 6.2 is recommended (available only on Alpha).
Note that if you need to use Compaq C++ 5.6 you will need to apply the
dec_cxx_5_6.patch located in the [patches] directory. A good port of patch for
OpenVMS resides at: ftp.sidhe.org/VMSPerl_Community/non-perl_utils.
Anyone wishing to port to OpenVMS 6.x is encouraged to try. See the file,
readme.openvms_v6.
Python for OpenVMS must be installed prior to building the distribution. The
minimum version is 1.5.2-V007b.
The following python logical names are used:
Logical name Definition
--------------- -------------------------------------------------
python_include pyvms_disk:[python.python-1_5_2.include]
python_olb pyvms_disk:[python.python-1_5_2.vms.o_'platform']
Note that release builds will utilize object libraries built with python
configured for noDEBUG and THREADS (python_olb:*_d0t.olb) and vice versa (debug
builds require python_olb:*_ddt.olb).
DEC C must be installed. This distibution has been tested with:
DEC C V5.7-004 on OpenVMS Alpha V7.1-2
DEC C V5.6-003 on OpenVMS VAX V7.1
Other versions of DEC/Compaq C may be possible, but note that VAX C will not
work.
It is now required that an additional concealed, rooted logical name
(`your-name' in this paragraph) be defined. This logical name must be defined so
that the file that you are now reading resides in your-name:[000000]. In order
to build the entire tree, set default to your-name:[src] and type "make export".
Note that `your-name' is user-selectable. You might wish to use something that
indicates the omniORB version (e.g., omniORB300root). This logical name will
need to be available for debugging. The remainder of this document assumes
that the default device is `your-name:'.
New features
............
The omniORB for OpenVMS developement environment has been largely redesigned
with the goals of making it easier to maintain.
It is no longer necessary to invoke make /macro=(initialize_mms=1) to prepare a
source directory for building. The makefile system will now invoke a premake
step in order to create the necessary dependency files.
Module dependency files now have the extension `.d', rather than `.mms'.
An autoconfig feature has been added that will automatically determine compiler,
hardware, and operating system version. The results are written to
[mk]platform.mms. This feature is enabled by default (autoconfig=1 in
[config]config.mms). To reconfigure, perform a veryclean build of the entire
directory tree. Afterwards, the file [mk]dirs.mms should be empty.
$(TOP) is no longer defined. It is assumed that [000000] is "top".
$(EXPORT_TREE) and $(IMPORT_TREES) are no longer defined by default. Thus they
may be defined in other sub-trees such as directories containing contributed
software.
The format of the descrip.mms file has changed. In addition to removing the
definition of $(TOP), it now defines current as a "_" seperated list of
directory names.
C++ files that need to be compiled should be listed in the MMS macro CXXSRCS
which is a space seperated list. (CXXSRCS_x, x=0 to 9 are also available due to
VMS draconian limits.)
Macros no longer should be quoted and should appear in a space seperated list.
However, to pass an actual quote character, the quote should be quadrupled. For
example,
DIR_CXXMACROS=tcpSocketVaxRoutines\
CONFIG_DEFAULT_LOCATION=""""omniCFG:omniORB.cfg""""
Caveats
.......
The premake step now invokes `MMS/macro=dir.mms...'. This qualifier is somewhat
broken, in that it apparently recognizes only "-" as the continuation character
and ignores .IFDEF statements. Thus:
.IFDEF FOO
BAR=x
.ELSE
BAR=y
.ENDIF
must be rewritten:
.IFDEF FOO
FOOBAR=x
.ELSE
NOFOOBAR=y
.ENDIF
BAR=$(FOOBAR)$(NOFOOBAR)
if it resides in a dir.mms file.
Shareable images are now supported for all platforms. It is intended that
future versions will be "upwards compatable" (see the OpenVMS LINK manual) but
the mechanism for ensuring this is under development.
Changes in 2.8.0
----------------
To simplify linking, seperate omniORB floating point libraries are no longer
required.
There are additional configuration parameters in [config]config.mms.
Downloading the distribution
----------------------------
Refer to http://www.uk.research.att.com/omniORB/VMSDownload.html for
downloading and unpacking the distribution.
Building the distribution
-------------------------
This distribution requires the use of MMS, although it should be possible to use
the freely available MMK with minor changes (please contact visschb@rjrt.com if
you do this). It has been tested on Compaq C++ 6.2 for OpenVMS Alpha 7.1-2, and
DEC C++ 5.6 for OpenVMS VAX 7.1. Some version of TCPIP Services (formerly known
as UCX) is also required. Has not been tested with other transports such as
multinet.
The MMS files assume the use of the MMS /Skip qualifier. You should define a
"make" symbol as follows:
$ make=="mms/skip"
Define a concealed rooted logical so that this file resides in its [000000]
directory. Set default to the [src] directory. E.g., supposing that this file
resides in dua0:[omni.omniorb_300]:
$ define /trans=conc omniORB300root dua0:[omni.omniorb_300.]
$ set default omniORB300root:[src]
Before starting the build, you should review configuration settings by editing
the file [config]config.mms.
You should now be ready to build. Just type 'make export'.
To build debug versions of the library and/or executables, type:
$ make/macro=(debug=1)
This will create libraries and executables with a "d" suffix. For example,
omniORB3d.olb.
Setting up your environment
---------------------------
If your operating system is 6.2 or above, you should add the directory:
myroot:[bin.platform] to the logical name DCL$PATH (where platform is
openvms_{alpha|vax}_(6|7)_{1|2} and myroot:[000000] is the directory containing
the file you are reading). DCL$PATH should be defined as a search list logical.
If your operating system is 6.1 or below, you should define each of the
executables in that directory as foreign commands. E.g.:
$ omniidl2=="mydisk:[myroot.bin.openvms_vax_6_1]omniidl2.exe"
You will also need to define the logical OMNICFG to point to an existing
directory for name service configuration information. The omniNames server
will use this directory.
You will need to create a file called "omnicfg:omniorb.cfg" to contain the
nameservice IOR as described in the omniORB3 documentation. The file
should contain:
ORBInitialHost <omninames-host-name>
ORBInitialPort <omninames-port-number>
Once you have created this file, you should startup the omniNames server as a
detached process. This should be added to your system startup procedure.
Building omniORB3 applications
-----------------------------
Include directories
...................
With OpenVMS 7.1 and above you can use a single logical name (e.g.,
omni_include) to point to the [include] directory. You can then compile with
/include=("./", "/omni_include") and the compiler should find the others.
With OpenVMS 6.x you may need to define some additional logicals:
$ define <qualifiers> omniORB3 myroot:[include.omniORB3]
$ define <qualifiers> omniVms myroot:[include.omniVms]
$ define <qualifiers> omnithread myroot:[include.omnithread]
To link against the omniORB3 libraries, you should define the following logical
name:
$ define <qualifiers> omnilib mydisk:[myroot.lib.platform]
With the above definitions in place, you should add
/include=("./","/omni_include")/exceptions to your CXX compiles.
The logical name omnilib is used as a convenience for the cxxlink command line.
To link against the shareable images, you should use the omnilib:omni_share.olb
(or omnilib:omni_shared.olb) library. To run the resulting executable, you will
need to redefine sys$share. E.g.,
$ define sys$share omnilib,sys$library
Alternatively, you can define a logical name for each of the shareable images
contained in omni_shre.olb:
$ define omnithread_rt omnilib:omnithread_rt.exe
$ define omniORB3_rt omnilib:omniORB3_rt.exe
...
You may wish to use or adapt the development environment provided in the DCL
and MMS files contained in [etc]openvms.zip to accomplish the above.
Floating point support
----------------------
The CORBA standard mandates that an implementation should use the IEEE standard
for floating point types (CORBA::Float and CORBA::Double). Since native IEEE
floating point is not available on the VAX platform and to provide additional
flexibility for the Alpha platform, these types are proxy types.
The omniORB3 for VMS development environment provides for different floating
point formats by allowing one of:
make /macro=(D_FLOAT=1)
make /macro=(G_FLOAT=1)
make /macro=(IEEE_FLOAT=1)
to explicitly build for D, G, or IEEE floating point support. The default is
G_Float and D_FLOAT on Alpha and VAX, respectively (consistent with the CXX
default). You do not need to supply these qualifiers when building the
distribution.
Building the examples
=====================
You are strongly encouraged to try out the examples provided in
[src.examples]. Go into [src.examples] and type 'make all' (where make is
defined as above).
Study the documentations in [doc] (in the omniORB distribution) before
you run any of the example programs.
Documentation
=============
You must read the omniORB3 and the OMNI naming service user guides. Follow
the instructions in the guides to complete the configuration process.
Performance
===========
omniORB is implemented using synchronous socket calls in threads rather than
asynchronous socket calls. Thus, performance of omniORB relies heavily on the
ability of the O/S to perform I/Os that block only the thread of execution
(rather than the whole process) pending I/O completion.
Alpha
-----
For OpenVMS Alpha platforms, the best way to acheive this behavior is to use
link with /Thread=upcalls. This requires at least 7.1 of OpenVMS. Ideally, you
should upgrade (if necessary) to 7.1 or 7.2 and use /Thread=upcalls. If for
some reason you cannot upgrade the O/S you can use the tcpSocketVaxRoutines.cc
enhancement below.
VAX
---
The OpenVMS VAX platform (effectively) ignores the /Thread=upcalls (at least as
of 7.2). Therefore you should use the tcpSocketVaxRoutines.cc enhancement
below. However, since this enhancement relies on a DEC CRTL 7.0 feature, it
requires using the backport libraries on versions of VMS prior to 7.1.
Therefore, upgrading to at least OpenVMS 7.1 is advised.
tcpSocketVaxRoutines.cc
-----------------------
The file [etc]openvms.zip file contains the source file tcpSocketVaxRoutines.cc.
Inclusion of this module into the omniORB object library is controled by the MMS
macro, useTcpSocketVaxRoutines. This macro is automatically set if the platform
is OpenVMS VAX 7.x.
|