Unverified Commit 2689560b authored by Chris Bracken's avatar Chris Bracken Committed by GitHub

Add Xcode.cc, Xcode.clang methods for iOS builds (#16974)

Makes for easier mocking, particularly for testing AOT snapshot build.
parent d4ba2f75
...@@ -16,6 +16,7 @@ import '../build_info.dart'; ...@@ -16,6 +16,7 @@ import '../build_info.dart';
import '../compile.dart'; import '../compile.dart';
import '../dart/package_map.dart'; import '../dart/package_map.dart';
import '../globals.dart'; import '../globals.dart';
import '../ios/mac.dart' show xcode;
import '../resident_runner.dart'; import '../resident_runner.dart';
import '../runner/flutter_command.dart'; import '../runner/flutter_command.dart';
import 'build.dart'; import 'build.dart';
...@@ -415,7 +416,7 @@ Future<String> _buildAotSnapshot( ...@@ -415,7 +416,7 @@ Future<String> _buildAotSnapshot(
if (platform == TargetPlatform.ios) { if (platform == TargetPlatform.ios) {
printStatus('Building App.framework...'); printStatus('Building App.framework...');
final List<String> commonBuildOptions = <String>['-arch', 'arm64', '-miphoneos-version-min=8.0']; const List<String> commonBuildOptions = const <String>['-arch', 'arm64', '-miphoneos-version-min=8.0'];
if (interpreter) { if (interpreter) {
await runCheckedAsync(<String>['mv', vmSnapshotData, fs.path.join(outputDir.path, kVmSnapshotData)]); await runCheckedAsync(<String>['mv', vmSnapshotData, fs.path.join(outputDir.path, kVmSnapshotData)]);
...@@ -428,37 +429,29 @@ Future<String> _buildAotSnapshot( ...@@ -428,37 +429,29 @@ Future<String> _buildAotSnapshot(
'xxd', '--include', kIsolateSnapshotData, fs.path.basename(kIsolateSnapshotDataC) 'xxd', '--include', kIsolateSnapshotData, fs.path.basename(kIsolateSnapshotDataC)
], workingDirectory: outputDir.path); ], workingDirectory: outputDir.path);
await runCheckedAsync(<String>['xcrun', 'cc'] await xcode.cc(commonBuildOptions.toList()..addAll(<String>['-c', kVmSnapshotDataC, '-o', kVmSnapshotDataO]));
..addAll(commonBuildOptions) await xcode.cc(commonBuildOptions.toList()..addAll(<String>['-c', kIsolateSnapshotDataC, '-o', kIsolateSnapshotDataO]));
..addAll(<String>['-c', kVmSnapshotDataC, '-o', kVmSnapshotDataO]));
await runCheckedAsync(<String>['xcrun', 'cc']
..addAll(commonBuildOptions)
..addAll(<String>['-c', kIsolateSnapshotDataC, '-o', kIsolateSnapshotDataO]));
} else { } else {
await runCheckedAsync(<String>['xcrun', 'cc'] await xcode.cc(commonBuildOptions.toList()..addAll(<String>['-c', assembly, '-o', assemblyO]));
..addAll(commonBuildOptions)
..addAll(<String>['-c', assembly, '-o', assemblyO]));
} }
final String frameworkDir = fs.path.join(outputDir.path, 'App.framework'); final String frameworkDir = fs.path.join(outputDir.path, 'App.framework');
fs.directory(frameworkDir).createSync(recursive: true); fs.directory(frameworkDir).createSync(recursive: true);
final String appLib = fs.path.join(frameworkDir, 'App'); final String appLib = fs.path.join(frameworkDir, 'App');
final List<String> linkCommand = <String>['xcrun', 'clang'] final List<String> linkArgs = commonBuildOptions.toList()..addAll(<String>[
..addAll(commonBuildOptions) '-dynamiclib',
..addAll(<String>[ '-Xlinker', '-rpath', '-Xlinker', '@executable_path/Frameworks',
'-dynamiclib', '-Xlinker', '-rpath', '-Xlinker', '@loader_path/Frameworks',
'-Xlinker', '-rpath', '-Xlinker', '@executable_path/Frameworks', '-install_name', '@rpath/App.framework/App',
'-Xlinker', '-rpath', '-Xlinker', '@loader_path/Frameworks', '-o', appLib,
'-install_name', '@rpath/App.framework/App',
'-o', appLib,
]); ]);
if (interpreter) { if (interpreter) {
linkCommand.add(kVmSnapshotDataO); linkArgs.add(kVmSnapshotDataO);
linkCommand.add(kIsolateSnapshotDataO); linkArgs.add(kIsolateSnapshotDataO);
} else { } else {
linkCommand.add(assemblyO); linkArgs.add(assemblyO);
} }
await runCheckedAsync(linkCommand); await xcode.clang(linkArgs);
} else { } else {
if (compileToSharedLibrary) { if (compileToSharedLibrary) {
// A word of warning: Instead of compiling via two steps, to a .o file and // A word of warning: Instead of compiling via two steps, to a .o file and
......
...@@ -175,6 +175,14 @@ class Xcode { ...@@ -175,6 +175,14 @@ class Xcode {
return minorVersion >= kXcodeRequiredVersionMinor; return minorVersion >= kXcodeRequiredVersionMinor;
return false; return false;
} }
Future<RunResult> cc(List<String> args) {
return runCheckedAsync(<String>['xcrun', 'cc']..addAll(args));
}
Future<RunResult> clang(List<String> args) {
return runCheckedAsync(<String>['xcrun', 'clang']..addAll(args));
}
} }
Future<XcodeBuildResult> buildXcodeProject({ Future<XcodeBuildResult> buildXcodeProject({
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment