blob: c3ea2942fb9d6dc6aaf483529f1d45646ca40282 [file] [log] [blame]
// Copyright (c) 2023, 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.
import 'package:native_assets_cli/native_assets_cli.dart';
import '../tool/tool.dart';
import '../tool/tool_resolver.dart';
/// The GNU Compiler Collection for [Architecture.current].
///
/// https://gcc.gnu.org/
final gcc = Tool(name: 'GCC');
/// The GNU GCC archiver for [Architecture.current].
final gnuArchiver = Tool(name: 'GNU archiver');
/// The GNU linker for [Architecture.current].
///
/// https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/ld.html
final gnuLinker = Tool(name: 'GNU linker');
/// [gcc] with [Tool.defaultResolver] for [Architecture.ia32].
final i686LinuxGnuGcc = _gcc('i686-linux-gnu');
/// [gnuArchiver] with [Tool.defaultResolver] for [Architecture.ia32].
final i686LinuxGnuGccAr = _gnuArchiver('i686-linux-gnu');
/// [gnuLinker] with [Tool.defaultResolver] for [Architecture.ia32].
final i686LinuxGnuLd = _gnuLinker('i686-linux-gnu');
/// [gcc] with [Tool.defaultResolver] for [Architecture.x64].
final x86_64LinuxGnuGcc = _gcc('x86_64-linux-gnu');
/// [gnuArchiver] with [Tool.defaultResolver] for [Architecture.x64].
final x86_64LinuxGnuGccAr = _gnuArchiver('x86_64-linux-gnu');
/// [gnuLinker] with [Tool.defaultResolver] for [Architecture.x64].
final x86_64LinuxGnuLd = _gnuLinker('x86_64-linux-gnu');
/// [gcc] with [Tool.defaultResolver] for [Architecture.arm].
final armLinuxGnueabihfGcc = _gcc('arm-linux-gnueabihf');
/// [gnuArchiver] with [Tool.defaultResolver] for [Architecture.arm].
final armLinuxGnueabihfGccAr = _gnuArchiver('arm-linux-gnueabihf');
/// [gnuLinker] with [Tool.defaultResolver] for [Architecture.arm].
final armLinuxGnueabihfLd = _gnuLinker('arm-linux-gnueabihf');
/// [gcc] with [Tool.defaultResolver] for [Architecture.arm64].
final aarch64LinuxGnuGcc = _gcc('aarch64-linux-gnu');
/// [gnuArchiver] with [Tool.defaultResolver] for [Architecture.arm64].
final aarch64LinuxGnuGccAr = _gnuArchiver('aarch64-linux-gnu');
/// [gnuLinker] with [Tool.defaultResolver] for [Architecture.arm64].
final aarch64LinuxGnuLd = _gnuLinker('aarch64-linux-gnu');
/// [gcc] with [Tool.defaultResolver] for [Architecture.riscv64].
final riscv64LinuxGnuGcc = _gcc('riscv64-linux-gnu');
/// [gnuArchiver] with [Tool.defaultResolver] for [Architecture.riscv64].
final riscv64LinuxGnuGccAr = _gnuArchiver('riscv64-linux-gnu');
/// [gnuLinker] with [Tool.defaultResolver] for [Architecture.riscv64].
final riscv64LinuxGnuLd = _gnuLinker('riscv64-linux-gnu');
Tool _gcc(String prefix) => Tool(
name: gcc.name,
defaultResolver: CliVersionResolver(
wrappedResolver: PathToolResolver(
toolName: gcc.name,
executableName: '$prefix-gcc',
),
),
);
Tool _gnuArchiver(String prefix) {
final gcc = _gcc(prefix);
return Tool(
name: gnuArchiver.name,
defaultResolver: RelativeToolResolver(
toolName: gnuArchiver.name,
wrappedResolver: gcc.defaultResolver!,
relativePath: Uri.file('$prefix-gcc-ar'),
),
);
}
Tool _gnuLinker(String prefix) {
final gcc = _gcc(prefix);
return Tool(
name: gnuLinker.name,
defaultResolver: RelativeToolResolver(
toolName: gnuLinker.name,
wrappedResolver: gcc.defaultResolver!,
relativePath: Uri.file('$prefix-ld'),
),
);
}