The best entrypoint to start reading the code is probably src/main/scala/util/RunUtils, which contains the main execution path and invokes each loading, analysis, and translation operation in sequence.
- src/main:
- scala: BASIL source
- analysis: static analysis source, including IR expression evaluation
- solvers: analysis solver implementation
- BitVectorEval.scala: evaluation of bitvector operatiosn
- bap: ADT AST definition used in the BAP frontend
- specification: Specification file loading
- boogie: Boogie AST definition used in the backend
- gtirb: Code for parsing gtirb file contents
- ir: Implementation of BASIL IR
- dsl: IR construction convenience methods
- Visitor.scala: vistor pattern for IR
- Program.scala: IR Programs, Procedures, and Blocks
- Statement.scala: IR statements and control-flow commands
- Expr.scala: IR Expressions
- IRCursor.scala: IR CFG Iterator
- translating: Implementations of translations between IRs
- util: BASIL internal utilities, logging, configuration etc.
- cfg_visualiser: dot digraph model for displaying CFGs
- analysis: static analysis source, including IR expression evaluation
- antlr4: grammar definitions for Antlr parser generator
- protobuf: imported ProtocolBuffer definitions for gtirb
- scala: BASIL source
- src/test: unit test cases
- correct: System test (SystemTests.scala) examples which should verify
- incorrect: System test (SystemTests.scala) examples which should not verify
- make: Makefiles for lifting the System test examples
- analysis: static analysis tests
- scala: other unit tests
- docker: podman container definition files
- docs: high-level documentation for BASIL development and design. These should be kept up-to-date but should be relatively abstract so that implementation changes don't require an overhaul to the documentation.
- examples, examples-rg: examples which don't fully work, but we want to keep for reference. These are often not up to date with recent versions of BASIL.
- scripts: utility scripts