Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ubuntu 24.04 #986

Draft
wants to merge 9 commits into
base: staging
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crypto_plugins/flutter_libmonero
76 changes: 47 additions & 29 deletions docs/building.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ Here you will find instructions on how to install the necessary tools for buildi
The following instructions are for building and running on a Linux host. Alternatively, see the [Mac](#mac-host) and/or [Windows](#windows-host) section. This entire section (except for the Android Studio section) needs to be completed in WSL if building on a Windows host.

### Flutter
Install Flutter 3.22.1 by [following their guide](https://docs.flutter.dev/get-started/install/linux/desktop?tab=download#install-the-flutter-sdk). You can also clone https://github.com/flutter/flutter, check out the `3.22.1` tag, and add its `flutter/bin` folder to your PATH as in
Install Flutter 3.24.2 by [following their guide](https://docs.flutter.dev/get-started/install/linux/desktop?tab=download#install-the-flutter-sdk). You can also clone https://github.com/flutter/flutter, check out the `3.24.2` tag, and add its `flutter/bin` folder to your PATH as in
```sh
FLUTTER_DIR="$HOME/development/flutter"
git clone https://github.com/flutter/flutter.git "$FLUTTER_DIR"
cd "$FLUTTER_DIR"
git checkout 3.22.1
git checkout 3.24.2
echo 'export PATH="$PATH:'"$FLUTTER_DIR"'/bin"' >> "$HOME/.profile"
source "$HOME/.profile"
flutter precache
Expand Down Expand Up @@ -53,14 +53,33 @@ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-
### Build dependencies
Install basic dependencies
```
sudo apt-get install libssl-dev curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake libgit2-dev clang libncurses5-dev libncursesw5-dev zlib1g-dev llvm python3-distutils g++ gcc gperf libopencv-dev
sudo apt-get install libssl-dev curl unzip automake build-essential file pkg-config git python3 libtool libtinfo6 cmake libgit2-dev clang libncurses5-dev libncursesw5-dev zlib1g-dev llvm g++ gcc gperf libopencv-dev python3-typogrify xsltproc valac gobject-introspection meson
```

Install [Rust](https://www.rust-lang.org/tools/install) with command:
For Ubuntu 20.04,
```
sudo apt-get install vapigen
pip3 install --upgrade meson==0.64.1 markdown==3.4.1 markupsafe==2.1.1 jinja2==3.1.2 pygments==2.13.0 toml==0.10.2 typogrify==2.0.7 tomli==2.0.1
```

For Ubuntu 24.04,
```
sudo apt install pipx libgcrypt20-dev libglib2.0-dev libsecret-1-dev
pipx install meson==0.64.1 markdown==3.4.1 markupsafe==2.1.1 jinja2==3.1.2 pygments==2.13.0 toml==0.10.2 typogrify==2.0.7 tomli==2.0.1
```

Install `libtinfo5` (required by [monero_c](https://github.com/MrCyjaneK/monero_c), should be dropped in the future):
```
wget http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb -O libtinfo5.deb \
&& apt install ./libtinfo5.deb \
&& rm libtinfo5.deb
```

Install [Rust](https://www.rust-lang.org/tools/install) via [rustup.rs](https://rustup.rs), the required Rust toolchains, and `cargo-ndk 2.12.7` with command:
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.bashrc
rustup install 1.67.1 1.72.0 1.73.0
source ~/.bashrc
rustup install 1.67.1 1.71.0 1.72.0 1.73.0
rustup default 1.67.1
cargo install cargo-ndk --version 2.12.7 --locked
```
Expand All @@ -74,9 +93,9 @@ rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-andro
Linux desktop specific dependencies:
```
sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev meson python3-pip libgirepository1.0-dev valac xsltproc docbook-xsl
pip3 install --upgrade meson==0.64.1 markdown==3.4.1 markupsafe==2.1.1 jinja2==3.1.2 pygments==2.13.0 toml==0.10.2 typogrify==2.0.7 tomli==2.0.1
```

### Clone the repository and initialize submodules
After installing the prerequisites listed above, download the code and init the submodules
```
git clone https://github.com/cypherstack/stack_wallet.git
Expand All @@ -92,17 +111,15 @@ cd scripts/linux
cd ../..
```

### Build coinlib
Coinlib's native secp256k1 library must be built prior to running Stack Wallet. It can be built from within the root `stack_wallet` folder on a...
- Linux host for Linux targets: `dart run coinlib:build_linux`, or
### Build secp256k1
Coinlib requires a secp256k1 library to be built prior to running Stack Wallet. It can be built from within the root `stack_wallet` folder on a...
- Linux host for Linux targets: `dart run coinlib:build_linux` (requires [Docker](https://docs.docker.com/engine/install/ubuntu/) or [`podman`](https://podman.io/docs/installation))
- Linux host for Windows targets: `dart run coinlib:build_windows_crosscompile`
- Windows host: `dart run coinlib:build_windows`
- WSL2 host: `dart run coinlib:build_wsl`
- macOS host: `dart run coinlib:build_macos`

To build coinlib on Linux, you will need `docker` (see [installation instructions](https://docs.docker.com/engine/install/ubuntu/)) or [`podman`](https://podman.io/docs/installation) (`sudo apt-get -y install podman`)

For Windows targets, you can use a `secp256k1.dll` produced by any of the three middle options if the first attempt doesn't succeed.
or by using `scripts/linux/build_secp256k1.sh` or `scripts/windows/build_secp256k1.bat`.

### Run prebuild script

Expand All @@ -117,7 +134,7 @@ or manually by creating the files referenced in that script with the specified c

### Build plugins
#### Build script: `build_app.sh`
The `build_app.sh` script is use to build applications Stack Wallet. View the script's help message with `./build_app.sh -h` for more information on its usage.
The `build_app.sh` script is used to build the Stack Wallet and its family of applications. View the script's help message with `./build_app.sh -h` for more information on its usage.

Options:

Expand All @@ -144,7 +161,7 @@ cd scripts
cd scripts
./build_app.sh -a stack_wallet -p linux
```

<!--
##### Remove system packages (may be needed for building flutter_libmonero)
[`flutter_libmonero`](https://github.com/cypherstack/flutter_libmonero) may have issues building due to conflicts with system packages: if so, follow this section.

Expand All @@ -156,13 +173,19 @@ for example to find which pre-installed packages you may need to remove with `su
```
sudo apt-get remove '^libboost.*-dev.*'
```
<!-- TODO: configure compiler to prefer built over system libraries. Should already use them? -->
TODO: configure compiler to prefer built over system libraries. Should already use them? -->

#### Building plugins and configure for Windows
Install dependencies like MXE:
```
cd scripts
cd scripts/windows
./deps.sh
./build_app.sh -a stack_wallet -p windows
```

and use `scripts/build_app.sh` to build plugins:
```
cd ..
./build_app.sh -a stack_wallet -p windows -v 2.1.0 -b 210
```

### Running
Expand Down Expand Up @@ -209,7 +232,7 @@ Download and install [Rust](https://www.rust-lang.org/tools/install). [Rustup](
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.bashrc
rustup install 1.67.1 1.72.0 1.73.0
rustup install 1.67.1 1.71.0 1.72.0 1.73.0
rustup default 1.67.1
cargo install cargo-ndk --version 2.12.7 --locked
cargo install cbindgen cargo-lipo
Expand All @@ -219,7 +242,7 @@ rustup target add aarch64-apple-ios aarch64-apple-darwin
Optionally download [Android Studio](https://developer.android.com/studio) as an IDE and activate its Dart and Flutter plugins. VS Code may work as an alternative, but this is not recommended.

### Flutter
Install [Flutter](https://docs.flutter.dev/get-started/install) 3.22.1 on your Mac host by following [these instructions](https://docs.flutter.dev/get-started/install/macos). Run `flutter doctor` in a terminal to confirm its installation.
Install [Flutter](https://docs.flutter.dev/get-started/install) 3.24.2 on your Mac host by following [these instructions](https://docs.flutter.dev/get-started/install/macos). Run `flutter doctor` in a terminal to confirm its installation.

### Build plugins and configure
#### Building plugins for iOS
Expand Down Expand Up @@ -272,16 +295,11 @@ Install the following libraries:
sudo apt-get install libgtk2.0-dev
```

You will also need to install MXE on the WSL2 Ubuntu 20.04 host and can do so by running `stack_wallet/scripts/windows/deps.sh`:
```
./stack_wallet/scripts/windows/deps.sh
```

The WSL2 host may optionally be navigated to the `stack_wallet` repository on the Windows host in order to build the plugins in-place and skip the next section in which you copy the `dll`s from WSL2 to Windows. Then build windows `dll` libraries by running the following script on the WSL2 Ubuntu 20.04 host:

- `stack_wallet/scripts/windows/build_all.sh`

Copy the resulting `dll`s to their respective positions on the Windows host:
If the DLLs were built on the WSL filesystem instead of on Windows, copy the resulting `dll`s to their respective positions on the Windows host:

- `stack_wallet/crypto_plugins/flutter_libepiccash/scripts/windows/build/libepic_cash_wallet.dll`
- `stack_wallet/crypto_plugins/flutter_liblelantus/scripts/windows/build/libmobileliblelantus.dll`
Expand All @@ -294,13 +312,13 @@ Copy the resulting `dll`s to their respective positions on the Windows host:
Frostdart will be built by the Windows host later.

### Install Flutter on Windows host
Install Flutter 3.22.1 on your Windows host (not in WSL2) by [following their guide](https://docs.flutter.dev/get-started/install/windows/desktop?tab=download#install-the-flutter-sdk) or by cloning https://github.com/flutter/flutter, checking out the `3.22.1` tag, and adding its `flutter/bin` folder to your PATH as in
Install Flutter 3.24.2 on your Windows host (not in WSL2) by [following their guide](https://docs.flutter.dev/get-started/install/windows/desktop?tab=download#install-the-flutter-sdk) or by cloning https://github.com/flutter/flutter, checking out the `3.24.2` tag, and adding its `flutter/bin` folder to your PATH as in
```bat
@echo off
set "FLUTTER_DIR=%USERPROFILE%\development\flutter"
git clone https://github.com/flutter/flutter.git "%FLUTTER_DIR%"
cd /d "%FLUTTER_DIR%"
git checkout 3.22.1
git checkout 3.24.2
setx PATH "%PATH%;%FLUTTER_DIR%\bin"
echo Flutter setup completed. Please restart your command prompt.
```
Expand All @@ -310,7 +328,7 @@ Run `flutter doctor` in PowerShell to confirm its installation.
### Rust
Install [Rust](https://www.rust-lang.org/tools/install) on the Windows host (not in WSL2). Download the installer from [rustup.rs](https://rustup.rs), make sure it works on the commandline (you may need to open a new terminal), and install the following versions:
```
rustup install 1.67.1 1.72.0 1.73.0
rustup install 1.67.1 1.71.0 1.72.0 1.73.0
rustup default 1.67.1
cargo install cargo-ndk --version 2.12.7 --locked
```
Expand Down
6 changes: 3 additions & 3 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -732,9 +732,9 @@ packages:
dependency: "direct main"
description:
path: "."
ref: "7a11d0cadf8c7a6a5d5144dab18cef9536aa5943"
resolved-ref: "7a11d0cadf8c7a6a5d5144dab18cef9536aa5943"
url: "https://github.com/cypherstack/flutter_libsparkmobile.git"
ref: "69e9a50715b89497951eba67f1313549708b7c6d"
resolved-ref: "69e9a50715b89497951eba67f1313549708b7c6d"
url: "https://github.com/mrcyjanek/flutter_libsparkmobile.git"
source: git
version: "0.0.1"
flutter_lints:
Expand Down
2 changes: 1 addition & 1 deletion scripts/app_config/templates/pubspec.template
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ dependencies:
flutter_libsparkmobile:
git:
url: https://github.com/cypherstack/flutter_libsparkmobile.git
ref: 7a11d0cadf8c7a6a5d5144dab18cef9536aa5943
ref: d88de9506fda95a3114134817d172a841d93947e

flutter_libmonero:
path: ./crypto_plugins/flutter_libmonero
Expand Down
100 changes: 100 additions & 0 deletions scripts/dev/0001-ubuntu-24.04.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
From f76f37404784a9283c55a7b11eef109edda3d05a Mon Sep 17 00:00:00 2001
From: Czarek Nakamoto <cyjan@mrcyjanek.net>
Date: Tue, 3 Sep 2024 09:04:02 +0200
Subject: [PATCH] ubuntu 24.04

---
docs/building.md | 11 +++++++++--
pubspec.lock | 6 +++---
scripts/app_config/templates/pubspec.template | 4 ++--
scripts/linux/build_secp256k1.sh | 2 +-
scripts/linux/build_secure_storage_deps.sh | 2 +-
5 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/docs/building.md b/docs/building.md
index d4597d7e..12948e4a 100644
--- a/docs/building.md
+++ b/docs/building.md
@@ -53,14 +53,21 @@ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-
### Build dependencies
Install basic dependencies
```
-sudo apt-get install libssl-dev curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake libgit2-dev clang libncurses5-dev libncursesw5-dev zlib1g-dev llvm python3-distutils g++ gcc gperf libopencv-dev
+sudo apt-get install libssl-dev curl unzip automake build-essential file pkg-config git python3 libtool libtinfo6 cmake libgit2-dev clang libncurses5-dev libncursesw5-dev zlib1g-dev llvm g++ gcc gperf libopencv-dev python3-typogrify xsltproc valac gobject-introspection vapigen meson
+```
+
+libtinfo5 (required for monero_c, will be dropped once we are at 0.19.x.. maybe)
+```
+wget http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb -O libtinfo5.deb \
+ && apt install ./libtinfo5.deb \
+ && rm libtinfo5.deb
```

Install [Rust](https://www.rust-lang.org/tools/install) with command:
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.bashrc
-rustup install 1.67.1 1.72.0 1.73.0
+rustup install 1.67.1 1.71.0 1.72.0 1.73.0
rustup default 1.67.1
cargo install cargo-ndk --version 2.12.7 --locked
```
diff --git a/pubspec.lock b/pubspec.lock
index 001cb4b6..f51df73d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -732,9 +732,9 @@ packages:
dependency: "direct main"
description:
path: "."
- ref: "7a11d0cadf8c7a6a5d5144dab18cef9536aa5943"
- resolved-ref: "7a11d0cadf8c7a6a5d5144dab18cef9536aa5943"
- url: "https://github.com/cypherstack/flutter_libsparkmobile.git"
+ ref: "69e9a50715b89497951eba67f1313549708b7c6d"
+ resolved-ref: "69e9a50715b89497951eba67f1313549708b7c6d"
+ url: "https://github.com/mrcyjanek/flutter_libsparkmobile.git"
source: git
version: "0.0.1"
flutter_lints:
diff --git a/scripts/app_config/templates/pubspec.template b/scripts/app_config/templates/pubspec.template
index dc0323d2..0116b939 100644
--- a/scripts/app_config/templates/pubspec.template
+++ b/scripts/app_config/templates/pubspec.template
@@ -32,8 +32,8 @@ dependencies:

flutter_libsparkmobile:
git:
- url: https://github.com/cypherstack/flutter_libsparkmobile.git
- ref: 7a11d0cadf8c7a6a5d5144dab18cef9536aa5943
+ url: https://github.com/mrcyjanek/flutter_libsparkmobile.git
+ ref: 69e9a50715b89497951eba67f1313549708b7c6d

flutter_libmonero:
path: ./crypto_plugins/flutter_libmonero
diff --git a/scripts/linux/build_secp256k1.sh b/scripts/linux/build_secp256k1.sh
index 6fdd9f58..e333b723 100755
--- a/scripts/linux/build_secp256k1.sh
+++ b/scripts/linux/build_secp256k1.sh
@@ -6,5 +6,5 @@ mkdir -p build && cd build
cmake ..
cmake --build .
mkdir -p ../../../../../build
-cp src/libsecp256k1.so.2.2.1 "../../../../../build/libsecp256k1.so"
+cp src/libsecp256k1.so.2.*.* "../../../../../build/libsecp256k1.so"
cd ../../../
diff --git a/scripts/linux/build_secure_storage_deps.sh b/scripts/linux/build_secure_storage_deps.sh
index aff3097d..9956d286 100755
--- a/scripts/linux/build_secure_storage_deps.sh
+++ b/scripts/linux/build_secure_storage_deps.sh
@@ -32,7 +32,7 @@ if ! [ -x "$(command -v meson)" ]; then
echo 'Error: meson is not installed.' >&2
exit 1
fi
-meson _build
+meson _build -Dmanpage=false -Dgtk_doc=false
if ! [ -x "$(command -v ninja)" ]; then
echo 'Error: ninja is not installed.' >&2
exit 1
--
2.43.0

2 changes: 1 addition & 1 deletion scripts/linux/build_secp256k1.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ mkdir -p build && cd build
cmake ..
cmake --build .
mkdir -p ../../../../../build
cp src/libsecp256k1.so.2.2.1 "../../../../../build/libsecp256k1.so"
cp src/libsecp256k1.so.2.*.* "../../../../../build/libsecp256k1.so"
cd ../../../
2 changes: 1 addition & 1 deletion scripts/linux/build_secure_storage_deps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ if ! [ -x "$(command -v meson)" ]; then
echo 'Error: meson is not installed.' >&2
exit 1
fi
meson _build
meson _build -Dmanpage=false -Dgtk_doc=false
if ! [ -x "$(command -v ninja)" ]; then
echo 'Error: ninja is not installed.' >&2
exit 1
Expand Down
7 changes: 4 additions & 3 deletions scripts/windows/deps.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#!/bin/bash

(cd ../../crypto_plugins/flutter_libepiccash/scripts/windows && ./deps.sh )
(cd ../../crypto_plugins/flutter_liblelantus/scripts/windows && ./mxedeps.sh )
# (cd ../../crypto_plugins/flutter_libmonero/scripts/windows && ./monerodeps.sh && ./mxedeps.sh) &
cd ../../crypto_plugins/flutter_libepiccash/scripts/windows && ./deps.sh
cd ../../crypto_plugins/flutter_liblelantus/scripts/windows && ./mxedeps.sh
# cd ../../crypto_plugins/flutter_libmonero/scripts/windows && ./monerodeps.sh && ./mxedeps.sh
sudo apt install libgtk2.0-dev

wait
echo "Done building"
Loading