@@ -35,11 +35,9 @@ containing the code for a different part of the system.
3535- Tools
3636
3737 * \ref cbmc
38- * \ref clobber
3938 * \ref goto-analyzer
4039 * \ref goto-instrument
4140 * \ref goto-diff
42- * \ref memory-models
4341 * \ref goto-cc
4442 * \ref jbmc
4543
@@ -84,3 +82,124 @@ develop regression tests.
8482The ` unit/ ` directory contains the unit test suites. See
8583\ref compilation-and-development for information on how to run and
8684develop unit tests.
85+
86+ ## Directory dependencies ##
87+
88+ This diagram shows * intended* directory dependencies. Arrows should
89+ be read transitively - dependencies of dependencies are often used
90+ directly.
91+
92+ There are ` module_dependencies.txt ` files in each directory,
93+ which are checked by the linter. Where directories in ` module_dependencies.txt `
94+ are marked with comments such as 'dubious' or 'should go away', these
95+ dependencies have generally not been included in the diagram.
96+
97+ \dot
98+ digraph directory_dependencies {
99+ node [ style = filled, color = white] ;
100+
101+ subgraph cluster_executables {
102+ label = "Executables";
103+ style = filled;
104+ color = lightgrey;
105+ node [ style = filled, color = white] ;
106+ CBMC [ URL = "\ref cbmc"] ;
107+ goto_cc [ label = "goto-cc", URL = "\ref goto-cc"] ;
108+ goto_analyzer [ label = "goto-analyzer", URL = "\ref goto-analyzer"] ;
109+ goto_instrument [ label = "goto-instrument", URL = "\ref goto-instrument"] ;
110+ goto_diff [ label = "goto-diff", URL = "\ref goto-diff"] ;
111+ janalyzer [ URL = "\ref janalyzer"] ;
112+ jdiff [ URL = "\ref jdiff"] ;
113+ JBMC [ URL = "\ref jbmc"] ;
114+ smt2_solver;
115+ }
116+
117+ subgraph cluster_symbolic_execution {
118+ label = "Symbolic Execution";
119+ style = filled;
120+ color = lightgrey;
121+ node [ style = filled, color = white] ;
122+ goto_symex [ label = "goto-symex", URL = "\ref goto-symex"] ;
123+ }
124+
125+ subgraph cluster_abstract_interpretation {
126+ label = "Abstract Interpretation";
127+ style = filled;
128+ color = lightgrey;
129+ node [ style = filled, color = white] ;
130+ pointer_analysis [ label = "pointer-analysis", URL = "\ref pointer-analysis"] ;
131+ analyses [ URL = "\ref analyses"] ;
132+ }
133+
134+ subgraph cluster_goto_programs {
135+ label = "Goto Programs";
136+ style = filled;
137+ color = lightgrey;
138+ goto_programs [ label = "goto-programs", URL = "\ref goto-programs"] ;
139+ linking [ URL = "\ref linking"] ;
140+ }
141+
142+ subgraph cluster_solvers {
143+ label = "Solvers"
144+ style = filled;
145+ color = lightgrey;
146+ solvers [ URL = "\ref solvers"] ;
147+ }
148+
149+ subgraph cluster_languages {
150+ label = "Languages";
151+ style = filled;
152+ color = lightgrey;
153+ ansi_c [ label = "ansi-c", URL = "\ref ansi-c"] ;
154+ langapi [ URL = "\ref langapi"] ;
155+ cpp [ URL = "\ref cpp"] ;
156+ jsil [ URL = "\ref jsil"] ;
157+ java_bytecode [ URL = "\ref java_bytecode"] ;
158+ }
159+
160+ subgraph cluster_utilities {
161+ label = "Utilities";
162+ style = filled;
163+ color = lightgrey;
164+ big_int [ label = "big-int", URL = "\ref big-int"] ;
165+ miniz [ URL = "\ref miniz"] ;
166+ util [ URL = "\ref util"] ;
167+ nonstd [ URL = "\ref nonstd"] ;
168+ json [ URL = "\ref json"] ;
169+ xmllang [ URL = "\ref xmllang"] ;
170+ assembler [ URL = "\ref assembler"] ;
171+ }
172+
173+ JBMC -> { CBMC, java_bytecode };
174+ jdiff -> { goto_diff, java_bytecode };
175+ janalyzer -> { goto_analyzer, java_bytecode };
176+ CBMC -> { goto_instrument, jsil };
177+ goto_diff -> { goto_instrument };
178+ goto_analyzer -> { analyses, jsil, cpp };
179+ goto_instrument -> { goto_symex, cpp };
180+ goto_cc -> { cpp, jsil };
181+ smt2_solver -> solvers;
182+
183+ java_bytecode -> { analyses, miniz };
184+ jsil -> linking;
185+ cpp -> ansi_c;
186+ ansi_c -> langapi;
187+ langapi -> goto_programs;
188+
189+ goto_symex -> { solvers, pointer_analysis };
190+
191+ pointer_analysis -> { analyses, goto_programs };
192+ analyses -> pointer_analysis;
193+
194+ solvers -> util;
195+
196+ linking -> goto_programs;
197+ goto_programs -> { linking, xmllang, json, assembler };
198+
199+ json -> util;
200+ xmllang -> util;
201+ assembler -> util;
202+ util -> big_int;
203+ util -> nonstd;
204+ }
205+ \enddot
0 commit comments