fab.tools.compiler#

This file contains the base class for any compiler, and derived classes for gcc, gfortran, icc, ifort

Classes

CCompiler(name, exec_name, suite[, ...])

This is the base class for a C compiler.

Compiler(name, exec_name, suite, category[, ...])

This is the base class for any compiler.

FortranCompiler(name, exec_name, suite, ...)

This is the base class for a Fortran compiler.

Gcc([name, exec_name])

Class for GNU's gcc compiler.

Gfortran([name, exec_name])

Class for GNU's gfortran compiler.

Icc([name, exec_name])

Class for the Intel's icc compiler.

Ifort([name, exec_name])

Class for Intel's ifort compiler.

class fab.tools.compiler.Compiler(name, exec_name, suite, category, compile_flag=None, output_flag=None, omp_flag=None)#

This is the base class for any compiler. It provides flags for

  • compilation only (-c),

  • naming the output file (-o),

  • OpenMP

Parameters:
  • name (str) – name of the compiler.

  • exec_name (Union[str, Path]) – name of the executable to start.

  • suite (str) – name of the compiler suite this tool belongs to.

  • category (Category) – the Category (C_COMPILER or FORTRAN_COMPILER).

  • compile_flag (Optional[str]) – the compilation flag to use when only requesting compilation (not linking). (default: None)

  • output_flag (Optional[str]) – the compilation flag to use to indicate the name of the output file (default: None)

  • omp_flag (Optional[str]) – the flag to use to enable OpenMP (default: None)

get_hash()#
Return type:

int

Returns:

a hash based on the compiler name and version.

compile_file(input_file, output_file, add_flags=None)#

Compiles a file. It will add the flag for compilation-only automatically, as well as the output directives. The current working directory for the command is set to the folder where the source file lives when compile_file is called. This is done to stop the compiler inserting folder information into the mod files, which would cause them to have different checksums depending on where they live.

Parameters:
  • input_file (Path) – the path of the input file.

  • outpout_file – the path of the output file.

  • add_flags (Optional[List[str]]) – additional compiler flags. (default: None)

check_available()#

Checks if the compiler is available. While the method in the Tools base class would be sufficient (when using –version), in case of a compiler we also want to store the compiler version. So, re-implement check_available in a way that will automatically store the compiler version for later usage.

Return type:

bool

Returns:

whether the compiler is available or not. We do this by requesting the compiler version.

get_version()#

Try to get the version of the given compiler. # TODO: why return “” when an error happened? # TODO: we need to properly create integers for compiler versions # to (later) allow less and greater than comparisons.

Expects a version in a certain part of the –version output, which must adhere to the n.n.n format, with at least 2 parts.

Returns:

a version string, e.g ‘6.10.1’, or empty string if a different error happened when trying to get the compiler version.

Raises:

RuntimeError – if the compiler was not found.

class fab.tools.compiler.CCompiler(name, exec_name, suite, compile_flag=None, output_flag=None, omp_flag=None)#

This is the base class for a C compiler. It just sets the category of the compiler as convenience.

Parameters:
  • name (str) – name of the compiler.

  • exec_name (str) – name of the executable to start.

  • suite (str) – name of the compiler suite.

  • category – the Category (C_COMPILER or FORTRAN_COMPILER).

  • compile_flag – the compilation flag to use when only requesting compilation (not linking). (default: None)

  • output_flag – the compilation flag to use to indicate the name of the output file (default: None)

  • omp_flag – the flag to use to enable OpenMP (default: None)

class fab.tools.compiler.FortranCompiler(name, exec_name, suite, module_folder_flag, syntax_only_flag=None, compile_flag=None, output_flag=None, omp_flag=None)#

This is the base class for a Fortran compiler. It is a compiler that needs to support a module output path and support for syntax-only compilation (which will only generate the .mod files).

Parameters:
  • name (str) – name of the compiler.

  • exec_name (str) – name of the executable to start.

  • suite (str) – name of the compiler suite.

  • module_folder_flag (str) – the compiler flag to indicate where to store created module files.

  • syntax_only_flag – flag to indicate to only do a syntax check. The side effect is that the module files are created. (default: None)

  • compile_flag – the compilation flag to use when only requesting compilation (not linking). (default: None)

  • output_flag – the compilation flag to use to indicate the name of the output file (default: None)

  • omp_flag – the flag to use to enable OpenMP (default: None)

property has_syntax_only: bool#
Returns:

whether this compiler supports a syntax-only feature.

set_module_output_path(path)#

Sets the output path for modules.

Params path:

the path to the output directory.

compile_file(input_file, output_file, add_flags=None, syntax_only=False)#

Compiles a file.

Parameters:
  • input_file (Path) – the name of the input file.

  • output_file (Path) – the name of the output file.

  • add_flags (Optional[List[str]]) – additional flags for the compiler. (default: None)

  • syntax_only (bool) – if set, the compiler will only do a syntax check (default: False)

class fab.tools.compiler.Gcc(name='gcc', exec_name='gcc')#

Class for GNU’s gcc compiler.

Parameters:
  • name (str) – name of this compiler. (default: 'gcc')

  • exec_name (str) – name of the executable. (default: 'gcc')

class fab.tools.compiler.Gfortran(name='gfortran', exec_name='gfortran')#

Class for GNU’s gfortran compiler.

Parameters:
  • name (str) – name of this compiler. (default: 'gfortran')

  • exec_name (str) – name of the executable. (default: 'gfortran')

class fab.tools.compiler.Icc(name='icc', exec_name='icc')#

Class for the Intel’s icc compiler.

Parameters:
  • name (str) – name of this compiler. (default: 'icc')

  • exec_name (str) – name of the executable. (default: 'icc')

class fab.tools.compiler.Ifort(name='ifort', exec_name='ifort')#

Class for Intel’s ifort compiler.

Parameters:
  • name (str) – name of this compiler. (default: 'ifort')

  • exec_name (str) – name of the executable. (default: 'ifort')