-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
mangonote-devs
committed
Feb 29, 2024
0 parents
commit ab110af
Showing
507 changed files
with
267,327 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
# macOS: | ||
|
||
Use macOS 10.12 - 10.13 for better backwards compability. | ||
|
||
1. `HOMEBREW_OPTFLAGS="-march=core2" HOMEBREW_OPTIMIZATION_LEVEL="O0" brew install boost zmq libpgm miniupnpc libsodium expat libunwind-headers protobuf libgcrypt hidapi` | ||
|
||
2. Get the latest LTS from here: https://www.qt.io/offline-installers and install | ||
|
||
3. `git clone --recursive -b v0.X.Y.Z --depth 1 https://github.com/mangonote-project/mangonote-gui` | ||
|
||
4. Compile `mangonote-wallet-gui.app` | ||
|
||
```bash | ||
mkdir build && cd build | ||
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=~/Qt5.12.8/5.12.8/clang_64 .. | ||
make | ||
make deploy | ||
``` | ||
|
||
5. Replace the `mangonoted` binary inside `mangonote-wallet-gui.app/Contents/MacOS/` with one built using deterministic builds / gitian. | ||
|
||
## Codesigning and notarizing | ||
|
||
1. Save the following text as `entitlements.plist` | ||
|
||
```xml | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<key>com.apple.security.cs.disable-executable-page-protection</key> | ||
<true/> | ||
</dict> | ||
</plist> | ||
``` | ||
|
||
2. `codesign --deep --force --verify --verbose --options runtime --timestamp --entitlements entitlements.plist --sign 'XXXXXXXXXX' mangonote-wallet-gui.app` | ||
|
||
You can check if this step worked by using `codesign -dvvv mangonote-wallet-gui.app` | ||
|
||
3. `hdiutil create -fs HFS+ -srcfolder mangonote-gui-v0.X.Y.Z -volname mangonote-wallet-gui mangonote-gui-mac-x64-v0.X.Y.Z.dmg` | ||
|
||
4. `xcrun altool -t osx --file mangonote-gui-mac-x64-v0.X.Y.Z.dmg --primary-bundle-id org.mangonote-project.mangonote-wallet-gui.dmg --notarize-app --username email@address.org` | ||
|
||
5. `xcrun altool --notarization-info aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee -u email@address.org` | ||
|
||
6. `xcrun stapler staple -v mangonote-gui-mac-x64-v0.X.Y.Z.dmg` | ||
|
||
## Compile Qt for Apple Silicon | ||
|
||
Qt does not offer pre-built binaries for Apple Silicon, they have to be manually compiled. | ||
|
||
```bash | ||
git clone https://github.com/qt/qt5.git | ||
cd qt5 | ||
git checkout v5.15.9-lts-lgpl | ||
./init-repository | ||
mkdir build | ||
cd build | ||
../configure -prefix /path/to/qt-build-dir/ -opensource -confirm-license -release -nomake examples -nomake tests -no-rpath -skip qtwebengine -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtnetworkauth -skip qtpurchasing -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine | ||
make | ||
make install | ||
cd ../qttools/src/linguist/lrelease | ||
../../../../build/qtbase/bin/qmake | ||
make | ||
make install | ||
cd ../../../../qttools/src/macdeployqt/macdeployqt/ | ||
../../../../build/qtbase/bin/qmake | ||
make | ||
make install | ||
``` | ||
|
||
For compilation with Xcode 15 the following patch has to be applied: https://raw.githubusercontent.com/Homebrew/formula-patches/086e8cf/qt5/qt5-qmake-xcode15.patch | ||
|
||
The `CMAKE_PREFIX_PATH` has to be set to `/path/to/qt-build-dir/` during mangonote-gui compilation. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,241 @@ | ||
FROM debian:buster | ||
|
||
ARG THREADS=1 | ||
ARG ANDROID_NDK_REVISION=21e | ||
ARG ANDROID_NDK_HASH=c3ebc83c96a4d7f539bd72c241b2be9dcd29bda9 | ||
ARG ANDROID_SDK_REVISION=7302050_latest | ||
ARG ANDROID_SDK_HASH=7a00faadc0864f78edd8f4908a629a46d622375cbe2e5814e82934aebecdb622 | ||
ARG QT_VERSION=v5.15.7-lts-lgpl | ||
|
||
WORKDIR /opt/android | ||
ENV WORKDIR=/opt/android | ||
|
||
ENV ANDROID_NATIVE_API_LEVEL=30 | ||
ENV ANDROID_API=android-${ANDROID_NATIVE_API_LEVEL} | ||
ENV ANDROID_CLANG=aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang | ||
ENV ANDROID_CLANGPP=aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++ | ||
ENV ANDROID_NDK_ROOT=${WORKDIR}/android-ndk-r${ANDROID_NDK_REVISION} | ||
ENV ANDROID_SDK_ROOT=${WORKDIR}/cmdline-tools | ||
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 | ||
ENV PATH=${JAVA_HOME}/bin:${PATH} | ||
ENV PREFIX=${WORKDIR}/prefix | ||
ENV TOOLCHAIN_DIR=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64 | ||
|
||
RUN apt-get update \ | ||
&& apt-get install -y ant automake build-essential ca-certificates-java file gettext git libc6 libncurses5 \ | ||
libssl-dev libstdc++6 libtinfo5 libtool libz1 openjdk-11-jdk-headless openjdk-11-jre-headless pkg-config python3 \ | ||
unzip wget | ||
|
||
RUN PACKAGE_NAME=commandlinetools-linux-${ANDROID_SDK_REVISION}.zip \ | ||
&& wget -q https://dl.google.com/android/repository/${PACKAGE_NAME} \ | ||
&& echo "${ANDROID_SDK_HASH} ${PACKAGE_NAME}" | sha256sum -c \ | ||
&& unzip -q ${PACKAGE_NAME} \ | ||
&& rm -f ${PACKAGE_NAME} | ||
|
||
RUN PACKAGE_NAME=android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip \ | ||
&& wget -q https://dl.google.com/android/repository/${PACKAGE_NAME} \ | ||
&& echo "${ANDROID_NDK_HASH} ${PACKAGE_NAME}" | sha1sum -c \ | ||
&& unzip -q ${PACKAGE_NAME} \ | ||
&& rm -f ${PACKAGE_NAME} | ||
|
||
RUN echo y | ${ANDROID_SDK_ROOT}/bin/sdkmanager --sdk_root=${ANDROID_SDK_ROOT} "build-tools;28.0.3" "platforms;${ANDROID_API}" "tools" > /dev/null | ||
|
||
ENV HOST_PATH=${PATH} | ||
ENV PATH=${TOOLCHAIN_DIR}/aarch64-linux-android/bin:${TOOLCHAIN_DIR}/bin:${PATH} | ||
|
||
ARG ZLIB_VERSION=1.3 | ||
ARG ZLIB_HASH=ff0ba4c292013dbc27530b3a81e1f9a813cd39de01ca5e0f8bf355702efa593e | ||
RUN wget -q https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz \ | ||
&& echo "${ZLIB_HASH} zlib-${ZLIB_VERSION}.tar.gz" | sha256sum -c \ | ||
&& tar -xzf zlib-${ZLIB_VERSION}.tar.gz \ | ||
&& rm zlib-${ZLIB_VERSION}.tar.gz \ | ||
&& cd zlib-${ZLIB_VERSION} \ | ||
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --prefix=${PREFIX} --static \ | ||
&& make -j${THREADS} \ | ||
&& make -j${THREADS} install \ | ||
&& rm -rf $(pwd) | ||
|
||
RUN git clone git://code.qt.io/qt/qt5.git -b ${QT_VERSION} --depth 1 \ | ||
&& cd qt5 \ | ||
&& perl init-repository --module-subset=default,-qtwebengine \ | ||
&& PATH=${HOST_PATH} ./configure -v -developer-build -release \ | ||
-xplatform android-clang \ | ||
-android-ndk-platform ${ANDROID_API} \ | ||
-android-ndk ${ANDROID_NDK_ROOT} \ | ||
-android-sdk ${ANDROID_SDK_ROOT} \ | ||
-android-ndk-host linux-x86_64 \ | ||
-no-dbus \ | ||
-opengl es2 \ | ||
-no-use-gold-linker \ | ||
-no-sql-mysql \ | ||
-opensource -confirm-license \ | ||
-android-arch arm64-v8a \ | ||
-prefix ${PREFIX} \ | ||
-nomake tools -nomake tests -nomake examples \ | ||
-skip qtwebengine \ | ||
-skip qtserialport \ | ||
-skip qtconnectivity \ | ||
-skip qttranslations \ | ||
-skip qtpurchasing \ | ||
-skip qtgamepad -skip qtscript -skip qtdoc \ | ||
-no-warnings-are-errors \ | ||
&& PATH=${HOST_PATH} make -j${THREADS} \ | ||
&& PATH=${HOST_PATH} make -j${THREADS} install \ | ||
&& cd qttools/src/linguist/lrelease \ | ||
&& ../../../../qtbase/bin/qmake \ | ||
&& PATH=${HOST_PATH} make -j${THREADS} install \ | ||
&& cd ../../../.. \ | ||
&& rm -rf $(pwd) | ||
|
||
ARG ICONV_VERSION=1.16 | ||
ARG ICONV_HASH=e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04 | ||
RUN wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ICONV_VERSION}.tar.gz \ | ||
&& echo "${ICONV_HASH} libiconv-${ICONV_VERSION}.tar.gz" | sha256sum -c \ | ||
&& tar -xzf libiconv-${ICONV_VERSION}.tar.gz \ | ||
&& rm -f libiconv-${ICONV_VERSION}.tar.gz \ | ||
&& cd libiconv-${ICONV_VERSION} \ | ||
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --build=x86_64-linux-gnu --host=aarch64 --prefix=${PREFIX} --disable-rpath \ | ||
&& make -j${THREADS} \ | ||
&& make -j${THREADS} install | ||
|
||
ARG BOOST_VERSION=1_74_0 | ||
ARG BOOST_VERSION_DOT=1.74.0 | ||
ARG BOOST_HASH=83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1 | ||
RUN wget -q https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \ | ||
&& echo "${BOOST_HASH} boost_${BOOST_VERSION}.tar.bz2" | sha256sum -c \ | ||
&& tar -xf boost_${BOOST_VERSION}.tar.bz2 \ | ||
&& rm -f boost_${BOOST_VERSION}.tar.bz2 \ | ||
&& cd boost_${BOOST_VERSION} \ | ||
&& PATH=${HOST_PATH} ./bootstrap.sh --prefix=${PREFIX} \ | ||
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} ./b2 --build-type=minimal link=static runtime-link=static \ | ||
--with-chrono --with-date_time --with-filesystem --with-program_options --with-regex --with-serialization \ | ||
--with-system --with-thread --with-locale --build-dir=android --stagedir=android toolset=clang threading=multi \ | ||
threadapi=pthread target-os=android -sICONV_PATH=${PREFIX} \ | ||
cflags='--target=aarch64-linux-android' \ | ||
cxxflags='--target=aarch64-linux-android' \ | ||
linkflags='--target=aarch64-linux-android --sysroot=${ANDROID_NDK_ROOT}/platforms/${ANDROID_API}/arch-arm64 ${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so -nostdlib++' \ | ||
install -j${THREADS} \ | ||
&& rm -rf $(pwd) | ||
|
||
ARG OPENSSL_VERSION=1.1.1u | ||
ARG OPENSSL_HASH=e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6 | ||
RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \ | ||
&& echo "${OPENSSL_HASH} openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c \ | ||
&& tar -xzf openssl-${OPENSSL_VERSION}.tar.gz \ | ||
&& rm openssl-${OPENSSL_VERSION}.tar.gz \ | ||
&& cd openssl-${OPENSSL_VERSION} \ | ||
&& ANDROID_NDK_HOME=${ANDROID_NDK_ROOT} ./Configure CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} \ | ||
android-arm64 no-shared --static \ | ||
--with-zlib-include=${PREFIX}/include --with-zlib-lib=${PREFIX}/lib \ | ||
--prefix=${PREFIX} --openssldir=${PREFIX} \ | ||
&& sed -i 's/CNF_EX_LIBS=-ldl -pthread//g;s/BIN_CFLAGS=-pie $(CNF_CFLAGS) $(CFLAGS)//g' Makefile \ | ||
&& ANDROID_NDK_HOME=${ANDROID_NDK_ROOT} make -j${THREADS} \ | ||
&& make -j${THREADS} install \ | ||
&& rm -rf $(pwd) | ||
|
||
ARG EXPAT_VERSION=2.4.1 | ||
ARG EXPAT_HASH=2f9b6a580b94577b150a7d5617ad4643a4301a6616ff459307df3e225bcfbf40 | ||
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-${EXPAT_VERSION}.tar.bz2 && \ | ||
echo "${EXPAT_HASH} expat-${EXPAT_VERSION}.tar.bz2" | sha256sum -c && \ | ||
tar -xf expat-${EXPAT_VERSION}.tar.bz2 && \ | ||
rm expat-${EXPAT_VERSION}.tar.bz2 && \ | ||
cd expat-${EXPAT_VERSION} && \ | ||
CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --enable-static --disable-shared --prefix=${PREFIX} --host=aarch64-linux-android && \ | ||
make -j$THREADS && \ | ||
make -j$THREADS install && \ | ||
rm -rf $(pwd) | ||
|
||
ARG UNBOUND_VERSION=1.16.2 | ||
ARG UNBOUND_HASH=2e32f283820c24c51ca1dd8afecfdb747c7385a137abe865c99db4b257403581 | ||
RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-${UNBOUND_VERSION}.tar.gz && \ | ||
echo "${UNBOUND_HASH} unbound-${UNBOUND_VERSION}.tar.gz" | sha256sum -c && \ | ||
tar -xzf unbound-${UNBOUND_VERSION}.tar.gz && \ | ||
rm unbound-${UNBOUND_VERSION}.tar.gz && \ | ||
cd unbound-${UNBOUND_VERSION} && \ | ||
CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --disable-shared --enable-static --without-pyunbound --with-libexpat=${PREFIX} --with-ssl=${PREFIX} --with-libevent=no --without-pythonmodule --disable-flto --with-pthreads --with-libunbound-only --host=aarch64-linux-android --with-pic --prefix=${PREFIX} && \ | ||
make -j$THREADS && \ | ||
make -j$THREADS install && \ | ||
rm -rf $(pwd) | ||
|
||
ARG ZMQ_VERSION=v4.3.4 | ||
ARG ZMQ_HASH=4097855ddaaa65ed7b5e8cb86d143842a594eebd | ||
RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \ | ||
&& cd libzmq \ | ||
&& git checkout ${ZMQ_HASH} \ | ||
&& ./autogen.sh \ | ||
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --prefix=${PREFIX} --host=aarch64-linux-android \ | ||
--enable-static --disable-shared \ | ||
&& make -j${THREADS} \ | ||
&& make -j${THREADS} install \ | ||
&& rm -rf $(pwd) | ||
|
||
ARG SODIUM_VERSION=1.0.18 | ||
ARG SODIUM_HASH=4f5e89fa84ce1d178a6765b8b46f2b6f91216677 | ||
RUN set -ex \ | ||
&& git clone https://github.com/jedisct1/libsodium.git -b ${SODIUM_VERSION} --depth 1 \ | ||
&& cd libsodium \ | ||
&& test `git rev-parse HEAD` = ${SODIUM_HASH} || exit 1 \ | ||
&& ./autogen.sh \ | ||
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --prefix=${PREFIX} --host=aarch64-linux-android --enable-static --disable-shared \ | ||
&& make -j${THREADS} install \ | ||
&& rm -rf $(pwd) | ||
|
||
RUN git clone -b libgpg-error-1.41 --depth 1 git://git.gnupg.org/libgpg-error.git \ | ||
&& cd libgpg-error \ | ||
&& git reset --hard 98032624ae89a67ee6fe3b1db5d95032e681d163 \ | ||
&& ./autogen.sh \ | ||
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --host=aarch64-linux-android --prefix=${PREFIX} --disable-rpath --disable-shared --enable-static --disable-doc --disable-tests \ | ||
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} make -j${THREADS} \ | ||
&& make -j${THREADS} install \ | ||
&& rm -rf $(pwd) | ||
|
||
RUN git clone -b libgcrypt-1.10.1 --depth 1 git://git.gnupg.org/libgcrypt.git \ | ||
&& cd libgcrypt \ | ||
&& git reset --hard ae0e567820c37f9640440b3cff77d7c185aa6742 \ | ||
&& ./autogen.sh \ | ||
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --host=aarch64-linux-android --prefix=${PREFIX} --with-gpg-error-prefix=${PREFIX} --disable-shared --enable-static --disable-doc --disable-tests \ | ||
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} make -j${THREADS} \ | ||
&& make -j${THREADS} install \ | ||
&& rm -rf $(pwd) | ||
|
||
RUN git clone -b v3.24.2 --depth 1 https://github.com/Kitware/CMake \ | ||
&& cd CMake \ | ||
&& git reset --hard 31f835410efeea50acd43512eb9e5646a26ea177 \ | ||
&& PATH=${HOST_PATH} ./bootstrap \ | ||
&& PATH=${HOST_PATH} make -j${THREADS} \ | ||
&& PATH=${HOST_PATH} make -j${THREADS} install \ | ||
&& rm -rf $(pwd) | ||
|
||
RUN GRADLE_VERSION=5.6.4 \ | ||
&& GRADLE_HASH=1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d \ | ||
&& wget -q https\://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \ | ||
&& echo "${GRADLE_HASH} gradle-${GRADLE_VERSION}-bin.zip" | sha256sum -c \ | ||
&& GRADLE_LOCAL_PATH=gradle/wrapper/dists/gradle-${GRADLE_VERSION}-bin/bxirm19lnfz6nurbatndyydux \ | ||
&& mkdir -p ${GRADLE_LOCAL_PATH} \ | ||
&& mv gradle-${GRADLE_VERSION}-bin.zip ${GRADLE_LOCAL_PATH} | ||
|
||
ENV GRADLE_USER_HOME=${WORKDIR}/gradle | ||
|
||
CMD set -ex \ | ||
&& cd /mangonote-gui \ | ||
&& mkdir -p build/Android/release \ | ||
&& cd build/Android/release \ | ||
&& cmake \ | ||
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake" \ | ||
-DCMAKE_PREFIX_PATH="${PREFIX}" \ | ||
-DCMAKE_FIND_ROOT_PATH="${PREFIX}" \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DARCH="armv8-a" \ | ||
-DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ | ||
-DANDROID_ABI="arm64-v8a" \ | ||
-DANDROID_TOOLCHAIN=clang \ | ||
-DBoost_USE_STATIC_RUNTIME=ON \ | ||
-DLRELEASE_PATH="${PREFIX}/bin" \ | ||
-DQT_ANDROID_APPLICATION_BINARY="mangonote-wallet-gui" \ | ||
-DANDROID_SDK="${ANDROID_SDK_ROOT}" \ | ||
-DWITH_SCANNER=ON \ | ||
-DWITH_DESKTOP_ENTRY=OFF \ | ||
../../.. \ | ||
&& PATH=${HOST_PATH} make generate_translations_header \ | ||
&& make -j${THREADS} -C src \ | ||
&& make -j${THREADS} apk |
Oops, something went wrong.