Omni OpenMP Fortran 77 Compiler

omf77 - Multi-configuration Omni OpenMP Fortran 77 compiler

       omf77 [driver-options] [compiler-options] filename ...
omf77 is a program to compile OpenMP programs written in Fortran77. omf77 processes input files through one or more of with stages: compilation, assembly, and linking, with preprocessing as a option. This compiler is a kind of "f2c" (Fortran to C) program, which use the native C compiler as the backend. This man page contains descriptions for only omf77-specific aspects of the compiler, though it also contains summaries of some general-purpose options. omf77 is a translator which translate Fortran 77 program into a C program. For a fuller explanation of the compile options, see options of the backend C compiler which is specified in the installation. Fortran source files use the suffix '.f' or '.F': Fortran 77 programs to be preprocessed by cpp use the suffix '.F'.


Display help.
Display Omni version.
Specify a name of configuration, listed below (Omni configuration and platform dependent) as examples:
If not specified, default configuration (depend on Omni configuration and platform) is used.
Specify a command name of backend C compiler. If not specified, default C compiler (depend on Omni configuration and platform) is used.


Compile or assemble the source files, but do not link. The compiler output is an object file corresponding to each source file.
Define macro macro with the string `1' as its definition.
Define macro macro as defn.
Produce debugging information.
Append directory dir to the list of directories searched for include files.
Add directory dir to the list of directories to be searched for `-l'.
Use the library named library when linking.
-o file
Place output in file.
Stop after the stage of compilation proper; do not assemble. The output is an assembler code file for each non-assembler input file specified.
Undefine macro macro.
Stop after parsing leaving the intermediate file.
Stop before calling the backend compiler. Leave the intermediate C file after OpenMP transformation.
Leave intermediate file "tmp.x", "tmp.xx", "tmp.c".
Verbose mode. Echo the executed commands.
Ignore OpenMP pragma.
INTEGER (integer type declaration without size and implicitly declared integer type) will be treated as INTEGER*#. '#' must be one of 2, 4, and 8. The default is 4. 8 is avairable only when a backend C compiler supports 64 bit integer.
REAL (single precision real type and implicitly declared real type) will be treated as REAL*#. '#' must be 4 or 8. The default is 4.
DOUBLE PRECISION (double precision real type) will be treated as REAL*#. '#' must be 4 or 8. The default is 8.
(If configured with '--enable-mreal') Specify a precision of MULTIPLE PRECISION and/or REAL*16 type with '#' in bits. If '#' is less than 52, it will be raised to 52.
Treat variables decalared implicitly as error.
Generate floating point exception checking code.
Generate floating point exception checking code and dumping core when the exception occur.
Not allow to be equivalent character variables to other types by EQUIVALENCE statement.
Not allow to initialize non-character variables with characters by DATA statement.
Not allow non-standard initialization in common block.
Imply all other -pedantic* options.
If alignment of double is NOT sizeof double, treat alignment of double is sizeof double.
Disable complex and quad/multiple precision real (If configured with '--enable-mreal') constant folding for (slight) precision improvement.
(If configured with '--enable-mreal') Disable quad/multiple precision real specific optimization.

If set (as any value) at execution of a program generated by omf77, I/O runtime routines swap the byte oredr of data for direct access I/O mode.

In addition to OpenMP standard environment variables Omni environment variables controls the parallel execution. See Omni Environment Variables .

  • bin/omf77 -- Omni f77 compile driver
  • lib/openmp/libexec/F-front -- Fortran77 front end (F77 to Xobj translator)
  • lib/openmp/libexec/F-back -- Xobj to C translator (available only when Omni was configured with '--enable-jexcBinary')
  • lib/openmp/java/exc.jar -- Java exc toolkit jar file
  • lib/openmp/lib/libompc.a -- Omni OpenMP runtime library
  • lib/openmp/lib/libtlog.a -- Omni OpenMP profile library
  • lib/openmp/lib/libf2c.a -- Omni OpenMP fortran runtime library
  • lib/openmp/lib/ompcf77main.o -- start off routine
  • lib/openmp/lib/ompcf77main_omp.o -- Omni OpenMP start off routine
  • lib/openmp/examples/ -- OpenMP example source code (C, Fortran)
  • lib/openmp/lib/include/omniBackend.h -- Omni header file for backend C compiler, for some runtime functions
  • include/omniConfig.h -- configuration information header of compilation time of Omni itself

Unsupported Features, Known Problem, BUGS and Implementation specifications
  • Gcc-2.9.6 is not supported. Gcc-2.9.6 is default compiler of RedHat-7.0/7.1 x86 package. Please install gcc-3.0 or gcc-2.9.5 at this platform.
  • Dummy procedures must be declared by the "external" statement.
  • Local variables in the main program are allocated statically without the "save" statement.
  • ASSIGN statement works only for assignment GOTO, not fot FORMAT statement label and variable GOTO.
  • The assignment GOTO without the list of statement labels is not supported.
  • Cray pointer extension is supported but doesn't work for CHARACTER variable/array. And MALLOC, FREE are not implemented.
  • In DATA statement, uninitialized area of character variable is initialized by ascii SPC (0x20), not NUL (0x00). This is compatible to many f77 implementation, but incompatible to f2c.
  • Using a local adjustable array as a dummy argument of the ENTRY statement is treated as an error.
  • Linking of a common block that has different length in between separated source files depends on backend C compiler. Some linker might be warning as incompatible length symbol, or treat it as an error.
  • These features were not fully tested:
    • String(character)s, especially copying, comparison, and substring.
    • Direct access I/O mode.
    • Cray pointer extension.
  • Dynamic adjustment of the number of threads is not supported.
  • Nested parallelism is partially supported. As long as idle threads are available, the threads are used to execute nested parallel regions.
  • The threadprivate commons or variables of non-master threads is not initialized properly. Use "copyin" clause to initialize them explicitly.
  • The named threadprivate variables in "copyin" clause is not supported yet.
  • 64 bit platforms are supported. For more detail of Omni 64 bit environment, See Omni 64 bit environment status .
  • If Omni is configured with '--enable-mreal', REAL*16 and MULTIPLE PRECISION type are supported. For more detail of Omni multiple precision real support, See omf77 multiple precision real support .