Home

Awesome

Toy browser engine

codecov

Building

Requirements

Compiler

Right now GCC 13, Clang 17, and MSVC are tested against. The project makes use of C++23 features, so a reasonably recent compiler is required.

Build system

Bazel is used as the build system. I recommend using Bazelisk as that will pick up the Bazel version to use from the .bazelversion file in the repository root.

Per-developer configuration (e.g. compiler used and build type) is managed in a gitignored .bazelrc.local file. To set this up for your environment, copy .bazelrc.local.example to .bazelrc.local and edit to suit your compiler of choice.

Process

The following assumes that you either have Bazel or Bazelisk under the name bazel on your PATH and that you have set up your .bazelrc.local file.

Listing build targets

bazel query //...

Building all targets

bazel build //...

Building a single target

bazel build //html

Running all tests

bazel test //...

Running the browser engine

bazel run //browser

Generate json compilation database

bazel run refresh_compile_commands --@rules_python//python/config_settings:bootstrap_impl=system_python

Misc

clangd on Windows

If using clangd on Windows, you need work around clangd not supporting /std:c++latest by setting up a .clangd configuration containing

CompileFlags:
  Add: ["-std:c++latest"]

to force its inclusion and avoid your editor displaying errors for every newish C++ feature.