diff --git a/packages/flutter_tools/lib/src/build_system/targets/assets.dart b/packages/flutter_tools/lib/src/build_system/targets/assets.dart index 795cbf77da7..77a5fc003a2 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/assets.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/assets.dart @@ -15,6 +15,7 @@ import '../../devfs.dart'; import '../../flutter_manifest.dart'; import '../build_system.dart'; import '../depfile.dart'; +import '../exceptions.dart'; import '../tools/asset_transformer.dart'; import '../tools/scene_importer.dart'; import '../tools/shader_compiler.dart'; @@ -35,7 +36,7 @@ Future copyAssets( Directory outputDirectory, { Map additionalContent = const {}, required TargetPlatform targetPlatform, - BuildMode? buildMode, + required BuildMode buildMode, List additionalInputs = const [], String? flavor, }) async { @@ -101,6 +102,7 @@ Future copyAssets( processManager: environment.processManager, fileSystem: environment.fileSystem, dartBinaryPath: environment.artifacts.getArtifactPath(Artifact.engineDartBinary), + buildMode: buildMode, ); final Map assetEntries = { @@ -186,7 +188,7 @@ Future copyAssets( // Copy deferred components assets only for release or profile builds. // The assets are included in assetBundle.entries as a normal asset when // building as debug. - if (environment.defines[kDeferredComponents] == 'true' && buildMode != null) { + if (environment.defines[kDeferredComponents] == 'true') { await Future.wait(assetBundle.deferredComponentsEntries.entries.map>( (MapEntry> componentEntries) async { final Directory componentOutputDir = @@ -343,6 +345,11 @@ class CopyAssets extends Target { @override Future build(Environment environment) async { + final String? buildModeEnvironment = environment.defines[kBuildMode]; + if (buildModeEnvironment == null) { + throw MissingDefineException(kBuildMode, name); + } + final BuildMode buildMode = BuildMode.fromCliName(buildModeEnvironment); final Directory output = environment .buildDir .childDirectory('flutter_assets'); @@ -351,6 +358,7 @@ class CopyAssets extends Target { environment, output, targetPlatform: TargetPlatform.android, + buildMode: buildMode, flavor: environment.defines[kFlavor], ); environment.depFileService.writeToFile( diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart index 9ca6e543a20..1fd586e063f 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart @@ -503,6 +503,7 @@ abstract class IosAssetBundle extends Target { environment, assetDirectory, targetPlatform: TargetPlatform.ios, + buildMode: buildMode, additionalInputs: [ flutterProject.ios.infoPlist, flutterProject.ios.appFrameworkInfoPlist, diff --git a/packages/flutter_tools/lib/src/build_system/targets/linux.dart b/packages/flutter_tools/lib/src/build_system/targets/linux.dart index bc446c5fa65..6f761f27b95 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/linux.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/linux.dart @@ -137,6 +137,7 @@ abstract class BundleLinuxAssets extends Target { environment, outputDirectory, targetPlatform: targetPlatform, + buildMode: buildMode, additionalContent: { 'version.json': DevFSStringContent(versionInfo), }, diff --git a/packages/flutter_tools/lib/src/build_system/targets/macos.dart b/packages/flutter_tools/lib/src/build_system/targets/macos.dart index 9996664a0a1..2e018fe84cc 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/macos.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/macos.dart @@ -438,6 +438,7 @@ abstract class MacOSBundleFlutterAssets extends Target { environment, assetDirectory, targetPlatform: TargetPlatform.darwin, + buildMode: buildMode, flavor: environment.defines[kFlavor], ); environment.depFileService.writeToFile( diff --git a/packages/flutter_tools/lib/src/build_system/targets/web.dart b/packages/flutter_tools/lib/src/build_system/targets/web.dart index d7c7f27257a..5211ddf7963 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/web.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/web.dart @@ -444,13 +444,21 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)}; } } + final String? buildModeEnvironment = environment.defines[kBuildMode]; + if (buildModeEnvironment == null) { + throw MissingDefineException(kBuildMode, name); + } + final BuildMode buildMode = BuildMode.fromCliName(buildModeEnvironment); + createVersionFile(environment, environment.defines); final Directory outputDirectory = environment.outputDir.childDirectory('assets'); outputDirectory.createSync(recursive: true); + final Depfile depfile = await copyAssets( environment, environment.outputDir.childDirectory('assets'), targetPlatform: TargetPlatform.web_javascript, + buildMode: buildMode, ); final DepfileService depfileService = environment.depFileService; depfileService.writeToFile( diff --git a/packages/flutter_tools/lib/src/build_system/targets/windows.dart b/packages/flutter_tools/lib/src/build_system/targets/windows.dart index ada0afe5b55..2aadcf12b17 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/windows.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/windows.dart @@ -142,6 +142,7 @@ abstract class BundleWindowsAssets extends Target { environment, outputDirectory, targetPlatform: targetPlatform, + buildMode: buildMode, ); environment.depFileService.writeToFile( depfile, diff --git a/packages/flutter_tools/lib/src/build_system/tools/asset_transformer.dart b/packages/flutter_tools/lib/src/build_system/tools/asset_transformer.dart index 8e352d2186e..43ffd0d59a6 100644 --- a/packages/flutter_tools/lib/src/build_system/tools/asset_transformer.dart +++ b/packages/flutter_tools/lib/src/build_system/tools/asset_transformer.dart @@ -12,6 +12,7 @@ import '../../base/error_handling_io.dart'; import '../../base/file_system.dart'; import '../../base/io.dart'; import '../../base/logger.dart'; +import '../../build_info.dart'; import '../../devfs.dart'; import '../../flutter_manifest.dart'; import '../build_system.dart'; @@ -22,13 +23,18 @@ final class AssetTransformer { required ProcessManager processManager, required FileSystem fileSystem, required String dartBinaryPath, + required BuildMode buildMode, }) : _processManager = processManager, _fileSystem = fileSystem, - _dartBinaryPath = dartBinaryPath; + _dartBinaryPath = dartBinaryPath, + _buildMode = buildMode; + + static const String buildModeEnvVar = 'FLUTTER_BUILD_MODE'; final ProcessManager _processManager; final FileSystem _fileSystem; final String _dartBinaryPath; + final BuildMode _buildMode; /// The [Source] inputs that targets using this should depend on. /// @@ -115,6 +121,9 @@ final class AssetTransformer { final ProcessResult result = await _processManager.run( command, workingDirectory: workingDirectory, + environment: { + AssetTransformer.buildModeEnvVar: _buildMode.cliName, + } ); final String stdout = result.stdout as String; final String stderr = result.stderr as String; diff --git a/packages/flutter_tools/lib/src/bundle_builder.dart b/packages/flutter_tools/lib/src/bundle_builder.dart index 81f3872a0f9..010e3b67aee 100644 --- a/packages/flutter_tools/lib/src/bundle_builder.dart +++ b/packages/flutter_tools/lib/src/bundle_builder.dart @@ -147,6 +147,7 @@ Future writeBundle( required Artifacts artifacts, required Logger logger, required Directory projectDir, + required BuildMode buildMode, }) async { if (bundleDir.existsSync()) { try { @@ -178,6 +179,7 @@ Future writeBundle( processManager: processManager, fileSystem: fileSystem, dartBinaryPath: artifacts.getArtifactPath(Artifact.engineDartBinary), + buildMode: buildMode, ); // Limit number of open files to avoid running out of file descriptors. diff --git a/packages/flutter_tools/lib/src/commands/test.dart b/packages/flutter_tools/lib/src/commands/test.dart index b3cf6715321..ba505dfa5e1 100644 --- a/packages/flutter_tools/lib/src/commands/test.dart +++ b/packages/flutter_tools/lib/src/commands/test.dart @@ -411,7 +411,11 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts { String? testAssetDirectory; if (buildTestAssets) { - await _buildTestAsset(flavor: buildInfo.flavor, impellerStatus: debuggingOptions.enableImpeller); + await _buildTestAsset( + flavor: buildInfo.flavor, + impellerStatus: debuggingOptions.enableImpeller, + buildMode: debuggingOptions.buildInfo.mode, + ); testAssetDirectory = globals.fs.path. join(flutterProject.directory.path, 'build', 'unit_test_assets'); } @@ -674,6 +678,7 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts { Future _buildTestAsset({ required String? flavor, required ImpellerStatus impellerStatus, + required BuildMode buildMode, }) async { final AssetBundle assetBundle = AssetBundleFactory.instance.createBundle(); final int build = await assetBundle.build( @@ -694,6 +699,7 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts { artifacts: globals.artifacts!, logger: globals.logger, projectDir: globals.fs.currentDirectory, + buildMode: buildMode, ); } } diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart index 9db81a4df81..4027001eee3 100644 --- a/packages/flutter_tools/lib/src/devfs.dart +++ b/packages/flutter_tools/lib/src/devfs.dart @@ -442,6 +442,7 @@ class DevFS { required FileSystem fileSystem, required ProcessManager processManager, required Artifacts artifacts, + required BuildMode buildMode, HttpClient? httpClient, Duration? uploadRetryThrottle, StopwatchFactory stopwatchFactory = const StopwatchFactory(), @@ -465,6 +466,7 @@ class DevFS { processManager: processManager, fileSystem: fileSystem, dartBinaryPath: artifacts.getArtifactPath(Artifact.engineDartBinary), + buildMode: buildMode, ), fileSystem: fileSystem, logger: logger, diff --git a/packages/flutter_tools/lib/src/isolated/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart index 656c5f17295..d4c94e0cfaf 100644 --- a/packages/flutter_tools/lib/src/isolated/devfs_web.dart +++ b/packages/flutter_tools/lib/src/isolated/devfs_web.dart @@ -1003,6 +1003,7 @@ class WebDevFS implements DevFS { artifacts: globals.artifacts!, logger: globals.logger, projectDir: rootDirectory, + buildMode: buildInfo.mode, ); } } diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index addb06a6ff1..1eea4d9c179 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -391,6 +391,7 @@ class FlutterDevice { logger: globals.logger, processManager: globals.processManager, artifacts: globals.artifacts!, + buildMode: buildInfo.mode, ); return devFS!.create(); } diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart index d0a015697b3..8a2953ee873 100644 --- a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart +++ b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart @@ -610,7 +610,8 @@ flutter: fileSystem: globals.fs, artifacts: globals.artifacts!, logger: testLogger, - projectDir: globals.fs.currentDirectory + projectDir: globals.fs.currentDirectory, + buildMode: BuildMode.debug, ); expect(testLogger.warningText, contains('Expected Error Text')); @@ -737,6 +738,7 @@ flutter: artifacts: globals.artifacts!, logger: testLogger, projectDir: globals.fs.currentDirectory, + buildMode: BuildMode.debug, ); }, overrides: { @@ -789,6 +791,7 @@ flutter: artifacts: globals.artifacts!, logger: testLogger, projectDir: globals.fs.currentDirectory, + buildMode: BuildMode.debug, ); }, overrides: { @@ -876,6 +879,7 @@ flutter: artifacts: globals.artifacts!, logger: testLogger, projectDir: globals.fs.currentDirectory, + buildMode: BuildMode.debug, ); expect((globals.processManager as FakeProcessManager).hasRemainingExpectations, false); }, overrides: { diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/asset_transformer_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/asset_transformer_test.dart index 02aea1e3f06..9e017573b0a 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/asset_transformer_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/asset_transformer_test.dart @@ -8,6 +8,7 @@ import 'package:file_testing/file_testing.dart'; import 'package:flutter_tools/src/artifacts.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/logger.dart'; +import 'package:flutter_tools/src/build_info.dart'; import 'package:flutter_tools/src/build_system/tools/asset_transformer.dart'; import 'package:flutter_tools/src/flutter_manifest.dart'; @@ -53,6 +54,7 @@ void main() { processManager: processManager, fileSystem: fileSystem, dartBinaryPath: artifacts.getArtifactPath(Artifact.engineDartBinary), + buildMode: BuildMode.debug, ); final AssetTransformationFailure? transformationFailure = await transformer.transformAsset( @@ -112,6 +114,7 @@ void main() { processManager: processManager, fileSystem: fileSystem, dartBinaryPath: dartBinaryPath, + buildMode: BuildMode.debug, ); final AssetTransformationFailure? failure = await transformer.transformAsset( @@ -171,6 +174,7 @@ Something went wrong'''); processManager: processManager, fileSystem: fileSystem, dartBinaryPath: dartBinaryPath, + buildMode: BuildMode.debug, ); final AssetTransformationFailure? failure = await transformer.transformAsset( @@ -265,6 +269,7 @@ Transformation failed, but I forgot to exit with a non-zero code.''' processManager: processManager, fileSystem: fileSystem, dartBinaryPath: dartBinaryPath, + buildMode: BuildMode.debug, ); final AssetTransformationFailure? failure = await transformer.transformAsset( @@ -331,7 +336,10 @@ Transformation failed, but I forgot to exit with a non-zero code.''' onRun: (List args) { // Do nothing. }, - stderr: 'Transformation failed, but I forgot to exit with a non-zero code.' + stderr: 'Transformation failed, but I forgot to exit with a non-zero code.', + environment: const { + 'FLUTTER_BUILD_MODE': 'debug', + }, ), ]); @@ -339,6 +347,7 @@ Transformation failed, but I forgot to exit with a non-zero code.''' processManager: processManager, fileSystem: fileSystem, dartBinaryPath: dartBinaryPath, + buildMode: BuildMode.debug, ); final AssetTransformationFailure? failure = await transformer.transformAsset( diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart index cd9fc31799c..6d33eeec297 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart @@ -38,7 +38,9 @@ void main() { fileSystem: fileSystem, logger: BufferLogger.test(), platform: FakePlatform(), - defines: {}, + defines: { + kBuildMode: BuildMode.debug.cliName, + }, ); fileSystem.file(environment.buildDir.childFile('app.dill')).createSync(recursive: true); fileSystem.file('packages/flutter_tools/lib/src/build_system/targets/assets.dart') @@ -178,7 +180,9 @@ flutter: fileSystem: fileSystem, logger: logger, platform: globals.platform, - defines: {}, + defines: { + kBuildMode: BuildMode.debug.cliName, + }, ); await fileSystem.file('.packages').create(); @@ -262,7 +266,9 @@ flutter: fileSystem: fileSystem, logger: logger, platform: globals.platform, - defines: {}, + defines: { + kBuildMode: BuildMode.debug.cliName, + }, ); await fileSystem.file('.packages').create(); diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart index 54c246248fc..7ef04d46d8e 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart @@ -68,6 +68,7 @@ void main() { outputDir: globals.fs.currentDirectory.childDirectory('bar'), defines: { kTargetFile: globals.fs.path.join('foo', 'lib', 'main.dart'), + kBuildMode: BuildMode.debug.cliName, }, artifacts: Artifacts.test(), processManager: processManager, diff --git a/packages/flutter_tools/test/general.shard/bundle_builder_test.dart b/packages/flutter_tools/test/general.shard/bundle_builder_test.dart index 687171a3e3d..a3d4c1a915e 100644 --- a/packages/flutter_tools/test/general.shard/bundle_builder_test.dart +++ b/packages/flutter_tools/test/general.shard/bundle_builder_test.dart @@ -119,6 +119,7 @@ void main() { artifacts: artifacts, logger: BufferLogger.test(), projectDir: fileSystem.currentDirectory, + buildMode: BuildMode.debug, ); final File outputAssetFile = fileSystem.file('build/flutter_assets/my-asset.txt'); diff --git a/packages/flutter_tools/test/general.shard/devfs_test.dart b/packages/flutter_tools/test/general.shard/devfs_test.dart index 2cd54da3ea7..98b9078fac4 100644 --- a/packages/flutter_tools/test/general.shard/devfs_test.dart +++ b/packages/flutter_tools/test/general.shard/devfs_test.dart @@ -135,6 +135,7 @@ void main() { httpClient: FakeHttpClient.any(), processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); expect(() async => devFS.create(), throwsA(isA())); }); @@ -160,6 +161,7 @@ void main() { httpClient: FakeHttpClient.any(), processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); expect(await devFS.create(), isNotNull); @@ -210,6 +212,7 @@ void main() { uploadRetryThrottle: Duration.zero, processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -245,6 +248,7 @@ void main() { httpClient: FakeHttpClient.any(), processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -287,6 +291,7 @@ void main() { httpClient: FakeHttpClient.any(), processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -331,6 +336,7 @@ void main() { httpClient: HttpClient(), processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -382,6 +388,7 @@ void main() { httpClient: FakeHttpClient.any(), processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -461,6 +468,7 @@ void main() { }), processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -507,6 +515,7 @@ void main() { httpClient: FakeHttpClient.any(), processManager: FakeProcessManager.empty(), artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -612,7 +621,8 @@ void main() { httpClient: FakeHttpClient.any(), config: Config.test(), processManager: FakeProcessManager.empty(), - artifacts: Artifacts.test(), + artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -670,7 +680,8 @@ void main() { httpClient: FakeHttpClient.any(), config: Config.test(), processManager: FakeProcessManager.empty(), - artifacts: Artifacts.test(), + artifacts: Artifacts.test(), + buildMode: BuildMode.debug, ); await devFS.create(); @@ -763,6 +774,7 @@ void main() { config: Config.test(), processManager: processManager, artifacts: artifacts, + buildMode: BuildMode.debug, ); await devFS.create(); @@ -843,6 +855,7 @@ void main() { config: Config.test(), processManager: processManager, artifacts: artifacts, + buildMode: BuildMode.debug, ); await devFS.create();