diff --git a/packages/flutter_tools/bin/tool_backend.dart b/packages/flutter_tools/bin/tool_backend.dart index 1d2ca1433d..cb3c533c88 100644 --- a/packages/flutter_tools/bin/tool_backend.dart +++ b/packages/flutter_tools/bin/tool_backend.dart @@ -37,7 +37,7 @@ or String cacheDirectory; switch (targetPlatform) { case 'linux-x64': - cacheDirectory = 'linux/flutter'; + cacheDirectory = 'linux/flutter/ephemeral'; break; case 'windows-x64': cacheDirectory = 'windows/flutter/ephemeral'; diff --git a/packages/flutter_tools/lib/src/commands/clean.dart b/packages/flutter_tools/lib/src/commands/clean.dart index 5603c2801f..be698a9eae 100644 --- a/packages/flutter_tools/lib/src/commands/clean.dart +++ b/packages/flutter_tools/lib/src/commands/clean.dart @@ -51,9 +51,15 @@ class CleanCommand extends FlutterCommand { final Directory iosEphemeralDirectory = flutterProject.ios.ephemeralDirectory; deleteFile(iosEphemeralDirectory); + final Directory linuxEphemeralDirectory = flutterProject.linux.ephemeralDirectory; + deleteFile(linuxEphemeralDirectory); + final Directory macosEphemeralDirectory = flutterProject.macos.ephemeralDirectory; deleteFile(macosEphemeralDirectory); + final Directory windowsEphemeralDirectory = flutterProject.windows.ephemeralDirectory; + deleteFile(windowsEphemeralDirectory); + return const FlutterCommandResult(ExitStatus.success); } diff --git a/packages/flutter_tools/lib/src/linux/build_linux.dart b/packages/flutter_tools/lib/src/linux/build_linux.dart index fc87fef1f4..2c6a5ef61c 100644 --- a/packages/flutter_tools/lib/src/linux/build_linux.dart +++ b/packages/flutter_tools/lib/src/linux/build_linux.dart @@ -34,7 +34,7 @@ export PROJECT_DIR=${linuxProject.project.directory.path} } /// Cache flutter configuration files in the linux directory. - linuxProject.cacheDirectory.childFile('generated_config') + linuxProject.generatedMakeConfigFile ..createSync(recursive: true) ..writeAsStringSync(buffer.toString()); @@ -52,7 +52,7 @@ export PROJECT_DIR=${linuxProject.project.directory.path} final Process process = await processManager.start([ 'make', '-C', - linuxProject.editableHostAppDirectory.path, + linuxProject.makeFile.parent.path, ], runInShell: true); final Status status = logger.startProgress( 'Building Linux application...', diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index f37fd3f021..92aae9f89e 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -795,16 +795,26 @@ class LinuxProject { final FlutterProject project; - Directory get editableHostAppDirectory => project.directory.childDirectory('linux'); + Directory get _editableDirectory => project.directory.childDirectory('linux'); - // TODO(stuartmorgan): Move to using an ephemeralDirectory to match the other - // desktop projects. - Directory get cacheDirectory => editableHostAppDirectory.childDirectory('flutter'); + /// The directory in the project that is managed by Flutter. As much as + /// possible, files that are edited by Flutter tooling after initial project + /// creation should live here. + Directory get managedDirectory => _editableDirectory.childDirectory('flutter'); - bool existsSync() => editableHostAppDirectory.existsSync(); + /// The subdirectory of [managedDirectory] that contains files that are + /// generated on the fly. All generated files that are not intended to be + /// checked in should live here. + Directory get ephemeralDirectory => managedDirectory.childDirectory('ephemeral'); + + bool existsSync() => _editableDirectory.existsSync(); /// The Linux project makefile. - File get makeFile => editableHostAppDirectory.childFile('Makefile'); + File get makeFile => _editableDirectory.childFile('Makefile'); + + /// Contains definitions for FLUTTER_ROOT, LOCAL_ENGINE, and more flags for + /// the build. + File get generatedMakeConfigFile => ephemeralDirectory.childFile('generated_config.mk'); } /// The Fuchisa sub project diff --git a/packages/flutter_tools/test/general.shard/commands/build_linux_test.dart b/packages/flutter_tools/test/general.shard/commands/build_linux_test.dart index 6fd98a6d32..dec46e1467 100644 --- a/packages/flutter_tools/test/general.shard/commands/build_linux_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/build_linux_test.dart @@ -100,7 +100,7 @@ void main() { await createTestCommandRunner(command).run( const ['build', 'linux'] ); - expect(fs.file('linux/flutter/generated_config').existsSync(), true); + expect(fs.file('linux/flutter/ephemeral/generated_config.mk').existsSync(), true); }, overrides: { FileSystem: () => MemoryFileSystem(), ProcessManager: () => mockProcessManager, diff --git a/packages/flutter_tools/test/general.shard/commands/clean_test.dart b/packages/flutter_tools/test/general.shard/commands/clean_test.dart index 932ea39177..271cfabf67 100644 --- a/packages/flutter_tools/test/general.shard/commands/clean_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/clean_test.dart @@ -41,7 +41,9 @@ void main() { projectUnderTest.dartTool.createSync(recursive: true); projectUnderTest.android.ephemeralDirectory.createSync(recursive: true); projectUnderTest.ios.ephemeralDirectory.createSync(recursive: true); + projectUnderTest.linux.ephemeralDirectory.createSync(recursive: true); projectUnderTest.macos.ephemeralDirectory.createSync(recursive: true); + projectUnderTest.windows.ephemeralDirectory.createSync(recursive: true); }); group(CleanCommand, () { @@ -53,7 +55,9 @@ void main() { expect(projectUnderTest.dartTool.existsSync(), isFalse); expect(projectUnderTest.android.ephemeralDirectory.existsSync(), isFalse); expect(projectUnderTest.ios.ephemeralDirectory.existsSync(), isFalse); + expect(projectUnderTest.linux.ephemeralDirectory.existsSync(), isFalse); expect(projectUnderTest.macos.ephemeralDirectory.existsSync(), isFalse); + expect(projectUnderTest.windows.ephemeralDirectory.existsSync(), isFalse); verify(xcodeProjectInterpreter.cleanWorkspace(any, 'Runner')).called(2); }, overrides: {