# Copyright Vladimir Prus 2004.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.txt
# or copy at https://www.bfgroup.xyz/b2/LICENSE.txt)

#| tag::doc[]

[[b2.reference.tools.compiler.intel]]
= Intel C++

The `intel-*` modules support the Intel C++ command-line compiler.

The module is initialized using the following syntax:

----
using intel : [version] : [c++-compile-command] : [compiler options] ;
----

This statement may be repeated several times, if you want to configure
several versions of the compiler.

If compiler command is not specified, then B2 will look in PATH
for an executable `icpc` (on Linux), or `icl.exe` (on Windows).

The following options can be provided, using
_`<option-name>option-value syntax`_:

`cflags`::
Specifies additional compiler flags that will be used when compiling C
sources.

`cxxflags`::
Specifies additional compiler flags that will be used when compiling C++
sources.

`compileflags`::
Specifies additional compiler flags that will be used when compiling both C
and C++ sources.

`linkflags`::
Specifies additional command line options that will be passed to the linker.

`root`::
For the Linux version, specifies the root directory of the compiler installation.
This option is necessary only if it is not possible to detect this information
from the compiler command -- for example if the specified compiler command is
a user script. For the Windows version, specifies the directory of the
`iclvars.bat` file, for versions prior to 21 ( or 2021 ), or of the `setvars.bat`,
for versions from 21 ( or 2021 ) on up, for configuring the compiler.
Specifying the `root` option without specifying the compiler command allows the
end-user not to have to worry about whether they are compiling 32-bit or 64-bit code,
as the toolset will automatically configure the compiler for the appropriate address
model and compiler command using the `iclvars.bat` or `setvars.bat` batch file.

|# # end::doc[]

# This is a generic 'intel' toolset. Depending on the current
# system, it forwards either to 'intel-linux' or 'intel-win'
# modules.

import feature ;
import os ;
import toolset ;

feature.extend toolset : intel ;
feature.subfeature toolset intel : platform : : propagated link-incompatible ;

rule init ( * : * )
{
    if [ os.name ] = LINUX
    {
        toolset.using intel-linux :
          $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
    }
    else if [ os.name ] = MACOSX
    {
        toolset.using intel-darwin :
          $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
    }
    else
    {
        toolset.using intel-win :
          $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
    }
}
