Skip to content

Commit 01c04df

Browse files
committed
Merge commit '4ff7798500796ed2947f1fcfb1b2f8cfeca3e4bd'
2 parents 906cb0e + 4ff7798 commit 01c04df

8 files changed

Lines changed: 63 additions & 19 deletions

File tree

super_native_extensions/cargokit/.github/workflows/test_example_plugin_build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ jobs:
8080
if [[ $(sysctl hw.optional.arm64) == *"hw.optional.arm64: 1"* ]]; then
8181
export JAVA_HOME=$JAVA_HOME_17_arm64
8282
else
83-
export JAVA_HOME=$JAVA_HOME_11_X64
83+
export JAVA_HOME=$JAVA_HOME_17_X64
8484
fi
8585
flutter build apk --${{ matrix.build_mode }} -v
8686

super_native_extensions/cargokit/build_tool/lib/src/build_tool.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ class PrecompileBinariesCommand extends Command {
127127
'temp-dir',
128128
help: 'Directory to store temporary build artifacts',
129129
)
130+
..addOption(
131+
'glibc-version',
132+
help: 'GLIBC version to use for linux builds',
133+
)
130134
..addFlag(
131135
"verbose",
132136
abbr: "v",
@@ -195,6 +199,7 @@ class PrecompileBinariesCommand extends Command {
195199
androidNdkVersion: argResults!['android-ndk-version'] as String?,
196200
androidMinSdkVersion: androidMinSdkVersion,
197201
tempDir: argResults!['temp-dir'] as String?,
202+
glibcVersion: argResults!['glibc-version'] as String?,
198203
);
199204

200205
await precompileBinaries.run();

super_native_extensions/cargokit/build_tool/lib/src/builder.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ class BuildEnvironment {
5151
final int? androidMinSdkVersion;
5252
final String? javaHome;
5353

54+
final String? glibcVersion;
55+
5456
BuildEnvironment({
5557
required this.configuration,
5658
required this.crateOptions,
@@ -62,6 +64,7 @@ class BuildEnvironment {
6264
this.androidNdkVersion,
6365
this.androidMinSdkVersion,
6466
this.javaHome,
67+
this.glibcVersion,
6568
});
6669

6770
static BuildConfiguration parseBuildConfiguration(String value) {
@@ -125,6 +128,9 @@ class RustBuilder {
125128
if (!rustup.installedTargets(toolchain)!.contains(target.rust)) {
126129
rustup.installTarget(target.rust, toolchain: toolchain);
127130
}
131+
if (environment.glibcVersion != null) {
132+
rustup.installZigBuild(toolchain);
133+
}
128134
}
129135

130136
CargoBuildOptions? get _buildOptions =>
@@ -142,15 +148,18 @@ class RustBuilder {
142148
'run',
143149
_toolchain,
144150
'cargo',
145-
'build',
151+
environment.glibcVersion != null ? 'zigbuild' : 'build',
146152
...extraArgs,
147153
'--manifest-path',
148154
manifestPath,
149155
'-p',
150156
environment.crateInfo.packageName,
151157
if (!environment.configuration.isDebug) '--release',
152158
'--target',
153-
target.rust,
159+
target.rust +
160+
(environment.glibcVersion != null
161+
? '.${environment.glibcVersion!}'
162+
: ""),
154163
'--target-dir',
155164
environment.targetTempDir,
156165
],

super_native_extensions/cargokit/build_tool/lib/src/precompile_binaries.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class PrecompileBinaries {
2626
this.androidNdkVersion,
2727
this.androidMinSdkVersion,
2828
this.tempDir,
29+
this.glibcVersion,
2930
});
3031

3132
final PrivateKey privateKey;
@@ -37,6 +38,7 @@ class PrecompileBinaries {
3738
final String? androidNdkVersion;
3839
final int? androidMinSdkVersion;
3940
final String? tempDir;
41+
final String? glibcVersion;
4042

4143
static String fileName(Target target, String name) {
4244
return '${target.rust}_$name';
@@ -93,6 +95,7 @@ class PrecompileBinaries {
9395
androidSdkPath: androidSdkLocation,
9496
androidNdkVersion: androidNdkVersion,
9597
androidMinSdkVersion: androidMinSdkVersion,
98+
glibcVersion: glibcVersion,
9699
);
97100

98101
final rustup = Rustup();

super_native_extensions/cargokit/build_tool/lib/src/rustup.dart

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,27 @@ class Rustup {
3333
required String toolchain,
3434
}) {
3535
log.info("Installing Rust target: $target");
36+
runCommand("rustup", ['target', 'add', '--toolchain', toolchain, target]);
37+
_installedTargets(toolchain)?.add(target);
38+
}
39+
40+
bool _didInstallZigBuild = false;
41+
42+
void installZigBuild(String toolchain) {
43+
if (_didInstallZigBuild) {
44+
return;
45+
}
46+
47+
log.info("Installing Zig build");
3648
runCommand("rustup", [
37-
'target',
38-
'add',
39-
'--toolchain',
49+
'run',
4050
toolchain,
41-
target,
51+
'cargo',
52+
'install',
53+
'--locked',
54+
'cargo-zigbuild',
4255
]);
43-
_installedTargets(toolchain)?.add(target);
56+
_didInstallZigBuild = true;
4457
}
4558

4659
final List<_Toolchain> _installedToolchains;

super_native_extensions/cargokit/build_tool/lib/src/target.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ class Target {
4343
rust: 'x86_64-pc-windows-msvc',
4444
flutter: 'windows-x64',
4545
),
46+
Target(
47+
rust: 'aarch64-pc-windows-msvc',
48+
flutter: 'windows-arm64',
49+
),
4650
Target(
4751
rust: 'x86_64-unknown-linux-gnu',
4852
flutter: 'linux-x64',
@@ -51,6 +55,7 @@ class Target {
5155
rust: 'aarch64-unknown-linux-gnu',
5256
flutter: 'linux-arm64',
5357
),
58+
Target(rust: 'riscv64gc-unknown-linux-gnu', flutter: 'linux-riscv64'),
5459
Target(
5560
rust: 'x86_64-apple-darwin',
5661
darwinPlatform: 'macosx',
@@ -106,9 +111,11 @@ class Target {
106111
if (Platform.isLinux) {
107112
// Right now we don't support cross-compiling on Linux. So we just return
108113
// the host target.
109-
final arch = runCommand('arch', []).stdout as String;
110-
if (arch.trim() == 'aarch64') {
114+
final arch = (runCommand('arch', []).stdout as String).trim();
115+
if (arch == 'aarch64') {
111116
return [Target.forRustTriple('aarch64-unknown-linux-gnu')!];
117+
} else if (arch == 'riscv64') {
118+
return [Target.forRustTriple('riscv64gc-unknown-linux-gnu')!];
112119
} else {
113120
return [Target.forRustTriple('x86_64-unknown-linux-gnu')!];
114121
}

super_native_extensions/cargokit/cmake/resolve_symlinks.ps1

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,21 @@ function Resolve-Symlinks {
1414
if ($realPath -and !$realPath.EndsWith($separator)) {
1515
$realPath += $separator
1616
}
17-
$realPath += $part
17+
18+
$realPath += $part.Replace('\', '/')
19+
20+
# The slash is important when using Get-Item on Drive letters in pwsh.
21+
if (-not($realPath.Contains($separator)) -and $realPath.EndsWith(':')) {
22+
$realPath += '/'
23+
}
24+
1825
$item = Get-Item $realPath
19-
if ($item.Target) {
20-
$realPath = $item.Target.Replace('\', '/')
26+
if ($item.LinkTarget) {
27+
$realPath = $item.LinkTarget.Replace('\', '/')
2128
}
2229
}
2330
$realPath
2431
}
2532

26-
$path=Resolve-Symlinks -Path $args[0]
33+
$path = Resolve-Symlinks -Path $args[0]
2734
Write-Host $path

super_native_extensions/cargokit/gradle/plugin.gradle

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ abstract class CargoKitBuildTask extends DefaultTask {
5555
def manifestDir = Paths.get(project.buildscript.sourceFile.parent, project.cargokit.manifestDir)
5656

5757
def rootProjectDir = project.rootProject.projectDir
58-
58+
5959
if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
6060
project.exec {
6161
commandLine 'chmod', '+x', path
6262
}
6363
}
64-
64+
6565
project.exec {
6666
executable path
6767
args "build-gradle"
@@ -92,7 +92,7 @@ class CargoKitPlugin implements Plugin<Project> {
9292
private Plugin _findFlutterPlugin(Map projects) {
9393
for (project in projects) {
9494
for (plugin in project.value.getPlugins()) {
95-
if (plugin.class.name == "FlutterPlugin") {
95+
if (plugin.class.name == "com.flutter.gradle.FlutterPlugin") {
9696
return plugin;
9797
}
9898
}
@@ -116,7 +116,7 @@ class CargoKitPlugin implements Plugin<Project> {
116116
}
117117

118118
def cargoBuildDir = "${project.buildDir}/build"
119-
119+
120120
// Determine if the project is an application or library
121121
def isApplication = plugin.project.plugins.hasPlugin('com.android.application')
122122
def variants = isApplication ? plugin.project.android.applicationVariants : plugin.project.android.libraryVariants
@@ -129,7 +129,7 @@ class CargoKitPlugin implements Plugin<Project> {
129129
def jniLibs = project.android.sourceSets.maybeCreate(buildType).jniLibs;
130130
jniLibs.srcDir(new File(cargoOutputDir))
131131

132-
def platforms = plugin.getTargetPlatforms().collect()
132+
def platforms = com.flutter.gradle.FlutterPluginUtils.getTargetPlatforms(project).collect()
133133

134134
// Same thing addFlutterDependencies does in flutter.gradle
135135
if (buildType == "debug") {

0 commit comments

Comments
 (0)