• stuartmorgan's avatar
    Switch Windows to CMake (#60629) · 4b120501
    stuartmorgan authored
    * First pass at CMake files; untested
    
    * First pass of adding CMake generation logic on Windows
    
    * Misc fixes
    
    * Get bundling working, start incoprorating CMake build into tool
    
    * Fix debug, exe name.
    
    * Add resources
    
    * Move cmake.dart
    
    * Rip out all the vcxproj/solution plumbing
    
    * Fix plugin cmake generation
    
    * Build with cmake rather than calling VS directly
    
    * Adjust Windows plugin template to match standard header directory structure
    
    * Pass config selection when building
    
    * Partially fix multi-config handling
    
    * Rev template version
    
    * Share the CMake generation instead of splitting it out
    
    * VS build/run cycle works, with slightly awkward requirement to always build all
    
    * Update manifest
    
    * Plugin template fixes
    
    * Minor adjustments
    
    * Build install as part of build command, instead of separately
    
    * Test cleanup
    
    * Update Linux test for adjusted generated CMake approach
    
    * Plugin test typo fix
    
    * Add missing stub file for project test
    
    * Add a constant for VS generator
    4b120501
application_package.dart 1.86 KB
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:meta/meta.dart';

import '../application_package.dart';
import '../base/file_system.dart';
import '../build_info.dart';
import '../cmake.dart';
import '../globals.dart' as globals;
import '../project.dart';

abstract class LinuxApp extends ApplicationPackage {
  LinuxApp({@required String projectBundleId}) : super(id: projectBundleId);

  /// Creates a new [LinuxApp] from a linux sub project.
  factory LinuxApp.fromLinuxProject(LinuxProject project) {
    return BuildableLinuxApp(
      project: project,
    );
  }

  /// Creates a new [LinuxApp] from an existing executable.
  ///
  /// `applicationBinary` is the path to the executable.
  factory LinuxApp.fromPrebuiltApp(FileSystemEntity applicationBinary) {
    return PrebuiltLinuxApp(
      executable: applicationBinary.path,
    );
  }

  @override
  String get displayName => id;

  String executable(BuildMode buildMode);
}

class PrebuiltLinuxApp extends LinuxApp {
  PrebuiltLinuxApp({
    @required String executable,
  }) : _executable = executable,
       super(projectBundleId: executable);

  final String _executable;

  @override
  String executable(BuildMode buildMode) => _executable;

  @override
  String get name => _executable;
}

class BuildableLinuxApp extends LinuxApp {
  BuildableLinuxApp({this.project}) : super(projectBundleId: project.parent.manifest.appName);

  final LinuxProject project;

  @override
  String executable(BuildMode buildMode) {
    final String binaryName = getCmakeExecutableName(project);
    return globals.fs.path.join(
        getLinuxBuildDirectory(),
        getNameForBuildMode(buildMode),
        'bundle',
        binaryName,
    );
  }

  @override
  String get name => project.parent.manifest.appName;
}