Skip to content

Update folder walkthrough [DOC-5] #2788

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 26, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 121 additions & 2 deletions doc/architectural/folder-walkthrough.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,9 @@ containing the code for a different part of the system.
- Tools

* \ref cbmc
* \ref clobber
* \ref goto-analyzer
* \ref goto-instrument
* \ref goto-diff
* \ref memory-models
* \ref goto-cc
* \ref jbmc

Expand Down Expand Up @@ -84,3 +82,124 @@ develop regression tests.
The `unit/` directory contains the unit test suites. See
\ref compilation-and-development for information on how to run and
develop unit tests.

## Directory dependencies ##

This diagram shows *intended* directory dependencies. Arrows should
be read transitively - dependencies of dependencies are often used
directly.

There are `module_dependencies.txt` files in each directory,
which are checked by the linter. Where directories in `module_dependencies.txt`
are marked with comments such as 'dubious' or 'should go away', these
dependencies have generally not been included in the diagram.

\dot
digraph directory_dependencies {
node [style = filled, color = white];

subgraph cluster_executables {
label = "Executables";
style = filled;
color = lightgrey;
node [style = filled, color = white];
CBMC [URL = "\ref cbmc"];
goto_cc [label = "goto-cc", URL = "\ref goto-cc"];
goto_analyzer [label = "goto-analyzer", URL = "\ref goto-analyzer"];
goto_instrument [label = "goto-instrument", URL = "\ref goto-instrument"];
goto_diff [label = "goto-diff", URL = "\ref goto-diff"];
janalyzer [URL = "\ref janalyzer"];
jdiff [URL = "\ref jdiff"];
JBMC [URL = "\ref jbmc"];
smt2_solver;
}

subgraph cluster_symbolic_execution {
label = "Symbolic Execution";
style = filled;
color = lightgrey;
node [style = filled, color = white];
goto_symex [label = "goto-symex", URL = "\ref goto-symex"];
}

subgraph cluster_abstract_interpretation {
label = "Abstract Interpretation";
style = filled;
color = lightgrey;
node [style = filled, color = white];
pointer_analysis [label = "pointer-analysis", URL = "\ref pointer-analysis"];
analyses [URL = "\ref analyses"];
}

subgraph cluster_goto_programs {
label = "Goto Programs";
style = filled;
color = lightgrey;
goto_programs [label = "goto-programs", URL = "\ref goto-programs"];
linking [URL = "\ref linking"];
}

subgraph cluster_solvers {
label = "Solvers"
style = filled;
color = lightgrey;
solvers [URL = "\ref solvers"];
}

subgraph cluster_languages {
label = "Languages";
style = filled;
color = lightgrey;
ansi_c [label = "ansi-c", URL = "\ref ansi-c"];
langapi [URL = "\ref langapi"];
cpp [URL = "\ref cpp"];
jsil [URL = "\ref jsil"];
java_bytecode [URL = "\ref java_bytecode"];
}

subgraph cluster_utilities {
label = "Utilities";
style = filled;
color = lightgrey;
big_int [label = "big-int", URL = "\ref big-int"];
miniz [URL = "\ref miniz"];
util [URL = "\ref util"];
nonstd [URL = "\ref nonstd"];
json [URL = "\ref json"];
xmllang [URL = "\ref xmllang"];
assembler [URL = "\ref assembler"];
}

JBMC -> { CBMC, java_bytecode };
jdiff -> { goto_diff, java_bytecode };
janalyzer -> { goto_analyzer, java_bytecode };
CBMC -> { goto_instrument, jsil };
goto_diff -> { goto_instrument };
goto_analyzer -> { analyses, jsil, cpp };
goto_instrument -> { goto_symex, cpp };
goto_cc -> { cpp, jsil };
smt2_solver -> solvers;

java_bytecode -> { analyses, miniz };
jsil -> linking;
cpp -> ansi_c;
ansi_c -> langapi;
langapi -> goto_programs;

goto_symex -> { solvers, pointer_analysis };

pointer_analysis -> { analyses, goto_programs };
analyses -> pointer_analysis;

solvers -> util;

linking -> goto_programs;
goto_programs -> { linking, xmllang, json, assembler };

json -> util;
xmllang -> util;
assembler -> util;
util -> big_int;
util -> nonstd;
}
\enddot