Directory Structure (Chromium OS)

This document describes the typical Chromium OS source tree hierarchy. Most of the
directories below are present when you download the source code. However, some
directories (e.g. build) are created during the build process.

Starting from the trunk, here are the directories you are likely to see:

Directory

Description

src/

The main source directory. All files that are built and end up in the final Chromium OS image are located here.

build/

This directory is created by the build_image script and contains the build results.

images/

Contains images built by the build_image script. Images are arranged in subfolders by
corresponding board and build number. For a given board, the latest
build image can always be found by looking at the src/build/images/${BOARD}/latest symlink.

overlays/

Contains board and variant overlays. Used when a board is configured using setup_board --board ${BOARD}. See the overlays directory README.

platform/

Contains all source code for packages that were not developed originally by a third party (those go in third_party). If you're using the minilayout, this directory will appear nearly empty until you start working on something.

libchromeos/

Contains files related to libchromeos.

scripts/

Contains the many necessary scripts that help you build Chromium OS.

third_party/

Contains open source packages that have been modified for
the Chromium OS project. This includes any local forks of open source projects, such as flimflam. If you're using the minilayout, this directory will appear nearly empty until you start working on something.

chromiumos-overlay/

This directory is overlaid on top of the portage directory (see below)
and contains ebuild files, patches, and configuration information.
Since the portage directory is kept as a pure snapshot of the upstream
portage, all Chromium OS changes to those files are placed here. It's admittedly a bit strange to put this directory in third_party, but you'll get used to it.

chromeos-base/

Contains the ebuilds for many chromeos-related files. Most of these files have corresponding source code in src/platform. If you have the minilayout, you need to cros_workon them first.

profiles/

Contains portage profiles.

targets/

Contains directories for each general class of build target. At the
moment, there is only one overlay target (chromeos).

Contains ebuild files, patches, and configuration information from a
snapshot of the portage build system (the current snapshot is a little
out of date, though). These ebuild files tell where to find the
upstream sources for various packages and how to patch/build them in the
context of the portage build system.

chromite/

Contains the "next generation" build scripts and related libraries. Note that there is duplication in some cases where the same (or similar) files are present in the current (non-chromite) scripts and the next generation (chromite) build scripts. Also note that some of the bits in the chromite directory are already being used.

chromium/

Contains source repos that come from the Chromium browser.

chroot/

This directory is created by chromite/bin/cros_sdk (in PATH) and contains the whole SDK chroot environment (compiler, tools, etc) for
building Chromium OS. You're expected to "enter" this chroot (make it
the root of your filesystem) by using cros_sdk as well.DO NOT use rm -rf to delete this directory. Use cros_sdk --delete instead.

home/$USER/trunk/

Is a bind mount of the entire source tree so that things may be accessed inside of the chroot.

.cache/

Cached files that can be shared across chroots. Or safely deleted to recover some space.

distfiles/

Downloaded source code packages (tarballs/etc...).

sdks/

Downloaded sdk tarballs -- used to bootstrap the chroot/ tree.

.repo/

Contains information managed by the repo source control tool. Includes the file manifest.xml, which specifies where various projects are placed in your source tree, and the file local_manifest.xml, which is populated automatically if you use cros_workon with the minilayout.

TODO: would it be useful to also have a document describing directory structure as seen from inside the chroot?