diff --git a/pkgs/native_toolchain_c/lib/src/cbuilder/cbuilder.dart b/pkgs/native_toolchain_c/lib/src/cbuilder/cbuilder.dart index a94846adf..95df3a57a 100644 --- a/pkgs/native_toolchain_c/lib/src/cbuilder/cbuilder.dart +++ b/pkgs/native_toolchain_c/lib/src/cbuilder/cbuilder.dart @@ -70,6 +70,20 @@ class CBuilder implements Builder { /// Used to output the [BuildOutput.dependencies]. final List includes; + /// Frameworks to link. + /// + /// Only effective if [language] is [Language.objectiveC]. + /// + /// Defaults to `['Foundation']`. + /// + /// Not used to output the [BuildOutput.dependencies], frameworks can be + /// mentioned by name if they are available on the system, so the file path + /// is not known. If you're depending on your own frameworks add them to + /// [BuildOutput.dependencies] manually. + final List frameworks; + + static const List _defaultFrameworks = ['Foundation']; + /// The dart files involved in building this artifact. /// /// Resolved against [BuildConfig.packageRoot]. @@ -162,6 +176,7 @@ class CBuilder implements Builder { required this.assetName, this.sources = const [], this.includes = const [], + this.frameworks = _defaultFrameworks, required this.dartBuildFiles, @visibleForTesting this.installName, this.flags = const [], @@ -179,6 +194,7 @@ class CBuilder implements Builder { required this.name, this.sources = const [], this.includes = const [], + this.frameworks = _defaultFrameworks, required this.dartBuildFiles, this.flags = const [], this.defines = const {}, @@ -228,6 +244,7 @@ class CBuilder implements Builder { logger: logger, sources: sources, includes: includes, + frameworks: frameworks, dynamicLibrary: _type == _CBuilderType.library && linkMode == DynamicLoadingBundled() ? libUri 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 9ce3785e2..9b8884e2c 100644 --- a/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart +++ b/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart @@ -23,6 +23,7 @@ class RunCBuilder { final Logger? logger; final List sources; final List includes; + final List frameworks; final Uri? executable; final Uri? dynamicLibrary; final Uri? staticLibrary; @@ -47,6 +48,7 @@ class RunCBuilder { this.logger, this.sources = const [], this.includes = const [], + required this.frameworks, this.executable, this.dynamicLibrary, this.staticLibrary, @@ -247,8 +249,10 @@ class RunCBuilder { for (final include in includes) '-I${include.toFilePath()}', ...sourceFiles, if (language == Language.objectiveC) ...[ - '-framework', - 'Foundation', + for (final framework in frameworks) ...[ + '-framework', + framework, + ], ], if (executable != null) ...[ '-o',