Skip to content

Commit 5450331

Browse files
committed
Introduce custom compilers in emulation tutorial
For now, this is not a full tutorial. I would like to collect more feedback from users about how often they encounter this functionality before spending more time writing a complete tutorial for it. Signed-off-by: John Pennycook <john.pennycook@intel.com>
1 parent a34b098 commit 5450331

File tree

1 file changed

+54
-7
lines changed

1 file changed

+54
-7
lines changed

docs/source/emulating-compiler-behavior.rst

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ that are not reflected on the command line (such as their default include
77
paths, or compiler version macros).
88

99
If we believe (or already know!) that these behaviors will impact the
10-
divergence calculation for a code base, we can use a configuration file to
11-
instruct CBI to append additional options when emulating certain compilers.
10+
CBI's analysis of a code base, we can use a configuration file to append
11+
additional options when emulating certain compilers.
1212

1313
.. attention::
1414

@@ -76,12 +76,12 @@ but there is not enough information to decide what the value of
7676
:code:`__GNUC__` should be.
7777

7878

79-
Defining Behaviors
80-
------------------
79+
Defining Implicit Options
80+
-------------------------
8181

82-
``codebasin`` searches for a file called ``.cbi/config``, and uses the
83-
information found in that file to determine implicit compiler behavior. Each
84-
compiler definition is a TOML `table`_, of the form shown below:
82+
CBI searches for a file called ``.cbi/config``, and uses the information found
83+
in that file to determine implicit compiler options. Each compiler definition
84+
is a TOML `table`_, of the form shown below:
8585

8686
.. _`table`: https://toml.io/en/v1.0.0#table
8787

@@ -124,3 +124,50 @@ becomes:
124124
Coverage (%): 100.00
125125
Avg. Coverage (%): 70.37
126126
Total SLOC: 27
127+
128+
129+
Parsing Compiler Options
130+
------------------------
131+
132+
In more complex cases, emulating a compiler's implicit behavior requires CBI to
133+
parse the command-line arguments passed to the compiler. Such emulation
134+
requires CBI to understand which options are important and how they impact
135+
compilation.
136+
137+
CBI ships with a number of compiler definitions included (see `here`_), and the
138+
same syntax can be used to define custom compiler behaviors within the
139+
``.cbi/config`` file.
140+
141+
.. _`here`: https://github.com/intel/code-base-investigator/tree/main/codebasin/compilers
142+
143+
For example, the TOML file below defines behavior for the ``gcc`` and ``g++`` compilers:
144+
145+
.. code-block:: toml
146+
147+
[compiler.gcc]
148+
# This example does not define any implicit options.
149+
150+
# g++ inherits all options of gcc.
151+
[compiler."g++"]
152+
alias_of = "gcc"
153+
154+
# The -fopenmp flag enables a dedicated OpenMP compiler "mode".
155+
[[compiler.gcc.parser]]
156+
flags = ["-fopenmp"]
157+
action = "append_const"
158+
dest = "modes"
159+
const = "openmp"
160+
161+
# In OpenMP mode, the _OPENMP macro is defined.
162+
[[compiler.gcc.modes]]
163+
name = "openmp"
164+
defines = ["_OPENMP"]
165+
166+
This functionality is intended for expert users. In most cases, we expect that
167+
defining implicit options or relying on CBI's built-in compiler emulation
168+
support will be sufficient.
169+
170+
.. attention::
171+
172+
If you encounter a common case where a custom compiler definition is
173+
required, please `open an issue`_.

0 commit comments

Comments
 (0)