Merge pull request from naithar/feature/extend-plugin-params-4.0

[4.0] [iOS] Additional 'linker_flags' plugin parameter
This commit is contained in:
Rémi Verschelde 2021-02-03 18:37:42 +01:00 committed by GitHub
commit 43ab0edbd2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 0 deletions
platform/iphone

View file

@ -1351,6 +1351,8 @@ Error EditorExportPlatformIOS::_export_ios_plugins(const Ref<EditorExportPreset>
Vector<String> added_embedded_dependenciy_names; Vector<String> added_embedded_dependenciy_names;
HashMap<String, String> plist_values; HashMap<String, String> plist_values;
Set<String> plugin_linker_flags;
Error err; Error err;
for (int i = 0; i < enabled_plugins.size(); i++) { for (int i = 0; i < enabled_plugins.size(); i++) {
@ -1417,6 +1419,13 @@ Error EditorExportPlatformIOS::_export_ios_plugins(const Ref<EditorExportPreset>
p_config_data.capabilities.push_back(capability); p_config_data.capabilities.push_back(capability);
} }
// Linker flags
// Checking duplicates
for (int j = 0; j < plugin.linker_flags.size(); j++) {
String linker_flag = plugin.linker_flags[j];
plugin_linker_flags.insert(linker_flag);
}
// Plist // Plist
// Using hash map container to remove duplicates // Using hash map container to remove duplicates
const String *K = nullptr; const String *K = nullptr;
@ -1497,6 +1506,27 @@ Error EditorExportPlatformIOS::_export_ios_plugins(const Ref<EditorExportPreset>
p_config_data.cpp_code += plugin_cpp_code.format(plugin_format, "$_"); p_config_data.cpp_code += plugin_cpp_code.format(plugin_format, "$_");
} }
// Update Linker Flag Values
{
String result_linker_flags = " ";
for (Set<String>::Element *E = plugin_linker_flags.front(); E; E = E->next()) {
const String &flag = E->get();
if (flag.length() == 0) {
continue;
}
if (result_linker_flags.length() > 0) {
result_linker_flags += ' ';
}
result_linker_flags += flag;
}
result_linker_flags = result_linker_flags.replace("\"", "\\\"");
p_config_data.linker_flags += result_linker_flags;
}
return OK; return OK;
} }

View file

@ -66,6 +66,7 @@ struct PluginConfigIOS {
inline static const char *DEPENDENCIES_SYSTEM_KEY = "system"; inline static const char *DEPENDENCIES_SYSTEM_KEY = "system";
inline static const char *DEPENDENCIES_CAPABILITIES_KEY = "capabilities"; inline static const char *DEPENDENCIES_CAPABILITIES_KEY = "capabilities";
inline static const char *DEPENDENCIES_FILES_KEY = "files"; inline static const char *DEPENDENCIES_FILES_KEY = "files";
inline static const char *DEPENDENCIES_LINKER_FLAGS = "linker_flags";
inline static const char *PLIST_SECTION = "plist"; inline static const char *PLIST_SECTION = "plist";
@ -89,6 +90,8 @@ struct PluginConfigIOS {
Vector<String> files_to_copy; Vector<String> files_to_copy;
Vector<String> capabilities; Vector<String> capabilities;
Vector<String> linker_flags;
// Optional plist section // Optional plist section
// Supports only string types for now // Supports only string types for now
HashMap<String, String> plist; HashMap<String, String> plist;
@ -260,6 +263,8 @@ static inline PluginConfigIOS load_plugin_config(Ref<ConfigFile> config_file, co
plugin_config.files_to_copy = resolve_local_dependencies(config_base_dir, files); plugin_config.files_to_copy = resolve_local_dependencies(config_base_dir, files);
plugin_config.capabilities = config_file->get_value(PluginConfigIOS::DEPENDENCIES_SECTION, PluginConfigIOS::DEPENDENCIES_CAPABILITIES_KEY, Vector<String>()); plugin_config.capabilities = config_file->get_value(PluginConfigIOS::DEPENDENCIES_SECTION, PluginConfigIOS::DEPENDENCIES_CAPABILITIES_KEY, Vector<String>());
plugin_config.linker_flags = config_file->get_value(PluginConfigIOS::DEPENDENCIES_SECTION, PluginConfigIOS::DEPENDENCIES_LINKER_FLAGS, Vector<String>());
} }
if (config_file->has_section(PluginConfigIOS::PLIST_SECTION)) { if (config_file->has_section(PluginConfigIOS::PLIST_SECTION)) {