mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-21 11:13:30 +00:00
353 lines
14 KiB
Plaintext
353 lines
14 KiB
Plaintext
*Note:* This file is automatically generated from the files
|
|
`install0.texi' and `g77install.texi'. `INSTALL' is *not* a source
|
|
file, although it is normally included within source distributions.
|
|
|
|
This file contains installation information for the GNU Fortran
|
|
compiler. Copyright (C) {No Value For "copyrights-install"} Free
|
|
Software Foundation, Inc. You may copy, distribute, and modify it
|
|
freely as long as you preserve this copyright notice and permission
|
|
notice.
|
|
|
|
Installing GNU Fortran
|
|
**********************
|
|
|
|
The following information describes how to install `g77'.
|
|
|
|
Note that, for users of the GCC-2.95 version of `g77', much of the
|
|
information is obsolete, and is superceded by the GCC installation
|
|
procedures. Such information is accordingly omitted and flagged as
|
|
such.
|
|
|
|
*Warning:* The information below is still under development, and
|
|
might not accurately reflect the `g77' code base of which it is a part.
|
|
Efforts are made to keep it somewhat up-to-date, but they are
|
|
particularly concentrated on any version of this information that is
|
|
distributed as part of a *released* `g77'.
|
|
|
|
In particular, while this information is intended to apply to the
|
|
GCC-2.95 version of `g77', only an official *release* of that version
|
|
is expected to contain documentation that is most consistent with the
|
|
`g77' product in that version.
|
|
|
|
The following information was last updated on 1999-07-17:
|
|
|
|
Prerequisites
|
|
=============
|
|
|
|
For users of the GCC-2.95 version of `g77', this information is
|
|
superceded by the GCC installation instructions.
|
|
|
|
Problems Installing
|
|
===================
|
|
|
|
This is a list of problems (and some apparent problems which don't
|
|
really mean anything is wrong) that show up when configuring, building,
|
|
installing, or porting GNU Fortran.
|
|
|
|
*Note Installation Problems: (gcc)Installation Problems, for more
|
|
information on installation problems that can afflict either `gcc' or
|
|
`g77'.
|
|
|
|
General Problems
|
|
----------------
|
|
|
|
These problems can occur on most or all systems.
|
|
|
|
GNU C Required
|
|
..............
|
|
|
|
Compiling `g77' requires GNU C, not just ANSI C. Fixing this
|
|
wouldn't be very hard (just tedious), but the code using GNU extensions
|
|
to the C language is expected to be rewritten for 0.6 anyway, so there
|
|
are no plans for an interim fix.
|
|
|
|
This requirement does not mean you must already have `gcc' installed
|
|
to build `g77'. As long as you have a working C compiler, you can use a
|
|
"bootstrap" build to automate the process of first building `gcc' using
|
|
the working C compiler you have, then building `g77' and rebuilding
|
|
`gcc' using that just-built `gcc', and so on.
|
|
|
|
Patching GNU CC
|
|
...............
|
|
|
|
`g77' no longer requires application of a patch file to the `gcc'
|
|
compiler tree. In fact, no such patch file is distributed with `g77'.
|
|
This is as of version 0.5.23 and `egcs' version 1.0.
|
|
|
|
Building GNU CC Necessary
|
|
.........................
|
|
|
|
It should be possible to build the runtime without building `cc1'
|
|
and other non-Fortran items, but, for now, an easy way to do that is
|
|
not yet established.
|
|
|
|
Missing strtoul or bsearch
|
|
..........................
|
|
|
|
This information does not apply to the GCC-2.95 version of `g77',
|
|
|
|
Cleanup Kills Stage Directories
|
|
...............................
|
|
|
|
It'd be helpful if `g77''s `Makefile.in' or `Make-lang.in' would
|
|
create the various `stageN' directories and their subdirectories, so
|
|
developers and expert installers wouldn't have to reconfigure after
|
|
cleaning up.
|
|
|
|
That help has arrived as of version 0.5.23 of `g77' and version 1.1
|
|
of `egcs'. Configuration itself no longer creates any particular
|
|
directories that are unique to `g77'. The build procedures in
|
|
`Make-lang.in' take care of that, on demand.
|
|
|
|
LANGUAGES Macro Ignored
|
|
.......................
|
|
|
|
Prior to version 0.5.23 of `g77' and version 1.1 of `egcs', `g77'
|
|
would sometimes ignore the absence of `f77' and `F77' in the
|
|
`LANGUAGES' macro definition used for the `make' command being
|
|
processed.
|
|
|
|
As of `g77' version 0.5.23 and `egcs' version 1.1, `g77' now obeys
|
|
this macro in all relevant situations.
|
|
|
|
However, in versions of `gcc' through 2.8.1, non-`g77' portions of
|
|
`gcc', such as `g++', are known to go ahead and perform various
|
|
language-specific activities when their respective language strings do
|
|
not appear in the `LANGUAGES' macro in effect during that invocation of
|
|
`make'.
|
|
|
|
It is expected that these remaining problems will be fixed in a
|
|
future version of `gcc'.
|
|
|
|
System-specific Problems
|
|
------------------------
|
|
|
|
A linker bug on some versions of AIX 4.1 might prevent building when
|
|
`g77' is built within `gcc'. It might also occur when building within
|
|
`egcs'.
|
|
|
|
Cross-compiler Problems
|
|
-----------------------
|
|
|
|
`g77' has been in alpha testing since September of 1992, and in
|
|
public beta testing since February of 1995. Alpha testing was done by
|
|
a small number of people worldwide on a fairly wide variety of
|
|
machines, involving self-compilation in most or all cases. Beta
|
|
testing has been done primarily via self-compilation, but in more and
|
|
more cases, cross-compilation (and "criss-cross compilation", where a
|
|
version of a compiler is built on one machine to run on a second and
|
|
generate code that runs on a third) has been tried and has succeeded,
|
|
to varying extents.
|
|
|
|
Generally, `g77' can be ported to any configuration to which `gcc',
|
|
`f2c', and `libf2c' can be ported and made to work together, aside from
|
|
the known problems described in this manual. If you want to port `g77'
|
|
to a particular configuration, you should first make sure `gcc' and
|
|
`libf2c' can be ported to that configuration before focusing on `g77',
|
|
because `g77' is so dependent on them.
|
|
|
|
Even for cases where `gcc' and `libf2c' work, you might run into
|
|
problems with cross-compilation on certain machines, for several
|
|
reasons.
|
|
|
|
* There is one known bug (a design bug to be fixed in 0.6) that
|
|
prevents configuration of `g77' as a cross-compiler in some cases,
|
|
though there are assumptions made during configuration that
|
|
probably make doing non-self-hosting builds a hassle, requiring
|
|
manual intervention.
|
|
|
|
* `gcc' might still have some trouble being configured for certain
|
|
combinations of machines. For example, it might not know how to
|
|
handle floating-point constants.
|
|
|
|
* Improvements to the way `libg2c' is built could make building
|
|
`g77' as a cross-compiler easier--for example, passing and using
|
|
`$(LD)' and `$(AR)' in the appropriate ways. (This is improved in
|
|
the `egcs' version of `g77', especially as of version 1.1.)
|
|
|
|
* There are still some challenges putting together the right
|
|
run-time libraries (needed by `libg2c') for a target system,
|
|
depending on the systems involved in the configuration. (This is
|
|
a general problem with cross-compilation, and with `gcc' in
|
|
particular.)
|
|
|
|
Changing Settings Before Building
|
|
=================================
|
|
|
|
Here are some internal `g77' settings that can be changed by editing
|
|
source files in `egcs/gcc/f/' before building.
|
|
|
|
This information, and perhaps even these settings, represent
|
|
stop-gap solutions to problems people doing various ports of `g77' have
|
|
encountered. As such, none of the following information is expected to
|
|
be pertinent in future versions of `g77'.
|
|
|
|
Larger File Unit Numbers
|
|
------------------------
|
|
|
|
As distributed, whether as part of `f2c' or `g77', `libf2c' accepts
|
|
file unit numbers only in the range 0 through 99. For example, a
|
|
statement such as `WRITE (UNIT=100)' causes a run-time crash in
|
|
`libf2c', because the unit number, 100, is out of range.
|
|
|
|
If you know that Fortran programs at your installation require the
|
|
use of unit numbers higher than 99, you can change the value of the
|
|
`MXUNIT' macro, which represents the maximum unit number, to an
|
|
appropriately higher value.
|
|
|
|
To do this, edit the file `egcs/libf2c/libI77/fio.h' in your `g77'
|
|
source tree, changing the following line:
|
|
|
|
#define MXUNIT 100
|
|
|
|
Change the line so that the value of `MXUNIT' is defined to be at
|
|
least one *greater* than the maximum unit number used by the Fortran
|
|
programs on your system.
|
|
|
|
(For example, a program that does `WRITE (UNIT=255)' would require
|
|
`MXUNIT' set to at least 256 to avoid crashing.)
|
|
|
|
Then build or rebuild `g77' as appropriate.
|
|
|
|
*Note:* Changing this macro has *no* effect on other limits your
|
|
system might place on the number of files open at the same time. That
|
|
is, the macro might allow a program to do `WRITE (UNIT=100)', but the
|
|
library and operating system underlying `libf2c' might disallow it if
|
|
many other files have already been opened (via `OPEN' or implicitly via
|
|
`READ', `WRITE', and so on). Information on how to increase these
|
|
other limits should be found in your system's documentation.
|
|
|
|
Always Flush Output
|
|
-------------------
|
|
|
|
Some Fortran programs require output (writes) to be flushed to the
|
|
operating system (under UNIX, via the `fflush()' library call) so that
|
|
errors, such as disk full, are immediately flagged via the relevant
|
|
`ERR=' and `IOSTAT=' mechanism, instead of such errors being flagged
|
|
later as subsequent writes occur, forcing the previously written data
|
|
to disk, or when the file is closed.
|
|
|
|
Essentially, the difference can be viewed as synchronous error
|
|
reporting (immediate flagging of errors during writes) versus
|
|
asynchronous, or, more precisely, buffered error reporting (detection
|
|
of errors might be delayed).
|
|
|
|
`libg2c' supports flagging write errors immediately when it is built
|
|
with the `ALWAYS_FLUSH' macro defined. This results in a `libg2c' that
|
|
runs slower, sometimes quite a bit slower, under certain
|
|
circumstances--for example, accessing files via the networked file
|
|
system NFS--but the effect can be more reliable, robust file I/O.
|
|
|
|
If you know that Fortran programs requiring this level of precision
|
|
of error reporting are to be compiled using the version of `g77' you
|
|
are building, you might wish to modify the `g77' source tree so that
|
|
the version of `libg2c' is built with the `ALWAYS_FLUSH' macro defined,
|
|
enabling this behavior.
|
|
|
|
To do this, find this line in `egcs/libf2c/f2c.h' in your `g77'
|
|
source tree:
|
|
|
|
/* #define ALWAYS_FLUSH */
|
|
|
|
Remove the leading `/* ', so the line begins with `#define', and the
|
|
trailing ` */'.
|
|
|
|
Then build or rebuild `g77' as appropriate.
|
|
|
|
Maximum Stackable Size
|
|
----------------------
|
|
|
|
`g77', on most machines, puts many variables and arrays on the stack
|
|
where possible, and can be configured (by changing
|
|
`FFECOM_sizeMAXSTACKITEM' in `egcs/gcc/f/com.c') to force smaller-sized
|
|
entities into static storage (saving on stack space) or permit
|
|
larger-sized entities to be put on the stack (which can improve
|
|
run-time performance, as it presents more opportunities for the GBE to
|
|
optimize the generated code).
|
|
|
|
*Note:* Putting more variables and arrays on the stack might cause
|
|
problems due to system-dependent limits on stack size. Also, the value
|
|
of `FFECOM_sizeMAXSTACKITEM' has no effect on automatic variables and
|
|
arrays. *Note But-bugs::, for more information.
|
|
|
|
Floating-point Bit Patterns
|
|
---------------------------
|
|
|
|
The `g77' build will crash if an attempt is made to build it as a
|
|
cross-compiler for a target when `g77' cannot reliably determine the
|
|
bit pattern of floating-point constants for the target. Planned
|
|
improvements for version 0.6 of `g77' will give it the capabilities it
|
|
needs to not have to crash the build but rather generate correct code
|
|
for the target. (Currently, `g77' would generate bad code under such
|
|
circumstances if it didn't crash during the build, e.g. when compiling
|
|
a source file that does something like `EQUIVALENCE (I,R)' and `DATA
|
|
R/9.43578/'.)
|
|
|
|
Initialization of Large Aggregate Areas
|
|
---------------------------------------
|
|
|
|
A warning message is issued when `g77' sees code that provides
|
|
initial values (e.g. via `DATA') to an aggregate area (`COMMON' or
|
|
`EQUIVALENCE', or even a large enough array or `CHARACTER' variable)
|
|
that is large enough to increase `g77''s compile time by roughly a
|
|
factor of 10.
|
|
|
|
This size currently is quite small, since `g77' currently has a
|
|
known bug requiring too much memory and time to handle such cases. In
|
|
`egcs/gcc/f/data.c', the macro `FFEDATA_sizeTOO_BIG_INIT_' is defined
|
|
to the minimum size for the warning to appear. The size is specified
|
|
in storage units, which can be bytes, words, or whatever, on a
|
|
case-by-case basis.
|
|
|
|
After changing this macro definition, you must (of course) rebuild
|
|
and reinstall `g77' for the change to take effect.
|
|
|
|
Note that, as of version 0.5.18, improvements have reduced the scope
|
|
of the problem for *sparse* initialization of large arrays, especially
|
|
those with large, contiguous uninitialized areas. However, the warning
|
|
is issued at a point prior to when `g77' knows whether the
|
|
initialization is sparse, and delaying the warning could mean it is
|
|
produced too late to be helpful.
|
|
|
|
Therefore, the macro definition should not be adjusted to reflect
|
|
sparse cases. Instead, adjust it to generate the warning when densely
|
|
initialized arrays begin to cause responses noticeably slower than
|
|
linear performance would suggest.
|
|
|
|
Alpha Problems Fixed
|
|
--------------------
|
|
|
|
`g77' used to warn when it was used to compile Fortran code for a
|
|
target configuration that is not basically a 32-bit machine (such as an
|
|
Alpha, which is a 64-bit machine, especially if it has a 64-bit
|
|
operating system running on it). That was because `g77' was known to
|
|
not work properly on such configurations.
|
|
|
|
As of version 0.5.20, `g77' is believed to work well enough on such
|
|
systems. So, the warning is no longer needed or provided.
|
|
|
|
However, support for 64-bit systems, especially in areas such as
|
|
cross-compilation and handling of intrinsics, is still incomplete. The
|
|
symptoms are believed to be compile-time diagnostics rather than the
|
|
generation of bad code. It is hoped that version 0.6 will completely
|
|
support 64-bit systems.
|
|
|
|
Quick Start
|
|
===========
|
|
|
|
For users of the GCC-2.95 version of `g77', this information is
|
|
superceded by the GCC installation instructions.
|
|
|
|
Complete Installation
|
|
=====================
|
|
|
|
For users of the GCC-2.95 version of `g77', this information is
|
|
superceded by the GCC installation instructions.
|
|
|
|
Distributing Binaries
|
|
=====================
|
|
|
|
For users of the GCC-2.95 version of `g77', this information is
|
|
superceded by the GCC installation instructions.
|
|
|