tree: 752637163ac3e382d02197f73d684e63a5afb539 [path history] [tgz]
  1. auth/
  2. build/
  3. docs/
  4. execute/
  5. hashfs/
  6. o11y/
  7. reapi/
  8. runtimex/
  9. scandeps/
  10. scripts/
  11. subcmd/
  12. sync/
  13. toolsupport/
  14. ui/
  15. webui/
  16. .gitignore
  17. main.go
  18. README.md
go/src/infra/build/siso/README.md

Siso

Siso is a build tool that aims to significantly speed up Chromium's build.

  • It is a drop-in replacement for Ninja, which means it can be easily used instead of Ninja without requiring a migration or change in developer's workflows.
  • It runs build actions on RBE natively.
  • It avoids stat, disk and network I/O as much as possible.
  • It reduces CPU usage and memory consumption by sharing in one process memory space.
  • It collects performance metrics for each action during a build and allows to analyze them using cloud trace/cloud profiler.

Where did the name “Siso” come from?

Siso is named after shiso, a herb commonly used in Japan. It's a reference to basil and the Bazel build system. Siso is an alternative romanization of shiso and more typeable than shiso (but still pronounced shiso). Considering how often we type the name of a build tool every day, we decided to optimize for that. ;)

Key Differences from Ninja

  1. Remote execution capabilities:

    • Ninja: Primarily focuses on local build execution. Ninja supports mainly c/cxx remote compiles by integrating with Reclient.
    • Siso: Offers extensive support for various remote execution. You can find Chromium's remote configurations here. The configurations are currently maintained by the Browser Build team.
  2. Handling of missing output files during restat:

    • Ninja: May silently ignore missing output files when performing restat.
    • Siso: Enforces stricter checks. If an output file is missing during restat, Siso will fail the build.
  3. Handling of missing input files during scheduling:

    • Ninja: May silently ignore missing input files when scheduling build steps.
    • Siso: Enforces strict input dependency checks. If an input file is missing when scheduling a build step, Siso will fail the build.
  4. Targets from special syntax target^

    • Ninja: Specifies only the first target that contains the source file with target^. For example, foo.c^ will specify foo.o.
    • Siso: Expands target^ to all the targets that contains the source file. For example, foo.java^ will get expanded to all Java steps that use files such as javac, errorprone, turbine etc.
    • Siso: For a header file, tries to find one of the source files include the header directly. For example, foo.h^ will be treated as foo.cc^.
    • Requested in crbug.com/396522989
  5. Supports phony_output rule variable

    • Ninja: Doesn‘t have phony_output. But, Android’s forked Ninja has a patch for the rule variable. See also here
    • Siso: Supports the variable for Android builds.
  6. Concurrent builds for the same build directory

    • Ninja: Allows multiple build invocations to run for the same build directory. There can be a race problem.
    • Siso: Locks the build directory so that other build invocations would wait until the current invocation to finish.
  7. Handling of depfile parse error

    • Ninja: Ignores a depfile parse error.
    • Siso: Fails for a depfile parse error.
  8. Re-run when inputs/outputs list has changed*

    • Ninja: re-run when command line changed or inputs is newer than outputs.
    • Siso: similar with n2, re-run when inputs/outputs list has changed too.
  9. Unsupported features

    Siso may not support Ninja features if they are not used for Chromium builds. e.g. dynamic dependencies, ninja -t browse etc

Status

Siso is the primary build system for Chromium and the projects that import //build from Chromium.

As of June 2025, Siso is used in all the projects that import Chromium's //build, and is used by default on non-Google environments.

As of Apr 2025, Siso built-in remote exec client is used for Chromium and Chrome builders.

As of Nov 2024, Siso is used by default for Chromium build on gLinux machine.

As of July 2024, Siso is used in all Chromium and Chrome builders, including official builds released to users.

As of end of 2024 Q1, Siso is used in all CQ builders in Chromium.

As of April 2023, we are dogfooding Siso with invited Chrome developers. Please check go/chrome-build-dogfood for more information.

Contacts

FAQ

Please check go/siso-faq (internal).

Development

Please check go/siso-development (internal).

References