|
|
|
|
|
|
|
|
will use the provided executable names when compiling files for the respective |
|
|
will use the provided executable names when compiling files for the respective |
|
|
languages. |
|
|
languages. |
|
|
|
|
|
|
|
|
To specify compilation flags, the ``Flags`` option can be used: |
|
|
|
|
|
|
|
|
To specify compilation flags, the ``flags`` option can be used: |
|
|
|
|
|
|
|
|
.. code-block:: |
|
|
.. code-block:: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.. note:: |
|
|
.. note:: |
|
|
Use ``Warning-Flags`` to specify options regarding compiler warnings. |
|
|
|
|
|
|
|
|
Use ``warning_flags`` to specify options regarding compiler warnings. |
|
|
|
|
|
|
|
|
Flags for linking executables can be specified with ``link_flags``: |
|
|
Flags for linking executables can be specified with ``link_flags``: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Toolchain Option Reference |
|
|
Toolchain Option Reference |
|
|
************************** |
|
|
************************** |
|
|
|
|
|
|
|
|
The following options are available to be specified within a toolchain file: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Understanding Flags and Shell Parsing |
|
|
|
|
|
------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
Many of the ``dds`` toolchain parameters accept argument lists or shell-string |
|
|
|
|
|
lists. If such an option is given a single string, then that string is split |
|
|
|
|
|
using the syntax of a POSIX shell command parser. It accepts both single ``'`` |
|
|
|
|
|
and double ``"`` quote characters as argument delimiters. |
|
|
|
|
|
|
|
|
|
|
|
If an option is given a list of strings instead, then each string in that |
|
|
|
|
|
array is treated as a full command line argument and is passed as such. |
|
|
|
|
|
|
|
|
|
|
|
For example, this sample with ``flags``:: |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
flags: "-fsanitize=address -fPIC" |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
is equivalent to this one:: |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
flags: ["-fsanitize=address", "-fPIC"] |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Despite splitting strings as-if they were shell commands, ``dds`` does nothing |
|
|
|
|
|
else shell-like. It does not expand environment variables, nor does it expand |
|
|
|
|
|
globs. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``compiler_id`` |
|
|
``compiler_id`` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Specify the language versions for C and C++, respectively. By default, ``dds`` |
|
|
Specify the language versions for C and C++, respectively. By default, ``dds`` |
|
|
will not set any language version. Using this option requires that the |
|
|
will not set any language version. Using this option requires that the |
|
|
``compiler_id`` be specified. |
|
|
|
|
|
|
|
|
``compiler_id`` be specified. Setting this value will cause the corresponding |
|
|
|
|
|
language-version flag to be passed to the compiler. |
|
|
|
|
|
|
|
|
Valid ``c_version`` values are: |
|
|
Valid ``c_version`` values are: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If you need to tweak warnings further, use this option. |
|
|
If you need to tweak warnings further, use this option. |
|
|
|
|
|
|
|
|
|
|
|
On GNU-like compilers, the default flags are ``-Wall -Wextra -Wpedantic |
|
|
|
|
|
-Wconversion``. On MSVC the default flag is ``/W4``. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``flags``, ``c_flags``, and ``cxx_flags`` |
|
|
``flags``, ``c_flags``, and ``cxx_flags`` |
|
|
----------------------------------------- |
|
|
----------------------------------------- |
|
|
|
|
|
|
|
|
you are doing. Their values will be inferred from ``compiler_id``. |
|
|
you are doing. Their values will be inferred from ``compiler_id``. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Command Templates |
|
|
|
|
|
----------------- |
|
|
|
|
|
|
|
|
|
|
|
Many of the below options take the form of command-line templates. These are |
|
|
|
|
|
templates from which ``dds`` will create a command-line for a subprocess, |
|
|
|
|
|
possibly by combining them together. |
|
|
|
|
|
|
|
|
|
|
|
Each command template allows some set of placeholders. Each instance of the |
|
|
|
|
|
placeholder string will be replaced in the final command line. Refer to each |
|
|
|
|
|
respective option for more information. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``deps_mode`` |
|
|
``deps_mode`` |
|
|
------------- |
|
|
------------- |
|
|
|
|
|
|
|
|
Specify the way in which ``dds`` should track compilation dependencies. One |
|
|
Specify the way in which ``dds`` should track compilation dependencies. One |
|
|
of ``gnu``, ``msvc``, or ``none``. |
|
|
of ``gnu``, ``msvc``, or ``none``. |
|
|
|
|
|
|
|
|
|
|
|
.. note:: |
|
|
|
|
|
If ``none``, then dependency tracking will be disabled entirely. This will |
|
|
|
|
|
prevent ``dds`` from tracking interdependencies of source files, and |
|
|
|
|
|
inhibits incremental compilation. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``c_compile_file`` |
|
|
|
|
|
------------------ |
|
|
|
|
|
|
|
|
``c_compile_file`` and ``cxx_compile_file`` |
|
|
|
|
|
------------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
Override the *command template* that is used to compile source files. |
|
|
|
|
|
|
|
|
Override the *command template* that is used to compile C source files. |
|
|
|
|
|
|
|
|
This template expects three placeholders: |
|
|
|
|
|
|
|
|
|
|
|
- ``[in]`` is the path to the file that will be compiled. |
|
|
|
|
|
- ``[out]`` is the path to the object file that will be generated. |
|
|
|
|
|
- ``[flags]`` is the placeholder of the compilation flags. This placeholder |
|
|
|
|
|
must not be attached to any other arguments. The compilation flag argument |
|
|
|
|
|
list will be inserted in place of ``[flags]``. |
|
|
|
|
|
|
|
|
``cxx_compile_file`` |
|
|
|
|
|
-------------------- |
|
|
|
|
|
|
|
|
Defaults:: |
|
|
|
|
|
|
|
|
Override the *command template* that is used to compile C++ source files. |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
// On GNU-like compilers (GCC, Clang): |
|
|
|
|
|
c_compile_file: "<compiler> -fPIC -pthread [flags] -c [in] -o[out]", |
|
|
|
|
|
cxx_compile_file: "<compiler> -fPIC -pthread [flags] -c [in] -o[out]", |
|
|
|
|
|
// When `optimize` is enabled, `-O2` is added as a flag |
|
|
|
|
|
// When `debug` is enabled, `-g` is added as a flag |
|
|
|
|
|
|
|
|
|
|
|
// On MSVC: |
|
|
|
|
|
c_compile_file: "cl.exe /MT /nologo /permissive- [flags] /c [in] /Fo[out]", |
|
|
|
|
|
cxx_compile_file: "cl.exe /MT /EHsc /nologo /permissive- [flags] /c [in] /Fo[out]", |
|
|
|
|
|
// When `optimize` is enabled, `/O2` is added as a flag |
|
|
|
|
|
// When `debug` is enabled, `/Z7` and `/DEBUG` are added, and `/MT` becomes `/MTd` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``create_archive`` |
|
|
``create_archive`` |
|
|
|
|
|
|
|
|
Override the *command template* that is used to generate static library archive |
|
|
Override the *command template* that is used to generate static library archive |
|
|
files. |
|
|
files. |
|
|
|
|
|
|
|
|
|
|
|
This template expects three placeholders: |
|
|
|
|
|
|
|
|
|
|
|
- ``[in]`` is the a placeholder for the list of inputs. It must not be attached |
|
|
|
|
|
to any other arguments. The list of input paths will be inserted in place of |
|
|
|
|
|
``[in]``. |
|
|
|
|
|
- ``[out]`` is the placeholder for the output path for the static library |
|
|
|
|
|
archive. |
|
|
|
|
|
|
|
|
|
|
|
Defaults:: |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
// On GNU-like: |
|
|
|
|
|
create_archive: "ar rcs [out] [in]", |
|
|
|
|
|
// On MSVC: |
|
|
|
|
|
create_archive: "lib /nologo /OUT:[out] [in]", |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``link_executable`` |
|
|
``link_executable`` |
|
|
------------------- |
|
|
------------------- |
|
|
|
|
|
|
|
|
Override the *command template* that is used to link executables. |
|
|
Override the *command template* that is used to link executables. |
|
|
|
|
|
|
|
|
|
|
|
This template expects the same placeholders as ``create_archive``, but |
|
|
|
|
|
``[out]`` is a placeholder for the executable file rather than a static |
|
|
|
|
|
library. |
|
|
|
|
|
|
|
|
|
|
|
Defaults:: |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
// For GNU-like: |
|
|
|
|
|
link_executable: "<compiler> -fPIC [in] -pthread -o[out] [flags]", |
|
|
|
|
|
// For MSVC: |
|
|
|
|
|
link_executable: "cl.exe /nologo /EHsc [in] /Fe[out]", |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
``include_template`` |
|
|
|
|
|
-------------------- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``include_template`` and ``external_include_template`` |
|
|
|
|
|
------------------------------------------------------ |
|
|
|
|
|
|
|
|
Override the *command template* for the flags to specify a header search path. |
|
|
Override the *command template* for the flags to specify a header search path. |
|
|
|
|
|
``external_include_template`` will be used to specify the include search path |
|
|
|
|
|
for a directory that is "external" (i.e. does not live within the main project). |
|
|
|
|
|
|
|
|
|
|
|
For each directory added to the ``#include`` search path, this argument |
|
|
|
|
|
template is instantiated in the ``[flags]`` for the compilation. |
|
|
|
|
|
|
|
|
``external_include_template`` |
|
|
|
|
|
----------------------------- |
|
|
|
|
|
|
|
|
This template expects only a single placeholder: ``[path]``, which will be |
|
|
|
|
|
replaced with the path to the directory to be added to the search path. |
|
|
|
|
|
|
|
|
Override the *command template* for the flags to specify a header search path |
|
|
|
|
|
of an external library. |
|
|
|
|
|
|
|
|
On MSVC, this defaults to ``/I [path]``. On GNU-like, ``-isystem [path]`` is |
|
|
|
|
|
used for ``external_include_template`` and ``-I [path]`` for |
|
|
|
|
|
``include_template``. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``define_template`` |
|
|
``define_template`` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Override the *command template* for the flags to set a preprocessor definition. |
|
|
Override the *command template* for the flags to set a preprocessor definition. |
|
|
|
|
|
|
|
|
|
|
|
This template expects only a single placeholder: ``[def]``, which is the |
|
|
|
|
|
preprocessor macro definition argument. |
|
|
|
|
|
|
|
|
|
|
|
On MSVC, this defaults to ``/D [def]``. On GNU-like compilers, this is |
|
|
|
|
|
``-D [def]``. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``tty_flags`` |
|
|
``tty_flags`` |
|
|
------------- |
|
|
------------- |
|
|
|
|
|
|
|
|
Supply additional flags when compiling/linking that will only be applied if |
|
|
Supply additional flags when compiling/linking that will only be applied if |
|
|
standard output is an ANSI-capable terminal. (e.g. On GNU and Clang this will |
|
|
|
|
|
be ``-fdiagnostics-color`` by default.) |
|
|
|
|
|
|
|
|
standard output is an ANSI-capable terminal. |
|
|
|
|
|
|
|
|
|
|
|
On GNU and Clang this will be ``-fdiagnostics-color`` by default. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``obj_prefix``, ``obj_suffix``, ``archive_prefix``, ``archive_suffix``, |
|
|
``obj_prefix``, ``obj_suffix``, ``archive_prefix``, ``archive_suffix``, |