# Project Structure - `env`: Contains the environment setup for building project dependencies, such as LLVM and Flatbuffers - `include/ttmlir`: Public headers for the TTMLIR library - `Dialect`: MLIR dialect interfaces and definitions, dialects typically follow a common directory tree structure: - `IR`: MLIR operation/type/attribute interfaces and definitions - `Passes.[h|td]`: MLIR pass interfaces and definitions - `Transforms`: Common MLIR transformations, typically invoked by passes - `Target`: Flatbuffer schema definitions. This defines the binary interface between the compiler and the runtime - `lib`: TTMLIR library implementation - `CAPI`: C API for interfacing with the TTMLIR library, note this is needed for implementing the python bindings. Read more about it here: https://mlir.llvm.org/docs/Bindings/Python/#use-the-c-api - `Dialect`: MLIR dialect implementations - `runtime`: Device runtime implementation - `include/tt/runtime`: Public headers for the runtime interface - `lib`: Runtime implementation - `tools/python`: Python bindings for the runtime, currently this is where `ttrt` is implemented - `test`: Test suite - `tools/ttmlir-opt`: TTMLIR optimizer driver # Namespaces - `mlir`: On the compiler side, we use the MLIR namespace for all MLIR types and operations and subnamespace for our dialects. - `mlir::tt`: Everything ttmlir related is underneath this namespace. Since we need to subnamespace under `mlir`, just `mlir::tt` seemed better than `mlir::ttmlir` which feels redundant. - `mlir::tt::ttir`: The TTIR dialect namespace - `mlir::tt::ttnn`: The TTNN dialect namespace - `mlir::tt::ttmetal`: The TTMetal dialect namespace - `mlir::tt::ttkernel`: The TTKernel dialect namespace - `tt::runtime`: On the runtime side, we use the `tt::runtime` namespace for all runtime types and operations. - `tt::runtime::ttnn`: The TTNN runtime namespace - `tt::runtime::ttmetal`: The TTMetal runtime namespace (not implemented)