Skip to content

Commit

Permalink
fix: properly install targets per toolchain
Browse files Browse the repository at this point in the history
  • Loading branch information
knopp committed Sep 15, 2023
1 parent 62bb5c9 commit c4563b4
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 18 deletions.
4 changes: 2 additions & 2 deletions build_tool/lib/src/builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,8 @@ class RustBuilder {
if (toolchain == 'nightly') {
rustup.installRustSrcForNightly();
}
if (!rustup.installedTargets.contains(target.rust)) {
rustup.installTarget(target.rust);
if (!rustup.installedTargets(toolchain).contains(target.rust)) {
rustup.installTarget(target.rust, toolchain: toolchain);
}
}

Expand Down
71 changes: 55 additions & 16 deletions build_tool/lib/src/rustup.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,77 @@ import 'package:path/path.dart' as path;

import 'util.dart';

class Rustup {
final List<String> installedTargets;
final List<String> installedToolchains;
class _Toolchain {
_Toolchain(
this.name,
this.targets,
);

Rustup()
: installedTargets = _getInstalledTargets(),
installedToolchains = _getInstalledToolchains();
final String name;
final List<String> targets;
}

void installTarget(String target) {
log.info("Installing Rust target: $target");
runCommand("rustup", ['target', 'add', target]);
installedTargets.add(target);
}
class Rustup {
List<String> get installedToolchains =>
_installedToolchains.map((e) => e.name).toList(growable: false);

List<String> installedTargets(String toolchain) =>
List.unmodifiable(_installedTargets(toolchain));

void installToolchain(String toolchain) {
log.info("Installing Rust toolchain: $toolchain");
runCommand("rustup", ['toolchain', 'install', toolchain]);
installedToolchains.add(toolchain);
_installedToolchains
.add(_Toolchain(toolchain, _getInstalledTargets(toolchain)));
}

void installTarget(
String target, {
required String toolchain,
}) {
log.info("Installing Rust target: $target");
runCommand("rustup", [
'target',
'add',
'--toolchain',
toolchain,
target,
]);
_installedTargets(toolchain).add(target);
}

static List<String> _getInstalledToolchains() {
final List<_Toolchain> _installedToolchains;

Rustup() : _installedToolchains = _getInstalledToolchains();

List<String> _installedTargets(String toolchain) =>
_installedToolchains.firstWhere((e) => e.name == toolchain).targets;

static List<_Toolchain> _getInstalledToolchains() {
final res = runCommand("rustup", ['toolchain', 'list']);
final lines = res.stdout
.toString()
.split('\n')
.where((e) => e.isNotEmpty)
.toList(growable: true);
return lines;
return lines
.map(
(toolchain) => _Toolchain(
toolchain,
_getInstalledTargets(toolchain),
),
)
.toList(growable: true);
}

static List<String> _getInstalledTargets() {
final res = runCommand("rustup", ['target', 'list', '--installed']);
static List<String> _getInstalledTargets(String toolchain) {
final res = runCommand("rustup", [
'target',
'list',
'--toolchain',
toolchain,
'--installed',
]);
final lines = res.stdout
.toString()
.split('\n')
Expand Down

0 comments on commit c4563b4

Please sign in to comment.