From 106991316cc32fda8a8abf7c6ba3a478dc0cb619 Mon Sep 17 00:00:00 2001 From: Herbert Poul Date: Tue, 2 Jun 2020 13:04:18 +0200 Subject: [PATCH] first try on adding linux support. --- linux/CMakeLists.txt | 26 +++++++++++ linux/argon2_ffi_plugin.cc | 78 +++++++++++++++++++++++++++++++ linux/include/argon2_ffi_plugin.h | 23 +++++++++ pubspec.yaml | 2 + 4 files changed, 129 insertions(+) create mode 100644 linux/CMakeLists.txt create mode 100644 linux/argon2_ffi_plugin.cc create mode 100644 linux/include/argon2_ffi_plugin.h diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..57abc29 --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.10) +set(PROJECT_NAME "argon2_ffi") +project(${PROJECT_NAME} LANGUAGES CXX) + +set(PLUGIN_NAME "${PROJECT_NAME}_plugin") + +add_library(${PLUGIN_NAME} SHARED + "${PLUGIN_NAME}.cc" + + ../ios/Classes/argon2_ffi.c + + ../ios/Classes/argon2src/argon2.c + ../ios/Classes/argon2src/core.c + ../ios/Classes/argon2src/encoding.c + ../ios/Classes/argon2src/genkat.c + ../ios/Classes/argon2src/ref.c + ../ios/Classes/argon2src/thread.c + ../ios/Classes/argon2src/blake2/blake2b.c +) +apply_standard_settings(${PLUGIN_NAME}) +set_target_properties(${PLUGIN_NAME} PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL) +target_include_directories(${PLUGIN_NAME} INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin) diff --git a/linux/argon2_ffi_plugin.cc b/linux/argon2_ffi_plugin.cc new file mode 100644 index 0000000..c4579d2 --- /dev/null +++ b/linux/argon2_ffi_plugin.cc @@ -0,0 +1,78 @@ +#include "include/argon2_ffi_plugin.h" + +#include +#include +#include +#include + +#include +#include +#include + +namespace { + +class Argon2FfiPlugin : public flutter::Plugin { + public: + static void RegisterWithRegistrar(flutter::PluginRegistrarGlfw *registrar); + + Argon2FfiPlugin(); + + virtual ~Argon2FfiPlugin(); + + private: + // Called when a method is called on this plugin's channel from Dart. + void HandleMethodCall( + const flutter::MethodCall &method_call, + std::unique_ptr> result); +}; + +// static +void Argon2FfiPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarGlfw *registrar) { + auto channel = + std::make_unique>( + registrar->messenger(), "argon2_ffi", + &flutter::StandardMethodCodec::GetInstance()); + auto plugin = std::make_unique(); + + channel->SetMethodCallHandler( + [plugin_pointer = plugin.get()](const auto &call, auto result) { + plugin_pointer->HandleMethodCall(call, std::move(result)); + }); + + registrar->AddPlugin(std::move(plugin)); +} + +Argon2FfiPlugin::Argon2FfiPlugin() {} + +Argon2FfiPlugin::~Argon2FfiPlugin() {} + +void Argon2FfiPlugin::HandleMethodCall( + const flutter::MethodCall &method_call, + std::unique_ptr> result) { + // Replace "getPlatformVersion" check with your plugin's method. + // See: + // https://github.com/flutter/engine/tree/master/shell/platform/common/cpp/client_wrapper/include/flutter + // and + // https://github.com/flutter/engine/tree/master/shell/platform/glfw/client_wrapper/include/flutter + // for the relevant Flutter APIs. + if (method_call.method_name().compare("getPlatformVersion") == 0) { + struct utsname uname_data = {}; + uname(&uname_data); + std::ostringstream version_stream; + version_stream << "Linux " << uname_data.version; + flutter::EncodableValue response(version_stream.str()); + result->Success(&response); + } else { + result->NotImplemented(); + } +} + +} // namespace + +void Argon2FfiPluginRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar) { + Argon2FfiPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarManager::GetInstance() + ->GetRegistrar(registrar)); +} diff --git a/linux/include/argon2_ffi_plugin.h b/linux/include/argon2_ffi_plugin.h new file mode 100644 index 0000000..cbf7651 --- /dev/null +++ b/linux/include/argon2_ffi_plugin.h @@ -0,0 +1,23 @@ +#ifndef FLUTTER_PLUGIN_ARGON2_FFI_PLUGIN_H_ +#define FLUTTER_PLUGIN_ARGON2_FFI_PLUGIN_H_ + +#include + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __attribute__((visibility("default"))) +#else +#define FLUTTER_PLUGIN_EXPORT +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +FLUTTER_PLUGIN_EXPORT void Argon2FfiPluginRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar); + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // FLUTTER_PLUGIN_ARGON2_FFI_PLUGIN_H_ diff --git a/pubspec.yaml b/pubspec.yaml index 16963c9..01beb43 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,6 +41,8 @@ flutter: pluginClass: Argon2FfiPlugin macos: pluginClass: Argon2FfiPlugin + linux: + pluginClass: Argon2FfiPlugin # To add assets to your plugin package, add an assets section, like this: # assets: