diff --git a/flutter/cpp/flutter/dart_backend_match.cc b/flutter/cpp/flutter/dart_backend_match.cc index 01427c803..e66308fcd 100644 --- a/flutter/cpp/flutter/dart_backend_match.cc +++ b/flutter/cpp/flutter/dart_backend_match.cc @@ -65,7 +65,7 @@ extern "C" struct dart_ffi_backend_match_result *dart_ffi_backend_match( result->pbdata = new char[result->pbdata_size]; memcpy(result->pbdata, res.data(), result->pbdata_size); - LOG(INFO) << "backend matches"; + LOG(INFO) << "backend matches '" << lib_path << "'"; return result; } diff --git a/flutter/lib/backend/list.dart b/flutter/lib/backend/list.dart index 42d98d3a5..d08ffbfe3 100644 --- a/flutter/lib/backend/list.dart +++ b/flutter/lib/backend/list.dart @@ -9,13 +9,33 @@ part 'list.gen.dart'; class BackendInfoHelper { BackendInfo findMatching() { + const fallbackBackend = 'libtflitebackend'; + final matches = []; + // Try to match all backends except the fallback for (var name in getBackendsList()) { + if (name == fallbackBackend) continue; + print('Checking $name'); final backendSettings = match(name); if (backendSettings != null) { - return BackendInfo._(backendSettings, name); + matches.add(BackendInfo._(backendSettings, name)); } } - throw 'no matching backend found'; + + if (matches.isEmpty) { + // No specific backend matched, use fallback + print('Checking $fallbackBackend'); + final backendSettings = match(fallbackBackend); + if (backendSettings != null) { + return BackendInfo._(backendSettings, fallbackBackend); + } + throw 'no matching backend found'; + } + if (matches.length > 1) { + final names = matches.map((m) => m.libName).join(', '); + throw 'multiple matching backends found: $names'; + } + print('Using backend: ${matches.single.libName}'); + return matches.single; } pb.BackendSetting? match(String libName) {