There are over 1000 C++ files in HHVM's codebase, split into a number of
different directories. This is a rough overview of what lives where (all paths are under hphp/
):
compiler/
: The old parser and bytecode emitter. This is deprecated and is currently being removed; the new replacement is in hack/src/hhbc
.
doc/
: Documentation, of varying age and quality.
hack/src/
: The Hack parser, typechecker, bytecode emitter, and various other Hack-related tools.
hhbbc/
: HipHop Bytecode-to-Bytecode Compiler, our ahead-of-time static analysis program.
hhvm/
: main()
for the hhvm
binary
neo/
: Code to read .hdf
files, used for configuration.
parser/
: The parser grammar and interface.
pch/
: Pre-compiled headers for MSVC (not currently supported).
ppc64-asm/
: Code to read and write ppc64 machine code.
runtime/
: HHVM's runtime.
runtime/base/
: Runtime internals related to Hack types and values (strings, objects, etc...).
runtime/debugger/
: Support for debugging Hack programs at runtime.
runtime/ext/
: Extensions.
runtime/server/
: Built-in servers, both for web requests and other HHVM-specific types of requests.
runtime/test/
: C++ unit tests for various runtime components.
runtime/vm/
: Most of the internals of the VM. The distinction between runtime/base/
and runtime/vm
is a bit fuzzy.
runtime/vm/jit/
: HHVM's JIT compiler.
runtime/vm/verifier/
: The bytecode verifier.
system/
: systemlib, a collection of Hack code that is embedded into hhvm
and always available.
test/
: Integration tests for the whole compiler pipeline, written in PHP and Hack.
tools/
: Utility programs useful in the development and/or use of HHVM.
tools/benchmarks/
: Microbenchmarks. If you run these, take them with a pound of salt; we care much more about macrobenchmarks based on real-life workloads.
tools/gdb/
: Python scripts to assist in debugging hhvm
in gdb
.
tools/hfsort
: HFSort, the algorithm used to lay out functions in both hhvm
and JIT-compiled code.
tools/tc-print/
: TCPrint, a tool to analyze the output of the JIT compiler.
util/
: Functions and data structures used by HHVM that could be useful to other programs, and have no dependencies on other parts of HHVM.
vixl/
: Code to read and write AArch64 machine code.
zend/
: Code imported from the standard PHP interpreter.