@@ -12,7 +12,6 @@ import 'package:native_toolchain_c/src/cbuilder/compiler_resolver.dart';
1212const objCFlags = ['-x' , 'objective-c' , '-fobjc-arc' ];
1313
1414String sdkPath = firstLineOfStdout ('xcrun' , ['--show-sdk-path' ]);
15- final cFlags = < String > ['-isysroot' , sdkPath];
1615
1716const assetName = 'objective_c.dylib' ;
1817
@@ -29,7 +28,8 @@ final logger = Logger('')
2928void main (List <String > args) async {
3029 await build (args, (input, output) async {
3130 const supportedOSs = {OS .iOS, OS .macOS};
32- if (! supportedOSs.contains (input.config.code.targetOS)) {
31+ final os = input.config.code.targetOS;
32+ if (! supportedOSs.contains (os)) {
3333 // Nothing to do.
3434 return ;
3535 }
@@ -42,6 +42,9 @@ void main(List<String> args) async {
4242 final assetPath = input.outputDirectory.resolve (assetName);
4343 final srcDir = Directory .fromUri (input.packageRoot.resolve ('src/' ));
4444
45+ final arch = input.config.code.targetArchitecture;
46+ final target = '${clangArchName (arch )}-apple-${os .name }' ;
47+
4548 final cFiles = < String > [];
4649 final mFiles = < String > [];
4750 final hFiles = < String > [];
@@ -56,15 +59,17 @@ void main(List<String> args) async {
5659
5760 cFiles.addAll (extraCFiles.map ((f) => input.packageRoot.resolve (f).path));
5861
62+ final cFlags = < String > ['-isysroot' , sdkPath, '-target' , target];
5963 final mFlags = [...cFlags, ...objCFlags];
64+ final linkFlags = cFlags;
6065
6166 final builder = await Builder .create (input, input.packageRoot.path);
6267
6368 final objectFiles = await Future .wait (< Future <String >> [
6469 for (final src in cFiles) builder.buildObject (src, cFlags),
6570 for (final src in mFiles) builder.buildObject (src, mFlags),
6671 ]);
67- await builder.linkLib (objectFiles, assetPath.toFilePath ());
72+ await builder.linkLib (objectFiles, assetPath.toFilePath (), linkFlags );
6873
6974 output.dependencies.addAll (cFiles.map (Uri .file));
7075 output.dependencies.addAll (mFiles.map (Uri .file));
@@ -108,11 +113,15 @@ class Builder {
108113 return output;
109114 }
110115
111- Future <void > linkLib (List <String > objects, String output) => _compile ([
116+ Future <void > linkLib (
117+ List <String > objects,
118+ String output,
119+ List <String > flags,
120+ ) => _compile ([
112121 '-shared' ,
113122 '-undefined' ,
114123 'dynamic_lookup' ,
115- ...cFlags ,
124+ ...flags ,
116125 ...objects,
117126 ], output);
118127
@@ -138,3 +147,6 @@ String firstLineOfStdout(String cmd, List<String> args) {
138147 .where ((line) => line.isNotEmpty)
139148 .first;
140149}
150+
151+ String clangArchName (Architecture arch) =>
152+ arch == Architecture .x64 ? 'x86_64' : arch.name;
0 commit comments