... | @@ -12,7 +12,8 @@ |
... | @@ -12,7 +12,8 @@ |
|
|
|
|
|
| Version | Build |
|
|
| Version | Build |
|
|
|---------|-------|
|
|
|---------|-------|
|
|
| v2106 | [Build][latest-build] |
|
|
| v2112 | [Build][latest-build] |
|
|
|
|
| v2106 | [Build][v2106-build] |
|
|
| v2012 | [Build][v2012-build] |
|
|
| v2012 | [Build][v2012-build] |
|
|
| v2006 | [Build][v2006-build] |
|
|
| v2006 | [Build][v2006-build] |
|
|
| v1912 | [Build][v1912-build] |
|
|
| v1912 | [Build][v1912-build] |
|
... | @@ -96,103 +97,71 @@ See [cross-compilation](/building/cross-compile-mingw) for an example |
... | @@ -96,103 +97,71 @@ See [cross-compilation](/building/cross-compile-mingw) for an example |
|
of its use.
|
|
of its use.
|
|
|
|
|
|
|
|
|
|
### Processor-specific handling
|
|
|
|
<a name="processor-specific-handling"></a>
|
|
|
|
|
|
|
|
Processor-specific builds are typically handled by creating a new
|
|
|
|
compilation option. For example, to create Broadwell-specific options:
|
|
|
|
```
|
|
|
|
$ cd wmake/rules/linux64Gcc
|
|
|
|
$ cp c++Opt c++OptBdw
|
|
|
|
```
|
|
|
|
edit this file and then use WM_COMPILE_OPTION=OptBdw in the `prefs.sh`
|
|
|
|
before re-sourcing the OpenFOAM environment.
|
|
|
|
|
|
|
|
Since OpenFOAM is purely C++ code, there is no need to apply special
|
|
|
|
processor-specific optimizations for C code (the regular `-O2`
|
|
|
|
optimization is fine) since these components only appear as part of the
|
|
|
|
wmake build toolchain itself.
|
|
|
|
|
|
|
|
|
|
|
|
### Different compiler versions
|
|
### Different compiler versions
|
|
<a name="different-compiler-versions"></a>
|
|
<a name="different-compiler-versions"></a>
|
|
|
|
|
|
By default, OpenFOAM handles newer/older non-system compilers as
|
|
By default, OpenFOAM handles newer/older non-system compilers as
|
|
_ThirdParty_ installations and uses the combination of `WM_COMPILER`
|
|
_ThirdParty_ installations and uses the combination of `WM_COMPILER`
|
|
and `WM_COMPILER_TYPE` to select them. In some cases, however, it can
|
|
and `WM_COMPILER_TYPE` to select them. In some cases, however, it is
|
|
be much more convenient for the user to install prebuilt compiler
|
|
more convenient to install prebuilt compiler binaries as *system*
|
|
binaries as *system* compilers (e.g., using deb or rpm packages).
|
|
compilers (e.g., using deb or rpm packages). These compilers are
|
|
This poses a slight problem since the OpenFOAM build rules normally
|
|
typically distinguished by an additional version suffix (eg, `gcc-11`,
|
|
use the main compiler name (`gcc`, `clang` etc) without any additional
|
|
`clang-13`, `clang-13.0` etc).
|
|
version information, but the various *system* compilers are frequently
|
|
|
|
installed with versioned names such as `gcc-8`, `clang-10` etc.
|
|
|
|
|
|
|
|
Here is a simple way to solve this, using clang-10 on openSUSE for the
|
|
The `WM_COMPILE_CONTROL` environment can be used to add the additional
|
|
example:
|
|
resolution necessary. For example,
|
|
|
|
|
|
1. Install the desired system compiler.
|
|
|
|
In this case [clang-10 from tools:compiler][llvm10-opensuse] which
|
|
|
|
installs `/usr/bin/clang-10` and `/usr/bin/clang++-10`.
|
|
|
|
|
|
|
|
2. Next override the OpenFOAM compiler calls, but without blindly
|
|
|
|
rewriting everything.
|
|
|
|
|
|
|
|
We create a new directory for our special rules:
|
|
|
|
```
|
|
```
|
|
mkdir wmake/rules/linux64Clang100
|
|
export WM_COMPILER=Gcc
|
|
```
|
|
export WM_COMPILE_CONTROL="version=11"
|
|
Inside this directory, we add an general rules file
|
|
|
|
(`wmake/rules/linux64Clang100/general`) with the following contents:
|
|
|
|
```
|
|
|
|
# Override compiler calls for llvm-10
|
|
|
|
|
|
|
|
cc = clang-10
|
|
|
|
CC = clang++-10 -std=c++11
|
|
|
|
```
|
|
```
|
|
Or if this shall be restricted to system compilers only:
|
|
This will add the suffix `-11` to the regular compiler names.
|
|
|
|
Note, that is normally good practice to add some compiler version
|
|
|
|
information into the build name as well. For example,
|
|
```
|
|
```
|
|
# Override system compiler calls for llvm-10
|
|
export WM_COMPILER=Clang130
|
|
ifeq (system,$(WM_COMPILER_TYPE))
|
|
export WM_COMPILE_CONTROL="version=13.0"
|
|
cc = clang-10
|
|
|
|
CC = clang++-10 -std=c++11
|
|
|
|
endif
|
|
|
|
```
|
|
```
|
|
|
|
Be certain to verify that the rules have actually been set as expected:
|
|
3. The final step is to select this compiler definition with the following
|
|
|
|
combination:
|
|
|
|
```
|
|
```
|
|
# Preferences for system Clang100
|
|
wmake -show-cxx
|
|
|
|
wmake -show-path-cxx
|
|
export WM_COMPILER=Clang100
|
|
|
|
export WM_COMPILER_TYPE=system
|
|
|
|
```
|
|
```
|
|
|
|
|
|
If this change represents your standard default compiler definition,
|
|
If this change represents your standard default compiler definition,
|
|
then place the information into the `etc/prefs.sh` file (see the
|
|
then place the information into the `etc/prefs.sh` file (see the
|
|
`etc/bashrc` file for some details) and re-source your OpenFOAM
|
|
`etc/bashrc` file for some details) and re-source your OpenFOAM
|
|
environment.
|
|
environment. If you would like to selectively enable this compiler
|
|
|
|
definition, a common means is to place the same definition information
|
|
If you would like to selectively enable this compiler definition, a
|
|
into a user configuration file (for example, `~/.OpenFOAM/clang130`)
|
|
common means is to place the same definition information into a user
|
|
and then specify that configuration when sourcing your OpenFOAM
|
|
configuration file (for example, `~/.OpenFOAM/clang100`) and then
|
|
environment. For example,
|
|
specify that configuration when sourcing your OpenFOAM environment.
|
|
|
|
For example,
|
|
|
|
```
|
|
```
|
|
source /path/to/OpenFOAM-version/etc/bashrc clang100
|
|
source /path/to/OpenFOAM-version/etc/bashrc clang130
|
|
```
|
|
```
|
|
|
|
|
|
The `bashrc` will locate and use the configuration file, after which the
|
|
The `bashrc` will locate and use the configuration file, after which the
|
|
compiler will be properly selected. To verify that this is indeed the
|
|
compiler will be properly selected. Again, to verify everything has actually
|
|
case:
|
|
been set properly:
|
|
```
|
|
```
|
|
wmake -show-cxx
|
|
wmake -show-cxx
|
|
|
|
wmake -show-path-cxx
|
|
```
|
|
```
|
|
should display the selected compiler.
|
|
|
|
You may also wish to verify its path:
|
|
### Processor-specific handling
|
|
|
|
<a name="processor-specific-handling"></a>
|
|
|
|
|
|
|
|
Processor-specific builds are typically handled by creating a new
|
|
|
|
compilation option. For example, to create Broadwell-specific options:
|
|
```
|
|
```
|
|
wmake -show-path-cxx
|
|
$ cd wmake/rules/linux64Gcc
|
|
|
|
$ cp c++Opt c++OptBdw
|
|
```
|
|
```
|
|
For older versions, `which $(wmake -show-cxx)` instead.
|
|
edit this file and then use WM_COMPILE_OPTION=OptBdw in the `prefs.sh`
|
|
|
|
before re-sourcing the OpenFOAM environment.
|
|
|
|
|
|
|
|
Since OpenFOAM is purely C++ code, there is no need to apply special
|
|
|
|
processor-specific optimizations for C code (the regular `-O2`
|
|
|
|
optimization is fine) since these components only appear as part of the
|
|
|
|
wmake build toolchain itself.
|
|
|
|
|
|
|
|
|
|
--------
|
|
--------
|
... | @@ -203,11 +172,10 @@ Copyright (C) 2020-2021 OpenCFD Ltd. |
... | @@ -203,11 +172,10 @@ Copyright (C) 2020-2021 OpenCFD Ltd. |
|
|
|
|
|
[latest-build]: https://develop.openfoam.com/Development/openfoam/blob/develop/doc/Build.md
|
|
[latest-build]: https://develop.openfoam.com/Development/openfoam/blob/develop/doc/Build.md
|
|
|
|
|
|
|
|
[v2206-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2206/doc/Build.md
|
|
[v2112-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2112/doc/Build.md
|
|
[v2112-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2112/doc/Build.md
|
|
[v2106-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2106/doc/Build.md
|
|
[v2106-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2106/doc/Build.md
|
|
[v2012-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2012/doc/Build.md
|
|
[v2012-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2012/doc/Build.md
|
|
[v2006-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2006/doc/Build.md
|
|
[v2006-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v2006/doc/Build.md
|
|
[v1912-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v1912/doc/Build.md
|
|
[v1912-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v1912/doc/Build.md
|
|
[v1906-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v1906/doc/Build.md |
|
[v1906-build]: https://develop.openfoam.com/Development/openfoam/blob/maintenance-v1906/doc/Build.md |
|
|
|
|
|
[llvm10-opensuse]: https://software.opensuse.org//download.html?project=devel%3Atools%3Acompiler&package=llvm10 |
|
|