diff --git a/pkgs/native_toolchain_c/lib/src/cbuilder/compiler_resolver.dart b/pkgs/native_toolchain_c/lib/src/cbuilder/compiler_resolver.dart index 3b2d1433b..d5ac54bca 100644 --- a/pkgs/native_toolchain_c/lib/src/cbuilder/compiler_resolver.dart +++ b/pkgs/native_toolchain_c/lib/src/cbuilder/compiler_resolver.dart @@ -218,7 +218,11 @@ class CompilerResolver { } final compilerTool = compiler.tool; - assert(compilerTool == cl); + if (compilerTool != cl) { + // If Clang is used on Windows, and we could discover the MSVC + // installation, then Clang should be able to discover it as well. + return {}; + } final vcvarsScript = (await vcvars(compiler).defaultResolver!.resolve(logger: logger)).first; return await environmentFromBatchFile( diff --git a/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart b/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart index 246d7c95d..c244775bf 100644 --- a/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart +++ b/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart @@ -131,6 +131,9 @@ class RunCBuilder { } Future runClangLike({required ToolInstance tool}) async { + // Clang for Windows requires the MSVC Developer Environment. + final environment = await _resolver.resolveEnvironment(tool); + final isStaticLib = staticLibrary != null; Uri? archiver_; if (isStaticLib) { @@ -176,6 +179,7 @@ class RunCBuilder { targetMacOSVersion, [sourceFiles[i]], objectFile, + environment, ); objectFiles.add(objectFile); } @@ -189,6 +193,7 @@ class RunCBuilder { logger: logger, captureOutput: false, throwOnUnexpectedExitCode: true, + environment: environment, ); } else { await _compile( @@ -200,6 +205,7 @@ class RunCBuilder { targetMacOSVersion, sourceFiles, dynamicLibrary != null ? outDir.resolveUri(dynamicLibrary!) : null, + environment, ); } } @@ -214,9 +220,11 @@ class RunCBuilder { int? targetMacOSVersion, Iterable sourceFiles, Uri? outFile, + Map environment, ) async { await runProcess( executable: toolInstance.uri, + environment: environment, arguments: [ if (codeConfig.targetOS == OS.android) ...[ '--target='