anchor.diff:    @override
     bool get isSafeToInterrupt => false;
   
  -  /// Whether or not to build CanvasKit.
  -  final bool buildCanvasKit;
  +  /// The target to build with gn.
  +  ///
  +  /// Acceptable values: engine, canvaskit
  +  final String target;
   
     @override
     Future<ProcessManager> createProcess() {
       print('Running gn...');
  -    Future<ProcessManager> gnProcess = startProcess(
  -      path.join(environment.flutterDirectory.path, 'tools', 'gn'),
  -      <String>[
  +    final List<String> gnArgs = <String>[];
  +    if (target == 'engine') {
  +      gnArgs.addAll(<String>[
           '--unopt',
           if (Platform.isMacOS) '--xcode-symlinks',
           '--full-dart-sdk',
  -      ],
  +      ]);
  +    } else if (target == 'canvaskit') {
  +      gnArgs.add('--wasm');
  +    } else {
  +      throw StateError('Target was not engine or canvaskit: $target');
  +    }
  +    return startProcess(
  +      path.join(environment.flutterDirectory.path, 'tools', 'gn'),
  +      gnArgs,
       );
  -    if (buildCanvasKit) {
  -      gnProcess = gnProcess.then((_) {
  -        return startProcess(
  -          path.join(environment.flutterDirectory.path, 'tools', 'gn'),
  -          <String>[
  -            '--wasm',
  -          ],
  -        );
  -      });
  -    }
  -    return gnProcess;
     }
   }
   
  
positive.code: ///
  /// Can be safely interrupted.
  class NinjaPipelineStep extends ProcessStep {
    NinjaPipelineStep(this.buildCanvasKit);
  
    @override
    String get description => 'ninja';
  
negative.code:   @override
    FutureOr<bool> run() async {
      final FilePath libPath = FilePath.fromWebUi('lib');
      final List<PipelineStep> steps = <PipelineStep>[
        GnPipelineStep(target: 'engine'),
        NinjaPipelineStep(target: environment.hostDebugUnoptDir),
      ];
      if (buildCanvasKit) {
        steps.addAll(<PipelineStep>[
          GnPipelineStep(target: 'canvaskit'),
          NinjaPipelineStep(target: environment.canvasKitOutDir),
        ]);
      }
      final Pipeline buildPipeline = Pipeline(steps: steps);
      await buildPipeline.run();
  
      if (isWatchMode) {
  