|
|
Line 1: |
Line 1: |
| by [[Prokushev]]
| | == Description == |
|
| |
|
| In [[Interface Definition Language|previous]] article we looked at SOM [[Interface Definition Language]]. Now we'll try to explain how SOM Compiler works.
| | The SOM compiler is a precompiler for generating SOM source code, mainly used for WPS extensions. |
|
| |
|
| SOM Compiler is a tool to produce various file formats from [[Interface Definition Language]] files. SOM Compiler reads IDL file and produces abstract graph tree. Using abstract tree SOM Compiler generates object graph tree using classes like '''[[SOMTEntryC]]'''. After object graph is ready, SOM Compiler uses classes like '''[[SOMTEmitC]]''' to produce output template. Output file generated with help of '''[[SOMTTemplateOutputC]]''' class.
| | == Source and References == |
|
| |
|
| SOM Compiler uses DLL-name based loading of classes libraries (other programs can user another approach, like WPS does. WPS uses [[Interface Repository]] to find corresponding class). Most of SOM Compiler classes libraries it is implementation of corresponding [[emitter]]. Emitters can be created with help of [[Emitter Framework]].
| | distributed by IBM as part of the IBM OS/2 Toolkit, the SOM Toolkit and the OpenDoc Toolkit |
|
| |
|
| SOM Compiler actually is client program which uses [[Emitter Framework]] classes. SOM Compiler is closed-source, but with open architecture. Only things which can't be easely extended are parser, abstract graph builder and object graph builder. Other things can be ''shadowed'' and replaced by our own. | | see article [[First steps with the SOM compiler]] by [[Prokushev]] |
|
| |
|
| Let's look at SOM Compiler command line syntax to understand how to produce corresponding skeleton code from SOM Compiler template (bellow is SOM Compiler help screen):
| | == License == |
|
| |
|
| sc [-C:D:E:I:S:VU:cd:hi:m:prsvw] f1 f2 ...
| | IBM |
| Where:
| |
| -C <n> - size of comment buffer (default: 200000)
| |
| -D <DEFINE> - same as -D option for cpp.
| |
| -E <var>=<value> - set environment variable.
| |
| -I <INCLUDE> - same as -I option for cpp.
| |
| -S <n> - size of string buffer (default: 200000)
| |
| -U <UNDEFINE> - same as -U option for cpp.
| |
| -V - show version number of compiler.
| |
| -c - ignore all comments.
| |
| -d <dir> - output directory for each emitted file.
| |
| -h - this message.
| |
| -i <file> - use this file name as supplied.
| |
| -m <name[=value]> - add global modifier.
| |
| -p - shorthand for -D__PRIVATE__.
| |
| -r - check releaseorder entries exist (default: FALSE).
| |
| -s <string> - replace SMEMIT variable with <string>
| |
| -u - update interface repository.
| |
| -v - verbose debugging mode (default: FALSE).
| |
| -w - don't display warnings (default: FALSE).
| |
|
| |
| Modifiers:
| |
| addprefixes : adds `functionprefix' to method names in template file
| |
| [no]addstar : [no]add `*' to C bindings for interface references.
| |
| corba : check the source for CORBA compliance.
| |
| csc : force running of OIDL compiler.
| |
| emitappend : append the emitted files at the end of existing file.
| |
| noheader : don't add a header to the emitted file.
| |
| noint : don't warn about "int" causing portability problems.
| |
| nolock : don't lock the IR during update.
| |
| nopp : don't run the source through the pre-processor.
| |
| notc : don't use typecodes for emit information.
| |
| nouseshort : don't generate short names for types.
| |
| pp=<path> : specify a local pre-processor to use.
| |
| tcconsts : generate CORBA TypeCode constants.
| |
|
| |
| Note: All command-line modifiers can be set in the environment
| |
| by changing them to UPPERCASE and preappending "SM" to them.
| |
|
| |
| Environment Variables:
| |
| SMEMIT=[h;ih;c;xh;xih;xc;def;ir;pdl]
| |
| : emitters to run (default : h;ih).
| |
| SMINCLUDE=<dir1>[;<dir2>]+
| |
| : where to search for .idl and .efw files.
| |
| SMKNOWNEXTS=ext[;ext]+
| |
| : add headers to user written emitters.
| |
| SMTMP=<dir>
| |
| : directory to hold intermediate files.
| |
| SOMIR=<path>[;<path>]+
| |
| : list of IRs to search.
| |
|
| |
| Pragmas:
| |
| #pragma somemittypes on : turn on emission of global types.
| |
| #pragma somemittypes off : turn off emission of global types.
| |
| #pragma modifier <modifier stm>; : instead of modifier statement.
| |
|
| |
| Now let's explain each command line switch deeper.
| |
Description
The SOM compiler is a precompiler for generating SOM source code, mainly used for WPS extensions.
Source and References
distributed by IBM as part of the IBM OS/2 Toolkit, the SOM Toolkit and the OpenDoc Toolkit
see article First steps with the SOM compiler by Prokushev
License
IBM