1
0
mirror of https://github.com/dart-lang/sdk synced 2024-07-03 00:08:46 +00:00

[vm/ffi] Fuchsia FFI testing package

This does not include enabling the FFI on Fuchsia. So these tests will
fail without the dependent CL.

This CL adds an `all_positive.dart` test file to be packaged in the
.far file, such that it is easier to run all FFI tests in one go.

We don't run tests on the bots, but we do build this test package on
the bots.

To build the .far files locally:
```
tools/build.py --os=fuchsia -m debug fuchsia_ffi_test_package
tools/build.py --os=fuchsia -m debug -a arm64 fuchsia_ffi_test_package
```

Issue: https://github.com/dart-lang/sdk/issues/44434

Change-Id: Iec418e0c10d77afbf811fb83151664bcc2710b99
Cq-Include-Trybots: luci.dart.try:vm-fuchsia-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175484
Reviewed-by: Liam Appelbe <liama@google.com>
This commit is contained in:
Daco Harkes 2020-12-10 12:15:17 +00:00 committed by commit-bot@chromium.org
parent cae99dc82d
commit 550d580d5e
12 changed files with 289 additions and 40 deletions

112
BUILD.gn
View File

@ -159,16 +159,64 @@ if (is_fuchsia) {
import("third_party/fuchsia/sdk/linux/build/component.gni")
import("third_party/fuchsia/sdk/linux/build/package.gni")
fuchsia_component("fuchsia_test_component") {
testonly = true
data_deps = [ "runtime/bin:dart" ]
manifest = "build/fuchsia/dart.cmx"
template("dart_fuchsia_test_package") {
fuchsia_package(target_name) {
package_name = invoker.package_name
if (is_debug) {
package_name += "_debug"
} else if (is_release) {
package_name += "_release"
} else if (is_product) {
package_name += "_product"
}
testonly = true
deps = invoker.deps
}
}
resource_files = [
".dart_tool/package_config.json",
"pkg/testing/test/hello_test.dart",
"tools/addlatexhash.dart",
]
template("dart_fuchsia_test_component") {
fuchsia_component(target_name) {
testonly = true
data_deps = [ "runtime/bin:dart" ]
if (defined(invoker.data_deps)) {
data_deps += invoker.data_deps
}
manifest = "build/fuchsia/dart.cmx"
library_files = []
if (defined(invoker.library_files)) {
library_files += invoker.library_files
}
resource_files = [
".dart_tool/package_config.json",
"pkg/testing/test/hello_test.dart",
"tools/addlatexhash.dart",
]
resource_dirs = invoker.resource_dirs
resources = []
foreach(file, library_files) {
resources += [
{
path = root_out_dir + "/" + file
dest = "lib/" + file
},
]
}
foreach(file, resource_files) {
resources += [
{
path = file
dest = "data/" + file
},
]
}
resources +=
exec_script("tools/fuchsia/find_resources.py", resource_dirs, "json")
}
}
dart_fuchsia_test_component("fuchsia_test_component") {
resource_dirs = [
"tests/standalone_2",
"pkg/async_helper",
@ -190,30 +238,32 @@ if (is_fuchsia) {
"third_party/pkg/string_scanner",
"third_party/pkg/typed_data",
]
resources = []
foreach(file, resource_files) {
resources += [
{
path = file
dest = "data/" + file
},
]
}
resources +=
exec_script("tools/fuchsia/find_resources.py", resource_dirs, "json")
}
fuchsia_package("fuchsia_test_package") {
package_name = "dart_test_"
if (is_debug) {
package_name += "debug"
} else if (is_release) {
package_name += "release"
} else if (is_product) {
package_name += "product"
}
testonly = true
dart_fuchsia_test_package("fuchsia_test_package") {
package_name = "dart_test"
deps = [ ":fuchsia_test_component" ]
}
dart_fuchsia_test_component("fuchsia_ffi_test_component") {
data_deps = [
"runtime/bin:ffi_test_dynamic_library",
"runtime/bin:ffi_test_functions",
]
library_files = [
"libffi_test_dynamic_library.so",
"libffi_test_functions.so",
]
resource_dirs = [
"pkg/expect",
"pkg/meta",
"tests/ffi",
"third_party/pkg/ffi",
]
}
dart_fuchsia_test_package("fuchsia_ffi_test_package") {
package_name = "dart_ffi_test"
deps = [ ":fuchsia_ffi_test_component" ]
}
}

View File

@ -6,7 +6,7 @@ import 'dart:ffi' as ffi;
import 'dart:io' show Platform;
String _platformPath(String name, {String path = ""}) {
if (Platform.isLinux || Platform.isAndroid)
if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
return path + "lib" + name + ".so";
if (Platform.isMacOS) return path + "lib" + name + ".dylib";
if (Platform.isWindows) return path + name + ".dll";

View File

@ -7,7 +7,7 @@ import 'dart:io' show Platform;
String _platformPath(String name, {String path}) {
if (path == null) path = "";
if (Platform.isLinux || Platform.isAndroid)
if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
return path + "lib" + name + ".so";
if (Platform.isMacOS) return path + "lib" + name + ".dylib";
if (Platform.isWindows) return path + name + ".dll";

View File

@ -6,7 +6,7 @@ import 'dart:ffi';
import 'dart:io' show Platform;
String _platformPath(String name, String path) {
if (Platform.isLinux || Platform.isAndroid)
if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
return path + "lib" + name + ".so";
if (Platform.isMacOS) return path + "lib" + name + ".dylib";
if (Platform.isWindows) return path + name + ".dll";

View File

@ -6,7 +6,7 @@ import 'dart:ffi';
import 'dart:io' show Platform;
String _platformPath(String name, String path) {
if (Platform.isLinux || Platform.isAndroid)
if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
return path + "lib" + name + ".so";
if (Platform.isMacOS) return path + "lib" + name + ".dylib";
if (Platform.isWindows) return path + name + ".dll";

View File

@ -9,7 +9,7 @@ import 'dart:io' show Platform;
String _platformPath(String name, {String path}) {
if (path == null) path = "";
if (Platform.isLinux || Platform.isAndroid)
if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
return path + "lib" + name + ".so";
if (Platform.isMacOS) return path + "lib" + name + ".dylib";
if (Platform.isWindows) return path + name + ".dll";

View File

@ -9,7 +9,7 @@ import 'dart:io' show Platform;
String _platformPath(String name, {String path}) {
if (path == null) path = "";
if (Platform.isLinux || Platform.isAndroid)
if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
return path + "lib" + name + ".so";
if (Platform.isMacOS) return path + "lib" + name + ".dylib";
if (Platform.isWindows) return path + name + ".dll";

View File

@ -0,0 +1,96 @@
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Generated by prepare_flutter_bundle.dart and not ignoring vmspecific.
// Used in fuchsia_test_component.
//
// Note that we are not using any VM flags here, so we are not exercising GC
// corner cases etc. However, we are mainly interested in exercising the
// calling convention on Fuchsia.
import "dart:async";
import "aliasing_test.dart" as main0;
import "data_not_asan_test.dart" as main1;
import "data_test.dart" as main2;
import "dylib_isolates_test.dart" as main3;
import "extension_methods_test.dart" as main4;
import "external_typed_data_test.dart" as main5;
import "function_callbacks_many_test.dart" as main6;
import "function_callbacks_test.dart" as main7;
import "function_callbacks_very_many_test.dart" as main8;
import "function_structs_test.dart" as main9;
import "function_test.dart" as main10;
import "function_very_many_test.dart" as main11;
import "hardfp_test.dart" as main12;
import "negative_function_test.dart" as main13;
import "regress_37254_test.dart" as main16;
import "regress_39044_test.dart" as main17;
import "regress_39063_test.dart" as main18;
import "regress_39885_test.dart" as main19;
import "regress_40537_test.dart" as main20;
import "regress_43016_test.dart" as main21;
import "regress_43693_test.dart" as main22;
import "regress_jump_to_frame_test.dart" as main23;
import "sizeof_test.dart" as main24;
import "snapshot_test.dart" as main25;
import "stacktrace_regress_37910_test.dart" as main26;
import "structs_test.dart" as main27;
import "variance_function_test.dart" as main28;
import "vmspecific_function_callbacks_exit_test.dart" as main29;
import "vmspecific_function_test.dart" as main30;
import "vmspecific_handle_dynamically_linked_test.dart" as main31;
import "vmspecific_handle_test.dart" as main32;
import "vmspecific_object_gc_test.dart" as main34;
import "vmspecific_regress_37100_test.dart" as main35;
import "vmspecific_regress_37511_callbacks_test.dart" as main36;
import "vmspecific_regress_37511_test.dart" as main37;
import "vmspecific_regress_37780_test.dart" as main38;
Future invoke(dynamic fun) async {
if (fun is void Function() || fun is Future Function()) {
return await fun();
} else {
return await fun(<String>[]);
}
}
dynamic main() async {
await invoke(main0.main);
await invoke(main1.main);
await invoke(main2.main);
await invoke(main3.main);
await invoke(main4.main);
await invoke(main5.main);
await invoke(main6.main);
await invoke(main7.main);
await invoke(main8.main);
await invoke(main9.main);
await invoke(main10.main);
await invoke(main11.main);
await invoke(main12.main);
await invoke(main13.main);
await invoke(main16.main);
await invoke(main17.main);
await invoke(main18.main);
await invoke(main19.main);
await invoke(main20.main);
await invoke(main21.main);
await invoke(main22.main);
await invoke(main23.main);
await invoke(main24.main);
await invoke(main25.main);
await invoke(main26.main);
await invoke(main27.main);
await invoke(main28.main);
await invoke(main29.main);
await invoke(main30.main);
await invoke(main31.main);
await invoke(main32.main);
await invoke(main34.main);
await invoke(main35.main);
await invoke(main36.main);
await invoke(main37.main);
await invoke(main38.main);
}

View File

@ -7,7 +7,7 @@ import 'dart:io' show Platform;
String _platformPath(String name, {String? path}) {
if (path == null) path = "";
if (Platform.isLinux || Platform.isAndroid)
if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
return path + "lib" + name + ".so";
if (Platform.isMacOS) return path + "lib" + name + ".dylib";
if (Platform.isWindows) return path + name + ".dll";

View File

@ -0,0 +1,102 @@
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Generated by prepare_flutter_bundle.dart and not ignoring vmspecific.
// Used in fuchsia_test_component.
//
// Note that we are not using any VM flags here, so we are not exercising GC
// corner cases etc. However, we are mainly interested in exercising the
// calling convention on Fuchsia.
import "dart:async";
import "aliasing_test.dart" as main0;
import "data_not_asan_test.dart" as main1;
import "data_test.dart" as main2;
import "dylib_isolates_test.dart" as main3;
import "extension_methods_test.dart" as main4;
import "external_typed_data_test.dart" as main5;
import "function_callbacks_many_test.dart" as main6;
import "function_callbacks_test.dart" as main7;
import "function_callbacks_very_many_test.dart" as main8;
import "function_structs_test.dart" as main9;
import "function_test.dart" as main10;
import "function_very_many_test.dart" as main11;
import "hardfp_test.dart" as main12;
import "negative_function_test.dart" as main13;
import "null_regress_39068_test.dart" as main14;
import "null_test.dart" as main15;
import "regress_37254_test.dart" as main16;
import "regress_39044_test.dart" as main17;
import "regress_39063_test.dart" as main18;
import "regress_39885_test.dart" as main19;
import "regress_40537_test.dart" as main20;
import "regress_43016_test.dart" as main21;
import "regress_43693_test.dart" as main22;
import "regress_jump_to_frame_test.dart" as main23;
import "sizeof_test.dart" as main24;
import "snapshot_test.dart" as main25;
import "stacktrace_regress_37910_test.dart" as main26;
import "structs_test.dart" as main27;
import "variance_function_test.dart" as main28;
import "vmspecific_function_callbacks_exit_test.dart" as main29;
import "vmspecific_function_test.dart" as main30;
import "vmspecific_handle_dynamically_linked_test.dart" as main31;
import "vmspecific_handle_test.dart" as main32;
import "vmspecific_null_test.dart" as main33;
import "vmspecific_object_gc_test.dart" as main34;
import "vmspecific_regress_37100_test.dart" as main35;
import "vmspecific_regress_37511_callbacks_test.dart" as main36;
import "vmspecific_regress_37511_test.dart" as main37;
import "vmspecific_regress_37780_test.dart" as main38;
Future invoke(dynamic fun) async {
if (fun is void Function() || fun is Future Function()) {
return await fun();
} else {
return await fun(<String>[]);
}
}
dynamic main() async {
await invoke(main0.main);
await invoke(main1.main);
await invoke(main2.main);
await invoke(main3.main);
await invoke(main4.main);
await invoke(main5.main);
await invoke(main6.main);
await invoke(main7.main);
await invoke(main8.main);
await invoke(main9.main);
await invoke(main10.main);
await invoke(main11.main);
await invoke(main12.main);
await invoke(main13.main);
await invoke(main14.main);
await invoke(main15.main);
await invoke(main16.main);
await invoke(main17.main);
await invoke(main18.main);
await invoke(main19.main);
await invoke(main20.main);
await invoke(main21.main);
await invoke(main22.main);
await invoke(main23.main);
await invoke(main24.main);
await invoke(main25.main);
await invoke(main26.main);
await invoke(main27.main);
await invoke(main28.main);
await invoke(main29.main);
await invoke(main30.main);
await invoke(main31.main);
await invoke(main32.main);
await invoke(main33.main);
await invoke(main34.main);
await invoke(main35.main);
await invoke(main36.main);
await invoke(main37.main);
await invoke(main38.main);
}

View File

@ -7,7 +7,7 @@ import 'dart:io' show Platform;
String _platformPath(String name, {String path}) {
if (path == null) path = "";
if (Platform.isLinux || Platform.isAndroid)
if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
return path + "lib" + name + ".so";
if (Platform.isMacOS) return path + "lib" + name + ".dylib";
if (Platform.isWindows) return path + name + ".dll";

View File

@ -1745,7 +1745,8 @@
"--arch=x64,arm64",
"runtime",
"create_sdk",
"fuchsia_test_package"
"fuchsia_test_package",
"fuchsia_ffi_test_package"
]
}
]