@@ -13,11 +13,11 @@ import 'package:change_case/change_case.dart';
1313import 'package:code_assets/code_assets.dart' ;
1414import 'package:hooks/hooks.dart' ;
1515import 'package:logging/logging.dart' ;
16- import 'package:native_toolchain_cmake/src/native_toolchain/ninja.dart' ;
1716import 'package:path/path.dart' ;
1817
1918import '../native_toolchain/android_ndk.dart' ;
2019import '../native_toolchain/cmake.dart' ;
20+ import '../native_toolchain/ninja.dart' ;
2121import '../native_toolchain/xcode.dart' ;
2222import '../tool/tool_instance.dart' ;
2323import '../utils/package_config_parser.dart' ;
@@ -26,6 +26,7 @@ import 'build_mode.dart';
2626import 'builder_args.dart' ;
2727import 'generator.dart' ;
2828import 'log_level.dart' ;
29+ import 'user_config.dart' ;
2930
3031class RunCMakeBuilder {
3132 final HookInput input;
@@ -55,6 +56,9 @@ class RunCMakeBuilder {
5556 // android ndk
5657 final AndroidBuilderArgs androidArgs;
5758
59+ // user defined configs
60+ final UserConfig userConfig;
61+
5862 /// log level of CMake
5963 final LogLevel logLevel;
6064
@@ -71,24 +75,19 @@ class RunCMakeBuilder {
7175 this .targets,
7276 this .androidArgs = const AndroidBuilderArgs (),
7377 this .appleArgs = const AppleBuilderArgs (),
78+ this .userConfig = const UserConfig (),
7479 this .logLevel = LogLevel .STATUS ,
7580 }) : outDir = outputDir ?? input.outputDirectory;
7681
7782 Future <Uri > cmakePath () async {
78- final cmakeTools = switch (codeConfig.targetOS) {
79- OS .android => await androidCmake.defaultResolver? .resolve (logger: logger),
80- _ => await cmake.defaultResolver? .resolve (logger: logger),
81- };
83+ final cmakeTools = await cmake.defaultResolver? .resolve (logger: logger, userConfig: userConfig);
8284 final path = cmakeTools? .first.uri;
8385 assert (path != null );
8486 return Future .value (path);
8587 }
8688
8789 Future <Uri > ninjaPath () async {
88- final ninjaTools = switch (codeConfig.targetOS) {
89- OS .android => await androidNinja.defaultResolver? .resolve (logger: logger),
90- _ => await ninja.defaultResolver? .resolve (logger: logger),
91- };
90+ final ninjaTools = await ninja.defaultResolver? .resolve (logger: logger, userConfig: userConfig);
9291 final path = ninjaTools? .first.uri;
9392 assert (path != null );
9493 return Future .value (path);
@@ -99,36 +98,37 @@ class RunCMakeBuilder {
9998 Future <Uri > iosToolchainCmake () async => (await currentPackageRoot ()).resolve ('cmake/ios.toolchain.cmake' );
10099
101100 Future <Uri > androidToolchainCmake () async {
102- final tool = await androidNdk.defaultResolver? .resolve (logger: logger);
101+ final tool = await androidNdk.defaultResolver? .resolve (logger: logger, userConfig : userConfig );
103102 final toolUri = tool? .first.uri.resolve ('build/cmake/android.toolchain.cmake' );
104103 assert (toolUri != null );
105104 return Future .value (toolUri);
106105 }
107106
108107 Future <Uri > linuxToolchainCmake () async => switch (codeConfig.targetArchitecture) {
109- Architecture .x64 => (await currentPackageRoot ()).resolve ('cmake/x86_64-linux-gnu.toolchain.cmake' ),
110- Architecture .arm64 => (await currentPackageRoot ()).resolve ('cmake/aarch64-linux-gnu.toolchain.cmake' ),
111- Architecture .riscv64 =>
112- (await currentPackageRoot ()).resolve ('cmake/riscv64-linux-gnu.toolchain.cmake' ),
113- _ => throw UnimplementedError ('Unsupported architecture: ${codeConfig .targetArchitecture } for Linux' ),
114- };
108+ Architecture .x64 => (await currentPackageRoot ()).resolve ('cmake/x86_64-linux-gnu.toolchain.cmake' ),
109+ Architecture .arm64 => (await currentPackageRoot ()).resolve ('cmake/aarch64-linux-gnu.toolchain.cmake' ),
110+ Architecture .riscv64 => (await currentPackageRoot ()).resolve ('cmake/riscv64-linux-gnu.toolchain.cmake' ),
111+ _ => throw UnimplementedError ('Unsupported architecture: ${codeConfig .targetArchitecture } for Linux' ),
112+ };
115113
116114 Future <Uri > iosSdk (IOSSdk iosSdk, {required Logger ? logger}) async {
117115 if (iosSdk == IOSSdk .iPhoneOS) {
118- return (await iPhoneOSSdk.defaultResolver! .resolve (logger : logger))
119- . where ((i) => i.tool == iPhoneOSSdk)
120- .first
121- .uri;
116+ return (await iPhoneOSSdk.defaultResolver! .resolve (
117+ logger : logger,
118+ userConfig : userConfig,
119+ )). where ((i) => i.tool == iPhoneOSSdk).first .uri;
122120 }
123121 assert (iosSdk == IOSSdk .iPhoneSimulator);
124- return (await iPhoneSimulatorSdk.defaultResolver! .resolve (logger : logger))
125- . where ((i) => i.tool == iPhoneSimulatorSdk)
126- .first
127- .uri;
122+ return (await iPhoneSimulatorSdk.defaultResolver! .resolve (
123+ logger : logger,
124+ userConfig : userConfig,
125+ )). where ((i) => i.tool == iPhoneSimulatorSdk).first .uri;
128126 }
129127
130- Future <Uri > macosSdk ({required Logger ? logger}) async =>
131- (await macosxSdk.defaultResolver! .resolve (logger: logger)).where ((i) => i.tool == macosxSdk).first.uri;
128+ Future <Uri > macosSdk ({required Logger ? logger}) async => (await macosxSdk.defaultResolver! .resolve (
129+ logger: logger,
130+ userConfig: userConfig,
131+ )).where ((i) => i.tool == macosxSdk).first.uri;
132132
133133 Uri androidSysroot (ToolInstance compiler) => compiler.uri.resolve ('../sysroot/' );
134134
@@ -312,18 +312,10 @@ class RunCMakeBuilder {
312312 Architecture .x64: 'x86_64' ,
313313 };
314314
315- static const macosPlatforms = {
316- Architecture .arm64: 'MAC_ARM64' ,
317- Architecture .x64: 'MAC' ,
318- };
315+ static const macosPlatforms = {Architecture .arm64: 'MAC_ARM64' , Architecture .x64: 'MAC' };
319316
320317 static const iosPlatforms = {
321- Architecture .arm64: {
322- IOSSdk .iPhoneOS: 'OS64' ,
323- IOSSdk .iPhoneSimulator: 'SIMULATORARM64' ,
324- },
325- Architecture .x64: {
326- IOSSdk .iPhoneSimulator: 'SIMULATOR64' ,
327- },
318+ Architecture .arm64: {IOSSdk .iPhoneOS: 'OS64' , IOSSdk .iPhoneSimulator: 'SIMULATORARM64' },
319+ Architecture .x64: {IOSSdk .iPhoneSimulator: 'SIMULATOR64' },
328320 };
329321}
0 commit comments