Skip to content

Commit 77c988a

Browse files
authored
[native_assets_cli] Nest c_compiler config (#30)
1 parent beadbf7 commit 77c988a

File tree

9 files changed

+243
-147
lines changed

9 files changed

+243
-147
lines changed

pkgs/c_compiler/lib/src/cbuilder/compiler_resolver.dart

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ class CompilerResolver {
3333
Future<ToolInstance> resolveCompiler() async {
3434
// First, check if the launcher provided a direct path to the compiler.
3535
var result = await _tryLoadCompilerFromConfig(
36-
BuildConfig.ccConfigKey,
37-
(buildConfig) => buildConfig.cc,
36+
CCompilerConfig.ccConfigKeyFull,
37+
(buildConfig) => buildConfig.cCompiler.cc,
3838
);
3939

4040
// Then, try to detect on the host machine.
@@ -91,11 +91,12 @@ class CompilerResolver {
9191
if (configCcUri != null) {
9292
assert(await File.fromUri(configCcUri).exists());
9393
logger?.finer('Using compiler ${configCcUri.toFilePath()} '
94-
'from config[${BuildConfig.ccConfigKey}].');
94+
'from config[${CCompilerConfig.ccConfigKeyFull}].');
9595
return (await CompilerRecognizer(configCcUri).resolve(logger: logger))
9696
.first;
9797
}
98-
logger?.finer('No compiler set in config[${BuildConfig.ccConfigKey}].');
98+
logger?.finer(
99+
'No compiler set in config[${CCompilerConfig.ccConfigKeyFull}].');
99100
return null;
100101
}
101102

@@ -110,8 +111,8 @@ class CompilerResolver {
110111
Future<ToolInstance> resolveArchiver() async {
111112
// First, check if the launcher provided a direct path to the compiler.
112113
var result = await _tryLoadArchiverFromConfig(
113-
BuildConfig.arConfigKey,
114-
(buildConfig) => buildConfig.ar,
114+
CCompilerConfig.arConfigKeyFull,
115+
(buildConfig) => buildConfig.cCompiler.ar,
115116
);
116117

117118
// Then, try to detect on the host machine.
@@ -167,18 +168,19 @@ class CompilerResolver {
167168
if (configArUri != null) {
168169
assert(await File.fromUri(configArUri).exists());
169170
logger?.finer('Using archiver ${configArUri.toFilePath()} '
170-
'from config[${BuildConfig.arConfigKey}].');
171+
'from config[${CCompilerConfig.arConfigKeyFull}].');
171172
return (await ArchiverRecognizer(configArUri).resolve(logger: logger))
172173
.first;
173174
}
174-
logger?.finer('No archiver set in config[${BuildConfig.arConfigKey}].');
175+
logger?.finer(
176+
'No archiver set in config[${CCompilerConfig.arConfigKeyFull}].');
175177
return null;
176178
}
177179

178180
Future<Uri?> toolchainEnvironmentScript(ToolInstance compiler) async {
179-
final fromConfig = buildConfig.toolchainEnvScript;
181+
final fromConfig = buildConfig.cCompiler.envScript;
180182
if (fromConfig != null) {
181-
logger?.fine('Using toolchainEnvScript from config: $fromConfig');
183+
logger?.fine('Using envScript from config: $fromConfig');
182184
return fromConfig;
183185
}
184186

@@ -190,9 +192,9 @@ class CompilerResolver {
190192
}
191193

192194
List<String>? toolchainEnvironmentScriptArguments() {
193-
final fromConfig = buildConfig.toolchainEnvScriptArgs;
195+
final fromConfig = buildConfig.cCompiler.envScriptArgs;
194196
if (fromConfig != null) {
195-
logger?.fine('Using toolchainEnvScriptArgs from config: $fromConfig');
197+
logger?.fine('Using envScriptArgs from config: $fromConfig');
196198
return fromConfig;
197199
}
198200

pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ void main() {
4646

4747
for (final linkMode in LinkMode.values) {
4848
for (final target in targets) {
49-
test('Cbuilder $linkMode library $target', timeout: Timeout.factor(2),
50-
() async {
49+
test('Cbuilder $linkMode library $target', () async {
5150
await inTempDir((tempUri) async {
5251
final addCUri =
5352
packageUri.resolve('test/cbuilder/testfiles/add/src/add.c');

pkgs/c_compiler/test/cbuilder/cbuilder_test.dart

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ void main() {
2929
outDir: tempUri,
3030
packageRoot: tempUri,
3131
target: Target.current,
32-
linkModePreference:
33-
LinkModePreference.dynamic, // Ignored by executables.
34-
cc: cc,
35-
toolchainEnvScript: toolchainEnvScript,
36-
toolchainEnvScriptArgs: toolchainEnvScriptArgs,
32+
// Ignored by executables.
33+
linkModePreference: LinkModePreference.dynamic,
34+
cCompiler: CCompilerConfig(
35+
cc: cc,
36+
envScript: envScript,
37+
envScriptArgs: envScriptArgs,
38+
),
3739
);
3840
final buildOutput = BuildOutput();
3941
final cbuilder = CBuilder.executable(
@@ -72,9 +74,11 @@ void main() {
7274
packageRoot: tempUri,
7375
target: Target.current,
7476
linkModePreference: LinkModePreference.dynamic,
75-
cc: cc,
76-
toolchainEnvScript: toolchainEnvScript,
77-
toolchainEnvScriptArgs: toolchainEnvScriptArgs,
77+
cCompiler: CCompilerConfig(
78+
cc: cc,
79+
envScript: envScript,
80+
envScriptArgs: envScriptArgs,
81+
),
7882
);
7983
final buildOutput = BuildOutput();
8084

pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,27 @@ void main() {
3434
...await lib.defaultResolver!.resolve(logger: logger),
3535
...await lld.defaultResolver!.resolve(logger: logger),
3636
].first.uri;
37-
final toolchainEnvScript = [
37+
final envScript = [
3838
...await vcvars64.defaultResolver!.resolve(logger: logger)
3939
].firstOrNull?.uri;
4040
final buildConfig = BuildConfig(
4141
outDir: tempUri,
4242
packageRoot: tempUri,
4343
target: Target.current,
4444
linkModePreference: LinkModePreference.dynamic,
45-
ar: ar,
46-
cc: cc,
47-
ld: ld,
48-
toolchainEnvScript: toolchainEnvScript,
45+
cCompiler: CCompilerConfig(
46+
ar: ar,
47+
cc: cc,
48+
ld: ld,
49+
envScript: envScript,
50+
),
4951
);
5052
final resolver =
5153
CompilerResolver(buildConfig: buildConfig, logger: logger);
5254
final compiler = await resolver.resolveCompiler();
5355
final archiver = await resolver.resolveArchiver();
54-
expect(compiler.uri, buildConfig.cc);
55-
expect(archiver.uri, buildConfig.ar);
56+
expect(compiler.uri, buildConfig.cCompiler.cc);
57+
expect(archiver.uri, buildConfig.cCompiler.ar);
5658
});
5759
});
5860

pkgs/c_compiler/test/helpers.dart

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:async';
66
import 'dart:io';
77

88
import 'package:logging/logging.dart';
9+
import 'package:native_assets_cli/native_assets_cli.dart';
910
import 'package:test/test.dart';
1011

1112
const keepTempKey = 'KEEP_TEMPORARY_DIRECTORIES';
@@ -87,24 +88,34 @@ extension on Uri {
8788
String get name => pathSegments.where((e) => e != '').last;
8889
}
8990

91+
String unparseKey(String key) => key.replaceAll('.', '__').toUpperCase();
92+
9093
/// Archiver provided by the environment.
91-
final Uri? ar = Platform.environment['AR']?.asFileUri();
94+
final Uri? ar = Platform
95+
.environment[unparseKey(CCompilerConfig.arConfigKeyFull)]
96+
?.asFileUri();
9297

9398
/// Compiler provided by the environment.
94-
final Uri? cc = Platform.environment['CC']?.asFileUri();
99+
final Uri? cc = Platform
100+
.environment[unparseKey(CCompilerConfig.ccConfigKeyFull)]
101+
?.asFileUri();
95102

96103
/// Linker provided by the environment.
97-
final Uri? ld = Platform.environment['LD']?.asFileUri();
104+
final Uri? ld = Platform
105+
.environment[unparseKey(CCompilerConfig.ldConfigKeyFull)]
106+
?.asFileUri();
98107

99108
/// Path to script that sets environment variables for [cc], [ld], and [ar].
100109
///
101110
/// Provided by environment.
102-
final Uri? toolchainEnvScript =
103-
Platform.environment['ToolchainEnvScript']?.asFileUri();
111+
final Uri? envScript = Platform
112+
.environment[unparseKey(CCompilerConfig.envScriptConfigKeyFull)]
113+
?.asFileUri();
104114

105-
/// Arguments for [toolchainEnvScript] provided by environment.
106-
final List<String>? toolchainEnvScriptArgs =
107-
Platform.environment['ToolchainEnvScriptArguments']?.split(' ');
115+
/// Arguments for [envScript] provided by environment.
116+
final List<String>? envScriptArgs = Platform
117+
.environment[unparseKey(CCompilerConfig.envScriptArgsConfigKeyFull)]
118+
?.split(' ');
108119

109120
extension on String {
110121
Uri asFileUri() => Uri.file(this);

0 commit comments

Comments
 (0)