diff --git a/lib/main.dart b/lib/main.dart index e6d92eff2..5ceb47e1a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -70,16 +70,18 @@ void main() async { } // FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); await Hive.initFlutter(appDirectory.path); - final isar = await Isar.open( - [LogSchema], - directory: appDirectory.path, - inspector: false, - ); - await Logging.instance.init(isar); - await DebugService.instance.init(isar); + if (!(Logging.isArmLinux || Logging.isTestEnv)) { + final isar = await Isar.open( + [LogSchema], + directory: appDirectory.path, + inspector: false, + ); + await Logging.instance.init(isar); + await DebugService.instance.init(isar); - // clear out all info logs on startup. No need to await and block - unawaited(DebugService.instance.purgeInfoLogs()); + // clear out all info logs on startup. No need to await and block + unawaited(DebugService.instance.purgeInfoLogs()); + } // Registering Transaction Model Adapters Hive.registerAdapter(TransactionDataAdapter()); diff --git a/lib/utilities/logger.dart b/lib/utilities/logger.dart index ee3ed684c..0771d5350 100644 --- a/lib/utilities/logger.dart +++ b/lib/utilities/logger.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:core' as core; +import 'dart:core'; import 'dart:io'; import 'package:flutter/foundation.dart'; @@ -11,6 +12,8 @@ import 'package:stackwallet/utilities/enums/log_level_enum.dart'; export 'enums/log_level_enum.dart'; class Logging { + static const isArmLinux = + bool.fromEnvironment("IS_ARM"); static final isTestEnv = Platform.environment["FLUTTER_TEST"] == "true"; Logging._(); static final Logging _instance = Logging._(); @@ -25,7 +28,7 @@ class Logging { } Future<void> initInIsolate() async { - if (isTestEnv) { + if (isTestEnv || isArmLinux) { // do this for now until we mock Isar properly for testing isar = null; return; @@ -42,7 +45,7 @@ class Logging { core.bool printToConsole = true, core.bool printFullLength = false, }) { - if (isTestEnv) { + if (isTestEnv || isArmLinux) { Logger.print(object, normalLength: !printFullLength); return; } diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index 0dda998a3..12d9f1f71 100644 --- a/linux/CMakeLists.txt +++ b/linux/CMakeLists.txt @@ -50,6 +50,20 @@ endfunction() set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) +# build libjsoncpp and libsecret for flutter_secure_storage +set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/pkg-config") +set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/pc") + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/include) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build) + +add_library(jsoncpp SHARED IMPORTED) +set_target_properties(jsoncpp PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so") +add_library(secret-1 SHARED IMPORTED) +set_target_properties(secret-1 PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so") + # System-level dependencies. find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) @@ -71,8 +85,12 @@ add_executable(${BINARY_NAME} apply_standard_settings(${BINARY_NAME}) # Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE -static-libgcc -static-libstdc++) target_link_libraries(${BINARY_NAME} PRIVATE flutter) target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +target_link_libraries(${BINARY_NAME} PRIVATE jsoncpp) +target_link_libraries(${BINARY_NAME} PRIVATE secret-1) + # Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) @@ -125,6 +143,20 @@ install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../crypto_plugins/flutter_libepiccash install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../crypto_plugins/flutter_liblelantus/scripts/linux/build/libmobileliblelantus.so" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so.1.7.4" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so.1" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so.0.0.0" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so.0" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) install(FILES "${bundled_library}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" diff --git a/scripts/linux/build_all.sh b/scripts/linux/build_all.sh index e199e3043..830198bcd 100755 --- a/scripts/linux/build_all.sh +++ b/scripts/linux/build_all.sh @@ -1,5 +1,11 @@ #!/bin/bash +# for arm +# flutter-elinux clean +# flutter-elinux pub get +# flutter-elinux build linux --dart-define="IS_ARM=true" +mkdir build +./build_secure_storage_deps.sh & (cd ../../crypto_plugins/flutter_liblelantus/scripts/linux && ./build_all.sh ) & (cd ../../crypto_plugins/flutter_libepiccash/scripts/linux && ./build_all.sh ) & (cd ../../crypto_plugins/flutter_libmonero/scripts/linux && ./build_monero_all.sh && ./build_sharedfile.sh ) & diff --git a/scripts/linux/build_secure_storage_deps.sh b/scripts/linux/build_secure_storage_deps.sh new file mode 100755 index 000000000..5ed032b1a --- /dev/null +++ b/scripts/linux/build_secure_storage_deps.sh @@ -0,0 +1,25 @@ +#!/bin/bash +LINUX_DIRECTORY=$(pwd) +mkdir build + +# Build JsonCPP +cd build +git clone https://github.com/open-source-parsers/jsoncpp.git +cd jsoncpp +git checkout 1.7.4 +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=release -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=ON -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" .. +make -j$(nproc) + +cd $LINUX_DIRECTORY +# Build libSecret +# sudo apt install meson libgirepository1.0-dev valac xsltproc gi-docgen docbook-xsl +# sudo apt install python3-pip +#pip3 install --user meson --upgrade +# pip3 install --user gi-docgen +cd build +git clone https://gitlab.gnome.org/GNOME/libsecret.git +cd libsecret +meson _build +ninja -C _build diff --git a/scripts/linux/pc/libsecret-1.pc b/scripts/linux/pc/libsecret-1.pc new file mode 100644 index 000000000..7da2e13f5 --- /dev/null +++ b/scripts/linux/pc/libsecret-1.pc @@ -0,0 +1,15 @@ +prefix=/usr/local +libdir=${prefix}/lib/x86_64-linux-gnu +includedir=${prefix}/include + +exec_prefix=${prefix} +datarootdir=${prefix}/share +datadir=${datarootdir} +sysconfdir=${prefix}/etc + +Name: libsecret-1 +Description: GObject bindings for Secret Service API +Version: 0.20.5 +Requires: glib-2.0 >= 2.44, gio-2.0 >= 2.44, gio-unix-2.0 >= 2.44 +Requires.private: libgcrypt >= 1.2.2 +Libs: -L${libdir} -lsecret-1