nodejs/node · error · MBErr

Cannot generate isolate for %s since it is an additional_com

Error message

Cannot generate isolate for %s since it is an additional_compile_target.

What it means

MB's isolate_map contract reserves type 'additional_compile_target' for compile-only targets (not runnable tests), so it refuses to generate isolates for them. There is a deliberate carve-out for the legacy 'official_tests' name only.

Source

Thrown at deps/v8/tools/mb/mb.py:858

    android = 'target_os="android"' in vals['gn_args']
    ios = 'target_os="ios"' in vals['gn_args']
    fuchsia = 'target_os="fuchsia"' in vals['gn_args']
    win = self.platform == 'win32' or 'target_os="win"' in vals['gn_args']
    possible_runtime_deps_rpaths = {}
    for target in ninja_targets:
      target_type = isolate_map[target]['type']
      label = isolate_map[target]['label']
      target_runtime_deps = 'obj/%s.runtime_deps' % label.replace(':', '/')
      stamp_runtime_deps = 'obj/%s.stamp.runtime_deps' % label.replace(':', '/')
      # TODO(crbug.com/40590196): 'official_tests' use
      # type='additional_compile_target' to isolate tests. This is not the
      # intended use for 'additional_compile_target'.
      if (target_type == 'additional_compile_target' and
          target != 'official_tests'):
        # By definition, additional_compile_targets are not tests, so we
        # shouldn't generate isolates for them.
        raise MBErr('Cannot generate isolate for %s since it is an '
                    'additional_compile_target.' % target)
      if fuchsia or ios or target_type == 'generated_script':
        # iOS and Fuchsia targets end up as groups.
        # generated_script targets are always actions.
        rpaths = [stamp_runtime_deps, target_runtime_deps]
      elif android:
        # Android targets may be either android_apk or executable. The former
        # will result in runtime_deps associated with the stamp file, while the
        # latter will result in runtime_deps associated with the executable.
        label = isolate_map[target]['label']
        rpaths = [
            target + '.runtime_deps', stamp_runtime_deps, target_runtime_deps
        ]
      elif (target_type == 'script' or
            isolate_map[target].get('label_type') == 'group'):
        # For script targets, the build target is usually a group,
        # for which gn generates the runtime_deps next to the stamp file
        # for the label, which lives under the obj/ directory, but it may

View on GitHub (pinned to 1b2de5e052)

Solutions

  1. Set the correct isolate_map type for the target (e.g. 'executable', 'gtest_test', 'android_apk').
  2. Do not run isolate on additional_compile_targets.
  3. If you intentionally need the official_tests legacy pattern, name the target exactly 'official_tests'.

Example fix

// before
// isolate_map.pyl: '<target>': {'type': 'additional_compile_target', ...}
// after
// '<target>': {'type': 'gtest_test', ...}
Defensive patterns

Strategy: validation

Validate before calling

isolate_map = load_isolate_map()
t = isolate_map[target]['type']
assert t != 'additional_compile_target' or target == 'official_tests', (
    f"{target!r} is additional_compile_target; cannot isolate")

Prevention

When it happens

Trigger: Running `mb.py isolate --target <T>` (or an isolate-producing subcommand) where isolate_map[T]['type'] == 'additional_compile_target' and T != 'official_tests'.

Common situations: A test target was mislabeled as additional_compile_target; running isolate against a build-only target; new test target missing a proper type in isolate_map.

Related errors


AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13). Data as JSON: /api/errors/02efad8e1f5bffb1. Report an issue: GitHub.