Skip to content

Commit 1e8da47

Browse files
committed
fix: use OS.executableFileName rather than hardcoding the extension
1 parent 05ebd55 commit 1e8da47

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

native_toolchain_rust/lib/src/android_environment.dart

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:io';
22

33
import 'package:collection/collection.dart';
4+
import 'package:native_assets_cli/native_assets_cli.dart';
45
import 'package:native_toolchain_rust/rustup.dart';
56
import 'package:native_toolchain_rust/src/android_linker_wrapper.dart';
67
import 'package:path/path.dart' as path;
@@ -86,8 +87,6 @@ class AndroidEnvironment {
8687
Future<Map<String, String>> buildEnvironment() async {
8788
final toolchainPath = ndkInfo.toolchainPath;
8889

89-
final exe = Platform.isWindows ? '.exe' : '';
90-
9190
final arKey = 'AR_${target.triple}';
9291
final arValue = ['${target.triple}-ar', 'llvm-ar', 'llvm-ar.exe']
9392
.map((e) => path.join(toolchainPath, e))
@@ -99,12 +98,18 @@ class AndroidEnvironment {
9998
final targetArg = '--target=${target.triple}$minSdkVersion';
10099

101100
final ccKey = 'CC_${target.triple}';
102-
final ccValue = path.join(toolchainPath, 'clang$exe');
101+
final ccValue = path.join(
102+
toolchainPath,
103+
OS.current.executableFileName('clang'),
104+
);
103105
final cfFlagsKey = 'CFLAGS_${target.triple}';
104106
final cFlagsValue = targetArg;
105107

106108
final cxxKey = 'CXX_${target.triple}';
107-
final cxxValue = path.join(toolchainPath, 'clang++$exe');
109+
final cxxValue = path.join(
110+
toolchainPath,
111+
OS.current.executableFileName('clang++'),
112+
);
108113
final cxxFlagsKey = 'CXXFLAGS_${target.triple}';
109114
final cxxFlagsValue = targetArg;
110115

@@ -113,7 +118,10 @@ class AndroidEnvironment {
113118
.toUpperCase();
114119

115120
final ranlibKey = 'RANLIB_${target.triple}';
116-
final ranlibValue = path.join(toolchainPath, 'llvm-ranlib$exe');
121+
final ranlibValue = path.join(
122+
toolchainPath,
123+
OS.current.executableFileName('llvm-ranlib'),
124+
);
117125

118126
final rustFlagsKey = 'CARGO_ENCODED_RUSTFLAGS';
119127
final rustFlagsValue = _libGccWorkaround(targetTempDir, ndkInfo.ndkVersion);

native_toolchain_rust/lib/src/android_linker_wrapper.dart

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:io';
22

3+
import 'package:native_assets_cli/native_assets_cli.dart';
34
import 'package:native_toolchain_rust/rustup.dart';
45
import 'package:native_toolchain_rust_common/native_toolchain_rust_common.dart';
56
import 'package:path/path.dart' as path;
@@ -50,6 +51,11 @@ fn main() {
5051
}
5152
''';
5253

54+
/// This class is responsible for creating and building the linker wrapper.
55+
/// This avoid using NDK wrapper scripts, which on windows cause problems when invoked
56+
/// from rustc due to wrong CMD argument escaping.
57+
///
58+
/// https://github.com/android/ndk/issues/1856
5359
class AndroidLinkerWrapper {
5460
final String tempDir;
5561
final RustupToolchain toolchain;
@@ -61,9 +67,8 @@ class AndroidLinkerWrapper {
6167

6268
Future<String> linkerWrapperPath() async {
6369
String wrapperRoot = path.join(tempDir, 'linker_wrapper_1.0');
64-
final exe = Platform.isWindows ? '.exe' : '';
65-
String executablePath =
66-
path.join(wrapperRoot, 'target', 'debug', 'linker_wrapper$exe');
70+
String executablePath = path.join(wrapperRoot, 'target', 'debug',
71+
OS.current.executableFileName('linker_wrapper'));
6772
if (!File(executablePath).existsSync()) {
6873
Directory(wrapperRoot).createSync(recursive: true);
6974
File(path.join(wrapperRoot, 'Cargo.toml')).writeAsStringSync(_cargoToml);

0 commit comments

Comments
 (0)