From 14073361dbbe394b2231025d2ffa8b2318d29cfb Mon Sep 17 00:00:00 2001 From: marco <marco@cypherstack.com> Date: Thu, 1 Sep 2022 00:27:46 +0800 Subject: [PATCH 1/4] preliminary static build --- linux/CMakeLists.txt | 32 ++++++++++++++++++++++ scripts/linux/build_all.sh | 2 ++ scripts/linux/build_secure_storage_deps.sh | 23 ++++++++++++++++ scripts/linux/pc/libsecret-1.pc | 15 ++++++++++ 4 files changed, 72 insertions(+) create mode 100755 scripts/linux/build_secure_storage_deps.sh create mode 100644 scripts/linux/pc/libsecret-1.pc diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index 0dda998a3..cd7281ede 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/lib/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/lib/libjsoncpp.so.1.9.5" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/lib/libjsoncpp.so.25" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/lib/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..acc10ed99 100755 --- a/scripts/linux/build_all.sh +++ b/scripts/linux/build_all.sh @@ -1,5 +1,7 @@ #!/bin/bash +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..292c5f5e3 --- /dev/null +++ b/scripts/linux/build_secure_storage_deps.sh @@ -0,0 +1,23 @@ +#!/bin/bash +LINUX_DIRECTORY=$(pwd) +mkdir build + +# Build JsonCPP +cd build +git clone https://github.com/open-source-parsers/jsoncpp.git +git checkout 8190e061bc2d95da37479a638aa2c9e483e58ec6 +cd jsoncpp +mkdir build +cd build +cmake .. +make -j$(nproc) + +cd $LINUX_DIRECTORY +# Build libSecret +# sudo apt install libgirepository1.0-dev valac xsltproc gi-docgen docbook-xsl +# 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 From 550752f11b80bbe7e6ddcfcca26256eaa56456fc Mon Sep 17 00:00:00 2001 From: Marco <marco@cypherstack.com> Date: Thu, 1 Sep 2022 12:29:33 +0800 Subject: [PATCH 2/4] ubuntu 20 --- linux/CMakeLists.txt | 8 ++++---- scripts/linux/build_secure_storage_deps.sh | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index cd7281ede..12d9f1f71 100644 --- a/linux/CMakeLists.txt +++ b/linux/CMakeLists.txt @@ -60,7 +60,7 @@ 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/lib/libjsoncpp.so") +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") @@ -143,11 +143,11 @@ 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/lib/libjsoncpp.so.1.9.5" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" +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/lib/libjsoncpp.so.25" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" +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/lib/libjsoncpp.so" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" +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}" diff --git a/scripts/linux/build_secure_storage_deps.sh b/scripts/linux/build_secure_storage_deps.sh index 292c5f5e3..8c15e1e8b 100755 --- a/scripts/linux/build_secure_storage_deps.sh +++ b/scripts/linux/build_secure_storage_deps.sh @@ -5,16 +5,17 @@ mkdir build # Build JsonCPP cd build git clone https://github.com/open-source-parsers/jsoncpp.git -git checkout 8190e061bc2d95da37479a638aa2c9e483e58ec6 +git checkout 48d2a69d47bbf92337a09fc1672e1bad39fdde86 cd jsoncpp mkdir build cd build -cmake .. +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 libgirepository1.0-dev valac xsltproc gi-docgen docbook-xsl +# sudo apt install meson libgirepository1.0-dev valac xsltproc gi-docgen docbook-xsl +#pip3 install --user meson --upgrade # pip3 install --user gi-docgen cd build git clone https://gitlab.gnome.org/GNOME/libsecret.git From 6ee57ab217cf72bde8b5d0981c210100ab419264 Mon Sep 17 00:00:00 2001 From: Marco Salazar <marco@cypherstack.com> Date: Thu, 1 Sep 2022 16:51:06 +0800 Subject: [PATCH 3/4] arm success --- lib/main.dart | 20 +++++++++++--------- lib/utilities/logger.dart | 7 +++++-- scripts/linux/build_all.sh | 4 ++++ scripts/linux/build_secure_storage_deps.sh | 3 ++- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 45ee30411..c4ede2968 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 - DebugService.instance.purgeInfoLogs(); + // clear out all info logs on startup. No need to await and block + 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/scripts/linux/build_all.sh b/scripts/linux/build_all.sh index acc10ed99..830198bcd 100755 --- a/scripts/linux/build_all.sh +++ b/scripts/linux/build_all.sh @@ -1,5 +1,9 @@ #!/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 ) & diff --git a/scripts/linux/build_secure_storage_deps.sh b/scripts/linux/build_secure_storage_deps.sh index 8c15e1e8b..5ed032b1a 100755 --- a/scripts/linux/build_secure_storage_deps.sh +++ b/scripts/linux/build_secure_storage_deps.sh @@ -5,8 +5,8 @@ mkdir build # Build JsonCPP cd build git clone https://github.com/open-source-parsers/jsoncpp.git -git checkout 48d2a69d47bbf92337a09fc1672e1bad39fdde86 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" .. @@ -15,6 +15,7 @@ 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 From 9b85e522c9227bb01cd5bcb5ac9f1bc5c20b639e Mon Sep 17 00:00:00 2001 From: Marco <marco@cypherstack.com> Date: Thu, 1 Sep 2022 17:06:47 +0800 Subject: [PATCH 4/4] minor merge --- lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index cbfd8ab3d..5ceb47e1a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -70,7 +70,7 @@ void main() async { } // FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); await Hive.initFlutter(appDirectory.path); - if(!(Logging.isArmLinux || Logging.isTestEnv)) { + if (!(Logging.isArmLinux || Logging.isTestEnv)) { final isar = await Isar.open( [LogSchema], directory: appDirectory.path,