1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56

build / args / chromeos / README.md [blame]

This directory is used to store GN arg mapping for Chrome OS boards. The values
of the args are determined by processing the [chromeos-chrome ebuild] for a
given board and a given ChromeOS version (stored in the [CHROMEOS_LKGM] file).

Files in this directory are populated by running `gclient sync` with specific
arguments set in the .gclient file. Specifically:
* The file must have a top-level variable set: `target_os = ["chromeos"]`
* The `"custom_vars"` parameter of the chromium/src.git solution must include
  the parameter: `"cros_boards": "{BOARD_NAMES}"` where `{BOARD_NAMES}` is a
  colon-separated list of boards you'd like to checkout.
* If you'd like to a checkout a QEMU-bootable image for a given board, include
  it in the `cros_boards_with_qemu_images` var rather than the `cros_boards`
  var.

A typical .gclient file is a sibling of the src/ directory, and might look like
this:
```
solutions = [
  {
    "url": "https://chromium.googlesource.com/chromium/src.git",
    "managed": False,
    "name": "src",
    "custom_deps": {},
    "custom_vars" : {
        "checkout_src_internal": True,
        "cros_boards": "eve:kevin",
        # If a QEMU-bootable image is desired for any board, move it from
        # the previous var to the following:
        "cros_boards_with_qemu_images": "amd64-generic",
    },
  },
]
target_os = ["chromeos"]
```

To use these files in a build, simply add the following line to your GN args:
```
import("//build/args/chromeos/${some_board}.gni")
```

That will produce a Chrome OS build of Chrome very similar to what is shipped
for that device. You can also supply additional args or even overwrite ones
supplied in the .gni file after the `import()` line. For example, the following
args will produce a debug build of Chrome for board=eve using rbe:
```
import("//build/args/chromeos/eve.gni")

is_debug = true
use_remoteexec = true
```

TODO(bpastene): Make 'cros_boards' a first class citizen in gclient and replace
it with 'target_boards' instead.

[chromeos-chrome ebuild]: https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/chromeos-base/chromeos-chrome/chromeos-chrome-9999.ebuild
[CHROMEOS_LKGM]: https://chromium.googlesource.com/chromium/src/+/HEAD/chromeos/CHROMEOS_LKGM