Flutter Windows Embedder
flutter_project_bundle.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
6 
7 #include <filesystem>
8 
9 #include "flutter/fml/logging.h"
12 
13 namespace flutter {
14 
16  const FlutterDesktopEngineProperties& properties)
17  : assets_path_(properties.assets_path),
18  icu_path_(properties.icu_data_path) {
19  if (properties.aot_library_path != nullptr) {
20  aot_library_path_ = std::filesystem::path(properties.aot_library_path);
21  }
22 
23  if (properties.dart_entrypoint && properties.dart_entrypoint[0] != '\0') {
24  dart_entrypoint_ = properties.dart_entrypoint;
25  }
26 
27  for (int i = 0; i < properties.dart_entrypoint_argc; i++) {
28  dart_entrypoint_arguments_.push_back(
29  std::string(properties.dart_entrypoint_argv[i]));
30  }
31 
32  // Resolve any relative paths.
33  if (assets_path_.is_relative() || icu_path_.is_relative() ||
34  (!aot_library_path_.empty() && aot_library_path_.is_relative())) {
35  std::filesystem::path executable_location = GetExecutableDirectory();
36  if (executable_location.empty()) {
37  FML_LOG(ERROR)
38  << "Unable to find executable location to resolve resource paths.";
39  assets_path_ = std::filesystem::path();
40  icu_path_ = std::filesystem::path();
41  } else {
42  assets_path_ = std::filesystem::path(executable_location) / assets_path_;
43  icu_path_ = std::filesystem::path(executable_location) / icu_path_;
44  if (!aot_library_path_.empty()) {
45  aot_library_path_ =
46  std::filesystem::path(executable_location) / aot_library_path_;
47  }
48  }
49  }
50 }
51 
53  return !assets_path_.empty() && !icu_path_.empty();
54 }
55 
56 // Attempts to load AOT data from the given path, which must be absolute and
57 // non-empty. Logs and returns nullptr on failure.
59  const FlutterEngineProcTable& engine_procs) {
60  if (aot_library_path_.empty()) {
61  FML_LOG(ERROR)
62  << "Attempted to load AOT data, but no aot_library_path was provided.";
63  return UniqueAotDataPtr(nullptr, nullptr);
64  }
65  if (!std::filesystem::exists(aot_library_path_)) {
66  FML_LOG(ERROR) << "Can't load AOT data from "
67  << aot_library_path_.u8string() << "; no such file.";
68  return UniqueAotDataPtr(nullptr, nullptr);
69  }
70  std::string path_string = aot_library_path_.u8string();
71  FlutterEngineAOTDataSource source = {};
72  source.type = kFlutterEngineAOTDataSourceTypeElfPath;
73  source.elf_path = path_string.c_str();
74  FlutterEngineAOTData data = nullptr;
75  auto result = engine_procs.CreateAOTData(&source, &data);
76  if (result != kSuccess) {
77  FML_LOG(ERROR) << "Failed to load AOT data from: " << path_string;
78  return UniqueAotDataPtr(nullptr, nullptr);
79  }
80  return UniqueAotDataPtr(data, engine_procs.CollectAOTData);
81 }
82 
84 
86  const std::vector<std::string>& switches) {
87  engine_switches_ = switches;
88 }
89 
90 const std::vector<std::string> FlutterProjectBundle::GetSwitches() {
91  if (engine_switches_.size() == 0) {
93  }
94  std::vector<std::string> switches;
95  switches.insert(switches.end(), engine_switches_.begin(),
96  engine_switches_.end());
97 
98  auto env_switches = GetSwitchesFromEnvironment();
99  switches.insert(switches.end(), env_switches.begin(), env_switches.end());
100 
101  return switches;
102 }
103 
104 } // namespace flutter
FlutterDesktopEngineProperties::aot_library_path
const wchar_t * aot_library_path
Definition: flutter_windows.h:54
flutter::UniqueAotDataPtr
std::unique_ptr< _FlutterEngineAOTData, FlutterEngineCollectAOTDataFnPtr > UniqueAotDataPtr
Definition: flutter_project_bundle.h:18
FlutterDesktopEngineProperties
Definition: flutter_windows.h:39
flutter::FlutterProjectBundle::GetSwitches
const std::vector< std::string > GetSwitches()
Definition: flutter_project_bundle.cc:90
FlutterDesktopEngineProperties::dart_entrypoint_argv
const char ** dart_entrypoint_argv
Definition: flutter_windows.h:69
flutter::GetExecutableDirectory
std::filesystem::path GetExecutableDirectory()
Definition: path_utils.cc:16
FlutterDesktopEngineProperties::dart_entrypoint
const char * dart_entrypoint
Definition: flutter_windows.h:62
path_utils.h
flutter_project_bundle.h
flutter
Definition: accessibility_bridge_windows.cc:11
flutter::GetSwitchesFromEnvironment
std::vector< std::string > GetSwitchesFromEnvironment()
Definition: engine_switches.cc:14
engine_switches.h
flutter::FlutterProjectBundle::~FlutterProjectBundle
~FlutterProjectBundle()
Definition: flutter_project_bundle.cc:83
flutter::FlutterProjectBundle::FlutterProjectBundle
FlutterProjectBundle(const FlutterDesktopEngineProperties &properties)
Definition: flutter_project_bundle.cc:15
FlutterDesktopEngineProperties::dart_entrypoint_argc
int dart_entrypoint_argc
Definition: flutter_windows.h:65
flutter::FlutterProjectBundle::LoadAotData
UniqueAotDataPtr LoadAotData(const FlutterEngineProcTable &engine_procs)
Definition: flutter_project_bundle.cc:58
flutter::FlutterProjectBundle::HasValidPaths
bool HasValidPaths()
Definition: flutter_project_bundle.cc:52
flutter::FlutterProjectBundle::SetSwitches
void SetSwitches(const std::vector< std::string > &switches)
Definition: flutter_project_bundle.cc:85