Skip to content

Commit c2a1957

Browse files
authored
Merge pull request #293 from awvwgk/readme
Write a more verbose introduction to building stdlib
2 parents dc0ba16 + 25cbd1a commit c2a1957

File tree

1 file changed

+91
-18
lines changed

1 file changed

+91
-18
lines changed

Diff for: README.md

+91-18
Original file line numberDiff line numberDiff line change
@@ -40,54 +40,127 @@ git clone https://github.com/fortran-lang/stdlib
4040
cd stdlib
4141
```
4242

43+
4344
### Requirements
4445

45-
The preprocessor ```fypp``` (https://github.com/aradi/fypp) is needed because metaprogramming is used.
46-
It can be installed using the command line installer ```pip```.
46+
To build the Fortran standard library you need
47+
48+
- a Fortran 2008 compliant compiler, or better, a Fortran 2018 compliant compiler
49+
(GCC Fortran and Intel Fortran compilers are known to work for stdlib)
50+
- CMake version 3.14 or newer (alternatively Make can be used)
51+
- a build backend for CMake, like Make or Ninja (the latter is recommended on Windows)
52+
- the [fypp](https://github.com/aradi/fypp) preprocessor (used as meta-programming tool)
53+
54+
If your system package manager does not provide the required build tools, all build dependencies can be installed with the Python command line installer ``pip``:
55+
4756
```sh
48-
pip install fypp
57+
pip install --user fypp cmake ninja
4958
```
5059

60+
Alternatively, you can install the build tools from the conda-forge channel with the conda package manager:
61+
62+
```sh
63+
conda config --add channels conda-forge
64+
conda create -n stdlib-tools fypp cmake ninja
65+
conda activate stdlib-tools
66+
```
67+
68+
You can install conda using the [miniforge installer](https://github.com/conda-forge/miniforge/releases).
69+
Also, you can install a Fortran compiler from conda-forge by installing the ``fortran-compiler`` package, which installs GFortran.
70+
71+
72+
### Supported Compilers
73+
74+
The following combinations are tested on the default branch of stdlib:
75+
76+
Name | Version | Platform | Architecture
77+
--- | --- | --- | ---
78+
GCC Fortran | 7, 8, 9, 10 | Ubuntu 18.04 | x86_64
79+
GCC Fortran | 7, 8, 9, 10 | MacOS Catalina 10.15 | x86_64
80+
GCC Fortran | 8 | Windows Server 2019 | x86_64
81+
GCC Fortran (MSYS) | 10 | Windows Server 2019 | x86_64
82+
GCC Fortran (MinGW) | 10 | Windows Server 2019 | x86_64, i686
83+
Intel oneAPI classic | 2021.1 | Ubuntu 20.04 | x86_64
84+
85+
We try to test as many available compilers and platforms as possible.
86+
A list of tested compilers which are currently not working and the respective issue are listed below.
87+
88+
Name | Version | Platform | Architecture | Status
89+
--- | --- | --- | --- | ---
90+
GCC Fortran | 7.4 | Windows 10 | i686 | [#296](https://github.com/fortran-lang/stdlib/issues/296)
91+
NVIDIA HPC SDK | 20.7, 20.9, 20.11 | Manjaro Linux 20 | x86_64 | [#107](https://github.com/fortran-lang/stdlib/issues/107)
92+
NAG | 7.0 | RHEL | x86_64 | [#108](https://github.com/fortran-lang/stdlib/issues/108)
93+
Intel Parallel Studio XE | 16, 17, 18 | OpenSUSE | x86_64 | failed to compile
94+
95+
Please share your experience with successful and failing builds for compiler/platform/architecture combinations not covered above.
96+
97+
5198
### Build with CMake
5299

100+
Configure the build with
101+
53102
```sh
54103
cmake -B build
104+
```
105+
106+
You can pass additional options to CMake to customize the build.
107+
Important options are
108+
109+
- `-G Ninja` to use the Ninja backend instead of the default Make backend. Other build backends are available with a similar syntax.
110+
- `-DCMAKE_INSTALL_PREFIX` is used to provide the install location for the library.
111+
- `-DCMAKE_MAXIMUM_RANK` the maximum array rank procedures should be generated for.
112+
The default is 15 for Fortran 2003 compliant compilers, otherwise 7 for compilers not supporting Fortran 2003 completely yet.
113+
The minimum required rank to compile this project is 4.
114+
Compiling with maximum rank 15 can be resource intensive and requires at least 16 GB of memory to allow parallel compilation or 4 GB memory for sequential compilation.
115+
- `-DBUILD_SHARED_LIBS` set to `on` in case you want link your application dynamically against the standard library (default: `off`).
116+
117+
For example, to configure a build using the Ninja backend and generating procedures up to rank 7, which is installed to your home directory use
55118

119+
```sh
120+
cmake -B build -G Ninja -DCMAKE_MAXIMUM_RANK=7 -DCMAKE_INSTALL_PREFIX=$HOME/.local
121+
```
122+
123+
To build the standard library run
124+
125+
```sh
56126
cmake --build build
127+
```
57128

129+
To test your build, run the test suite after the build has finished with
130+
131+
```sh
58132
cmake --build build --target test
59133
```
60134

61-
### Build with make
135+
Please report failing tests on our [issue tracker](https://github.com/fortran-lang/stdlib/issues/new/choose) including details on the compiler used, the operating system and platform architecture.
62136

63-
Alternatively, you can build using provided Makefiles:
137+
To install the project to the declared prefix run
64138

139+
```sh
140+
cmake --install build
65141
```
66-
make -f Makefile.manual
67-
```
68142

69-
## Limiting the maximum rank of generated procedures
143+
Now you have a working version of stdlib you can use for your project.
144+
145+
146+
### Build with make
70147

71-
Stdlib's preprocessor (fypp) by default generates specific procedures for arrays of all ranks, up to rank 15.
72-
This can result in long compilation times and, on some computers, exceeding available memory.
73-
If you know that you won't need all 15 ranks, you can specify the maximum rank for which the specific procedures will be generated.
74-
For example, with CMake:
148+
Alternatively, you can build using provided Makefiles:
75149

76150
```sh
77-
cmake -B build -DCMAKE_MAXIMUM_RANK=4
78-
cmake --build build
79-
cmake --build build --target test
151+
make -f Makefile.manual
80152
```
81-
or as follows with `make`:
153+
154+
You can limit the maximum rank by setting ``-DMAXRANK=<num>`` in the ``FYPPFLAGS`` environment variable:
82155

83156
```sh
84157
make -f Makefile.manual FYPPFLAGS=-DMAXRANK=4
85158
```
86-
Note that currently the minimum value for maximum rank is 4.
159+
87160

88161
## Documentation
89162

90-
Documentation is a work in progress (see issue #4) but is currently available at https://stdlib.fortran-lang.org.
163+
Documentation is a work in progress (see issue [#4](https://github.com/fortran-lang/stdlib/issues/4)) but already available at [stdlib.fortran-lang.org](https://stdlib.fortran-lang.org).
91164
This includes API documentation automatically generated from static analysis and markup comments in the source files
92165
using the [FORD](https://github.com/Fortran-FOSS-programmers/ford/wiki) tool,
93166
as well as a specification document or ["spec"](https://stdlib.fortran-lang.org/page/specs/index.html) for each proposed feature.

0 commit comments

Comments
 (0)