mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 00:29:50 +00:00
[dartdev] Use kernel concatenation in dart build
for native assets
Note: This code will need more refactor with adding link hooks https://dart-review.googlesource.com/c/sdk/+/338380. I tried to keep the diff as local as possible for now, just to exercise the kernel concatenation. TEST=pkg/dartdev/test/native_assets/build_test.dart Closes: https://github.com/dart-lang/sdk/issues/55377 Change-Id: I28417bf80946029173a1dc472d6c5972544d7064 Cq-Include-Trybots: dart/try:pkg-linux-debug-try,pkg-linux-release-arm64-try,pkg-mac-release-try,pkg-mac-release-arm64-try,pkg-win-release-try,pkg-win-release-arm64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/362384 Reviewed-by: Moritz Sümmermann <mosum@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com>
This commit is contained in:
parent
040b93757b
commit
5d3dd79d95
|
@ -107,7 +107,7 @@ Future<ProcessResult> markExecutable(String outputFile) {
|
|||
/// to static functions annotated with `@ResourceIdentifier` will be collected.
|
||||
Future<ProcessResult> generateKernelHelper({
|
||||
required String dartaotruntime,
|
||||
required String sourceFile,
|
||||
String? sourceFile,
|
||||
required String kernelFile,
|
||||
String? packages,
|
||||
List<String> defines = const [],
|
||||
|
@ -140,7 +140,7 @@ Future<ProcessResult> generateKernelHelper({
|
|||
if (resourcesFile != null) '--resources-file=$resourcesFile',
|
||||
'--output=$kernelFile',
|
||||
...extraGenKernelOptions,
|
||||
sourceFile,
|
||||
if (sourceFile != null) sourceFile,
|
||||
];
|
||||
return Process.run(dartaotruntime, args);
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ Future<void> generateNative({
|
|||
List<String> extraOptions = const [],
|
||||
}) async {
|
||||
final tempDir = Directory.systemTemp.createTempSync();
|
||||
final kernelFile = path.join(tempDir.path, 'kernel.dill');
|
||||
final programKernelFile = path.join(tempDir.path, 'program.dill');
|
||||
|
||||
final sourcePath = _normalize(sourceFile)!;
|
||||
final sourceWithoutDartOrDill = sourcePath.replaceFirst(
|
||||
|
@ -112,7 +112,7 @@ Future<void> generateNative({
|
|||
final kernelResult = await generateKernelHelper(
|
||||
dartaotruntime: dartaotruntime,
|
||||
sourceFile: sourcePath,
|
||||
kernelFile: kernelFile,
|
||||
kernelFile: programKernelFile,
|
||||
packages: packages,
|
||||
defines: defines,
|
||||
fromDill: await isKernelFile(sourcePath),
|
||||
|
@ -124,7 +124,6 @@ Future<void> generateNative({
|
|||
'--verbosity=$verbosity',
|
||||
'--${soundNullSafety ? '' : 'no-'}sound-null-safety',
|
||||
],
|
||||
nativeAssets: nativeAssets,
|
||||
resourcesFile: resourcesFile,
|
||||
aot: true,
|
||||
);
|
||||
|
@ -132,6 +131,46 @@ Future<void> generateNative({
|
|||
if (kernelResult.exitCode != 0) {
|
||||
throw StateError('Generating AOT kernel dill failed!');
|
||||
}
|
||||
String kernelFile;
|
||||
if (nativeAssets == null) {
|
||||
kernelFile = programKernelFile;
|
||||
} else {
|
||||
// TODO(dacoharkes): This method will need to be split in two parts. Then
|
||||
// the link hooks can be run in between those two parts.
|
||||
final nativeAssetsDillFile =
|
||||
path.join(tempDir.path, 'native_assets.dill');
|
||||
final kernelResult = await generateKernelHelper(
|
||||
dartaotruntime: dartaotruntime,
|
||||
kernelFile: nativeAssetsDillFile,
|
||||
packages: packages,
|
||||
defines: defines,
|
||||
enableAsserts: enableAsserts,
|
||||
enableExperiment: enableExperiment,
|
||||
targetOS: targetOS,
|
||||
extraGenKernelOptions: [
|
||||
'--invocation-modes=compile',
|
||||
'--verbosity=$verbosity',
|
||||
'--${soundNullSafety ? '' : 'no-'}sound-null-safety',
|
||||
],
|
||||
nativeAssets: nativeAssets,
|
||||
aot: true,
|
||||
);
|
||||
await _forwardOutput(kernelResult);
|
||||
if (kernelResult.exitCode != 0) {
|
||||
throw StateError('Generating AOT kernel dill failed!');
|
||||
}
|
||||
kernelFile = path.join(tempDir.path, 'kernel.dill');
|
||||
final programKernelBytes = await File(programKernelFile).readAsBytes();
|
||||
final nativeAssetKernelBytes =
|
||||
await File(nativeAssetsDillFile).readAsBytes();
|
||||
await File(kernelFile).writeAsBytes(
|
||||
[
|
||||
...programKernelBytes,
|
||||
...nativeAssetKernelBytes,
|
||||
],
|
||||
flush: true,
|
||||
);
|
||||
}
|
||||
|
||||
final extraAotOptions = <String>[
|
||||
if (!soundNullSafety) '--no-sound-null-safety',
|
||||
|
|
Loading…
Reference in a new issue