From ed16e0bd77e9fcc7be1762171bab2efc3dd3d702 Mon Sep 17 00:00:00 2001 From: Hidenori Matsubayashi Date: Fri, 12 Aug 2022 09:25:22 +0900 Subject: [PATCH] Add custom toolchain option (#110) Fixed #48 Signed-off-by: Hidenori Matsubayashi --- lib/commands/build.dart | 8 +++++++- lib/elinux_build_target.dart | 8 +++++++- lib/elinux_builder.dart | 6 ++++-- lib/elinux_device.dart | 3 ++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/commands/build.dart b/lib/commands/build.dart index 74cd61e..caba7dd 100644 --- a/lib/commands/build.dart +++ b/lib/commands/build.dart @@ -60,6 +60,11 @@ class BuildPackageCommand extends BuildSubCommand 'the app is compiled. This option is valid only ' 'if the current host and target architectures are different.', ); + argParser.addOption( + 'target-toolchain', + defaultsTo: '/', + help: 'The toolchain path for Clang.', + ); argParser.addOption( 'system-include-directories', defaultsTo: null, @@ -120,8 +125,9 @@ class BuildPackageCommand extends BuildSubCommand targetBackendType: stringArg('target-backend-type'), targetCompilerTriple: stringArg('target-compiler-triple'), targetSysroot: stringArg('target-sysroot'), - systemIncludeDirectories: stringArg('system-include-directories'), targetCompilerFlags: stringArg('target-compiler-flags'), + targetToolchain: stringArg('target-toolchain'), + systemIncludeDirectories: stringArg('system-include-directories'), ); validateBuild(eLinuxBuildInfo); displayNullSafetyMode(buildInfo); diff --git a/lib/elinux_build_target.dart b/lib/elinux_build_target.dart index bde35b2..90ae3a2 100644 --- a/lib/elinux_build_target.dart +++ b/lib/elinux_build_target.dart @@ -357,6 +357,7 @@ class NativeBundle { final String targetCompilerTriple = buildInfo.targetCompilerTriple; final String targetSysroot = buildInfo.targetSysroot; final String targetCompilerFlags = buildInfo.targetCompilerFlags; + final String targetToolchain = buildInfo.targetToolchain; final String systemIncludeDirectories = buildInfo.systemIncludeDirectories; RunResult result = await _processUtils.run( [ @@ -378,7 +379,12 @@ class NativeBundle { eLinuxDir.path, ], workingDirectory: outputDir.path, - environment: {'CC': 'clang', 'CXX': 'clang++'}, + environment: (targetToolchain == null) + ? {'CC': 'clang', 'CXX': 'clang++'} + : { + 'CC': '$targetToolchain/bin/clang', + 'CXX': '$targetToolchain/bin/clang++' + }, ); if (result.exitCode != 0) { throwToolExit('Failed to cmake:\n$result'); diff --git a/lib/elinux_builder.dart b/lib/elinux_builder.dart index bdd18d8..a2ea034 100644 --- a/lib/elinux_builder.dart +++ b/lib/elinux_builder.dart @@ -37,8 +37,9 @@ class ELinuxBuildInfo { @required this.targetBackendType, @required this.targetCompilerTriple, @required this.targetSysroot, - @required this.systemIncludeDirectories, @required this.targetCompilerFlags, + @required this.targetToolchain, + @required this.systemIncludeDirectories, }) : assert(targetArch != null), assert(targetBackendType != null); @@ -47,8 +48,9 @@ class ELinuxBuildInfo { final String targetBackendType; final String targetCompilerTriple; final String targetSysroot; - final String systemIncludeDirectories; final String targetCompilerFlags; + final String targetToolchain; + final String systemIncludeDirectories; } /// See: diff --git a/lib/elinux_device.dart b/lib/elinux_device.dart index 2febb85..9d584ff 100644 --- a/lib/elinux_device.dart +++ b/lib/elinux_device.dart @@ -299,8 +299,9 @@ class ELinuxDevice extends Device { targetBackendType: _backendType, targetCompilerTriple: null, targetSysroot: '/', - systemIncludeDirectories: null, targetCompilerFlags: null, + targetToolchain: null, + systemIncludeDirectories: null, ); await ELinuxBuilder.buildBundle( project: project,