Skip to content

Commit c4c8cc4

Browse files
committed
test on more android API levels
1 parent 7a18291 commit c4c8cc4

14 files changed

+66
-39
lines changed

pkgs/native_toolchain_c/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.16.3
2+
3+
* Support linking for Android.
4+
15
## 0.16.2
26

37
* Bump the SDK constraint to at least the one from `package:hooks` to fix

pkgs/native_toolchain_c/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: native_toolchain_c
22
description: >-
33
A library to invoke the native C compiler installed on the host machine.
4-
version: 0.16.2
4+
version: 0.16.3
55
repository: https://github.com/dart-lang/native/tree/main/pkgs/native_toolchain_c
66

77
topics:

pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_android_test.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@ void main() {
2020
Architecture.riscv64,
2121
];
2222

23-
/// From https://docs.flutter.dev/reference/supported-platforms.
24-
const flutterAndroidNdkVersionLowestSupported = 21;
25-
26-
/// From https://docs.flutter.dev/reference/supported-platforms.
27-
const flutterAndroidNdkVersionHighestSupported = 34;
28-
2923
const optimizationLevels = OptimizationLevel.values;
3024
var selectOptimizationLevel = 0;
3125

pkgs/native_toolchain_c/test/clinker/build_testfiles.dart

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ import '../helpers.dart';
1313
Future<Uri> buildTestArchive(
1414
Uri tempUri,
1515
Uri tempUri2,
16-
OS os,
17-
Architecture architecture,
18-
) async {
16+
OS targetOS,
17+
Architecture architecture, {
18+
int? androidTargetNdkApi, // Must be specified iff targetOS is OS.android.
19+
}) async {
20+
assert((targetOS != OS.android) == (androidTargetNdkApi == null));
1921
final test1Uri = packageUri.resolve('test/clinker/testfiles/linker/test1.c');
2022
final test2Uri = packageUri.resolve('test/clinker/testfiles/linker/test2.c');
2123
if (!await File.fromUri(test1Uri).exists() ||
@@ -37,15 +39,12 @@ Future<Uri> buildTestArchive(
3739
..config.setupBuild(linkingEnabled: false)
3840
..addExtension(
3941
CodeAssetExtension(
40-
targetOS: os,
42+
targetOS: targetOS,
4143
targetArchitecture: architecture,
4244
linkModePreference: LinkModePreference.dynamic,
4345
cCompiler: cCompiler,
44-
android: os == OS.android
45-
? AndroidCodeConfig(
46-
// TODO: figure out if we want to test different versions
47-
targetNdkApi: 21,
48-
)
46+
android: androidTargetNdkApi != null
47+
? AndroidCodeConfig(targetNdkApi: androidTargetNdkApi)
4948
: null,
5049
),
5150
);

pkgs/native_toolchain_c/test/clinker/object_cross_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import 'package:test/test.dart';
1414

1515
import 'objects_helper.dart';
1616

17-
Future<void> main() async {
17+
void main() {
1818
if (!Platform.isLinux) {
1919
// Avoid needing status files on Dart SDK CI.
2020
return;
@@ -28,5 +28,5 @@ Future<void> main() async {
2828
Architecture.riscv64,
2929
]..remove(Architecture.current);
3030

31-
await runObjectTests(OS.current, architectures);
31+
runObjectTests(OS.current, architectures);
3232
}

pkgs/native_toolchain_c/test/clinker/objects_cross_android_test.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:code_assets/code_assets.dart';
6+
import 'package:test/test.dart';
67

8+
import '../helpers.dart';
79
import 'objects_helper.dart';
810

9-
Future<void> main() async {
11+
void main() {
1012
final architectures = [
1113
Architecture.arm,
1214
Architecture.arm64,
@@ -17,5 +19,12 @@ Future<void> main() async {
1719

1820
const targetOS = OS.android;
1921

20-
await runObjectTests(targetOS, architectures);
22+
for (final apiLevel in [
23+
flutterAndroidNdkVersionLowestSupported,
24+
flutterAndroidNdkVersionHighestSupported,
25+
]) {
26+
group('Android API$apiLevel', () {
27+
runObjectTests(targetOS, architectures, androidTargetNdkApi: apiLevel);
28+
});
29+
}
2130
}

pkgs/native_toolchain_c/test/clinker/objects_helper.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ import 'package:test/test.dart';
1212
import '../helpers.dart';
1313
import 'build_testfiles.dart';
1414

15-
Future<void> runObjectTests(
15+
void runObjectTests(
1616
OS targetOS,
17-
List<Architecture> architectures,
18-
) async {
17+
List<Architecture> architectures, {
18+
int? androidTargetNdkApi, // Must be specified iff targetOS is OS.android.
19+
}) {
20+
assert((targetOS != OS.android) == (androidTargetNdkApi == null));
1921
const name = 'mylibname';
2022

2123
for (final architecture in architectures) {
@@ -28,6 +30,7 @@ Future<void> runObjectTests(
2830
tempUri2,
2931
targetOS,
3032
architecture,
33+
androidTargetNdkApi: androidTargetNdkApi,
3134
);
3235

3336
final linkInputBuilder = LinkInputBuilder()
@@ -44,8 +47,8 @@ Future<void> runObjectTests(
4447
targetArchitecture: architecture,
4548
linkModePreference: LinkModePreference.dynamic,
4649
cCompiler: cCompiler,
47-
android: targetOS == OS.android
48-
? AndroidCodeConfig(targetNdkApi: 21)
50+
android: androidTargetNdkApi != null
51+
? AndroidCodeConfig(targetNdkApi: androidTargetNdkApi)
4952
: null,
5053
),
5154
);

pkgs/native_toolchain_c/test/clinker/objects_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import 'package:test/test.dart';
1414

1515
import 'objects_helper.dart';
1616

17-
Future<void> main() async {
17+
void main() {
1818
if (!Platform.isLinux) {
1919
// Avoid needing status files on Dart SDK CI.
2020
return;
2121
}
2222

23-
await runObjectTests(OS.current, [Architecture.current]);
23+
runObjectTests(OS.current, [Architecture.current]);
2424
}

pkgs/native_toolchain_c/test/clinker/throws_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import 'package:test/test.dart';
99

1010
import '../helpers.dart';
1111

12-
Future<void> main() async {
12+
void main() {
1313
for (final targetOS in OS.values) {
1414
if (targetOS == OS.linux || targetOS == OS.android) {
1515
// Is implemented.

pkgs/native_toolchain_c/test/clinker/treeshake_cross_android_test.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:code_assets/code_assets.dart';
6+
import 'package:test/test.dart';
67

8+
import '../helpers.dart';
79
import 'treeshake_helper.dart';
810

9-
Future<void> main() async {
11+
void main() {
1012
final architectures = [
1113
Architecture.arm,
1214
Architecture.arm64,
@@ -17,5 +19,12 @@ Future<void> main() async {
1719

1820
const targetOS = OS.android;
1921

20-
await runTreeshakeTests(targetOS, architectures);
22+
for (final apiLevel in [
23+
flutterAndroidNdkVersionLowestSupported,
24+
flutterAndroidNdkVersionHighestSupported,
25+
]) {
26+
group('Android API$apiLevel', () {
27+
runTreeshakeTests(targetOS, architectures, androidTargetNdkApi: apiLevel);
28+
});
29+
}
2130
}

pkgs/native_toolchain_c/test/clinker/treeshake_cross_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import 'package:test/test.dart';
1414

1515
import 'treeshake_helper.dart';
1616

17-
Future<void> main() async {
17+
void main() {
1818
if (!Platform.isLinux) {
1919
// Avoid needing status files on Dart SDK CI.
2020
return;
@@ -28,5 +28,5 @@ Future<void> main() async {
2828
Architecture.riscv64,
2929
]..remove(Architecture.current);
3030

31-
await runTreeshakeTests(OS.current, architectures);
31+
runTreeshakeTests(OS.current, architectures);
3232
}

pkgs/native_toolchain_c/test/clinker/treeshake_helper.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ import 'package:test/test.dart';
1212
import '../helpers.dart';
1313
import 'build_testfiles.dart';
1414

15-
Future<void> runTreeshakeTests(
15+
void runTreeshakeTests(
1616
OS targetOS,
17-
List<Architecture> architectures,
18-
) async {
17+
List<Architecture> architectures, {
18+
int? androidTargetNdkApi, // Must be specified iff targetOS is OS.android.
19+
}) {
20+
assert((targetOS != OS.android) == (androidTargetNdkApi == null));
1921
CLinker linkerManual(List<String> sources) => CLinker.library(
2022
name: 'mylibname',
2123
assetName: '',
@@ -58,6 +60,7 @@ Future<void> runTreeshakeTests(
5860
tempUri2,
5961
targetOS,
6062
architecture,
63+
androidTargetNdkApi: androidTargetNdkApi,
6164
);
6265

6366
final linkInputBuilder = LinkInputBuilder()
@@ -74,8 +77,8 @@ Future<void> runTreeshakeTests(
7477
targetArchitecture: architecture,
7578
linkModePreference: LinkModePreference.dynamic,
7679
cCompiler: cCompiler,
77-
android: targetOS == OS.android
78-
? AndroidCodeConfig(targetNdkApi: 21)
80+
android: androidTargetNdkApi != null
81+
? AndroidCodeConfig(targetNdkApi: androidTargetNdkApi)
7982
: null,
8083
),
8184
);

pkgs/native_toolchain_c/test/clinker/treeshake_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import 'package:test/test.dart';
1414

1515
import 'treeshake_helper.dart';
1616

17-
Future<void> main() async {
17+
void main() {
1818
if (!Platform.isLinux) {
1919
// Avoid needing status files on Dart SDK CI.
2020
return;
2121
}
2222

23-
await runTreeshakeTests(OS.current, [Architecture.current]);
23+
runTreeshakeTests(OS.current, [Architecture.current]);
2424
}

pkgs/native_toolchain_c/test/helpers.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,12 @@ Future<void> expectPageSize(Uri dylib, int pageSize) async {
303303

304304
int defaultMacOSVersion = 13;
305305

306+
/// From https://docs.flutter.dev/reference/supported-platforms.
307+
const flutterAndroidNdkVersionLowestSupported = 21;
308+
309+
/// From https://docs.flutter.dev/reference/supported-platforms.
310+
const flutterAndroidNdkVersionHighestSupported = 34;
311+
306312
const objdumpFileFormat = {
307313
Architecture.arm: 'elf32-littlearm',
308314
Architecture.arm64: 'elf64-littleaarch64',

0 commit comments

Comments
 (0)