Files
flutter/packages/flutter_tools/lib/src/linux/application_package.dart
stuartmorgan 8abf0a6d8c Switch to CMake for Linux desktop (#57238)
Updates the Linux templates to use CMake+ninja, rather than Make, and updates the tooling to generate CMake support files rather than Make support files, and to drive the build using cmake and ninja.

Also updates doctor to check for cmake and ninja in place of make.

Note: While we could use CMake+Make rather than CMake+ninja, in testing ninja handled the tool_backend.sh call much better, calling it only once rather than once per dependent target. While it does add another dependency that people are less likely to already have, it's widely available in package managers, as well as being available as a direct download. Longer term, we could potentially switch from ninja to Make if it's an issue.

Fixes #52751
2020-05-16 15:07:34 -07:00

73 lines
1.9 KiB
Dart

// 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 '../globals.dart' as globals;
import '../project.dart';
import 'cmake.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.project.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.project.manifest.appName;
}