diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 067dd8e80..b7b8ecad3 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -170,10 +170,6 @@ jobs: with: toolchain: stable targets: aarch64-unknown-linux-gnu - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODE_VERSION }} - name: Rust cache uses: swatinem/rust-cache@v2 @@ -207,18 +203,6 @@ jobs: - name: Build run: cargo build --release --target aarch64-unknown-linux-gnu --features tauri - - - name: Install tauri-cli - run: cargo install tauri-cli - - - name: Install vite - run: npm install -g vite - - - name: Download dependencies - run: npm --prefix ./axolotl-web ci --loglevel verbose - - - name: Build deb package - run: cargo tauri build -b deb --target aarch64-unknown-linux-gnu --features tauri - name: Upload build artifacts uses: actions/upload-artifact@v3 @@ -226,10 +210,3 @@ jobs: name: build-axolotl-linux-arm64 path: target/aarch64-unknown-linux-gnu/release/axolotl retention-days: 1 - - - name: Upload deb package - uses: actions/upload-artifact@v3 - with: - name: build-axolotl-linux-arm64-deb - path: target/aarch64-unknown-linux-gnu/release/bundle/deb/*.deb - retention-days: 1 diff --git a/.github/workflows/package.yaml b/.github/workflows/package.yaml index 7f3737a1e..098711356 100644 --- a/.github/workflows/package.yaml +++ b/.github/workflows/package.yaml @@ -84,27 +84,61 @@ jobs: runs-on: ubuntu-latest steps: - - name: Set up arm64 packaging environment + - name: Install tools + run: | + sudo apt-get update && sudo apt-get install -y ca-certificates curl debmake + + - name: Install tauri arm64 dependencies run: | - sudo apt update sudo dpkg --add-architecture arm64 - sudo apt install -y debmake debhelper gcc-aarch64-linux-gnu + sudo sed -i '/^deb \[/! s/^deb /deb [arch=amd64] /' /etc/apt/sources.list + echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy main multiverse universe" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-security main multiverse universe" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-backports main multiverse universe" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main multiverse universe" | sudo tee -a /etc/apt/sources.list + + sudo apt-get update && sudo apt-get install -y --no-install-recommends cmake libgtk-3-dev:arm64 libwebkit2gtk-4.1-dev:arm64 librsvg2-dev:arm64 libayatana-appindicator3-dev:arm64 libssl-dev:arm64 libjavascriptcoregtk-4.1-dev:arm64 + + - name: Rust setup + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + targets: aarch64-unknown-linux-gnu + + - name: Rust cache + uses: swatinem/rust-cache@v2 + + - name: Setup C compiler, linker and pkgconfig + run: | + sudo apt-get install -y g++ g++-aarch64-linux-gnu + + echo "HOST_CC=gcc" >> $GITHUB_ENV + echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV + echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV + echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV + echo "PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig" >> $GITHUB_ENV + echo "PKG_CONFIG_SYSROOT_DIR=/" >> $GITHUB_ENV - name: Check out code uses: actions/checkout@v3 - - name: Download axolotl, axolotl-web and build artifacts + - name: Download build artifacts arm64 uses: actions/download-artifact@v3 +# id: download-axolotl-arm64 with: name: build-axolotl-linux-arm64 - path: build-artifacts + path: target/aarch64-unknown-linux-gnu/release/axolotl + + - name: Install cargo-deb + run: cargo install cargo-deb --no-default-features - name: Get git tag version run: | git fetch --all --tags echo "TAG=$(git tag | tail --lines=1)" >> $GITHUB_ENV - - name: Set package version + - name: Set release version run: | echo "RELEASE_VERSION=$(echo ${{ env.TAG }} | sed 's/v//')" >> $GITHUB_ENV @@ -112,38 +146,24 @@ jobs: run: | wget https://github.com/nanu-c/axolotl/archive/v${{ env.RELEASE_VERSION }}.tar.gz --output-document=$GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}.tar.gz mkdir --parents $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/axolotl - cp --recursive $GITHUB_WORKSPACE/build-artifacts/* $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/axolotl/ + cp --recursive $GITHUB_WORKSPACE/target/aarch64-unknown-linux-gnu/release/axolotl/* $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/axolotl/ cp $GITHUB_WORKSPACE/deb/LICENSE $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/LICENSE cd $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }} && debmake --yes --email arno_nuehm@riseup.net --fullname "Arno Nuehm" --monoarch - mkdir --parents $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/usr/share/icons/hicolor/128x128/apps - mkdir --parents $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/usr/share/applications - mkdir --parents $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/usr/bin - mkdir --parents $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/etc/profile.d - cp $GITHUB_WORKSPACE/README.md $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/README.Debian - cp $GITHUB_WORKSPACE/deb/axolotl.png $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/usr/share/icons/hicolor/128x128/apps/axolotl.png - cp $GITHUB_WORKSPACE/deb/axolotl.desktop $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/usr/share/applications/ - cp $GITHUB_WORKSPACE/deb/axolotl.sh $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/etc/profile.d/ - cp $GITHUB_WORKSPACE/deb/axolotl.install $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/ - cp $GITHUB_WORKSPACE/deb/postinst $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/ - cp $GITHUB_WORKSPACE/deb/control $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/control - cp $GITHUB_WORKSPACE/deb/rules $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/rules - mv $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/axolotl/axolotl $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/usr/bin/ + sed -i '3d;4d' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog + awk -i inplace 'NR == 3 {print " * See upstream changelog below."} {print}' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog + echo >> $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog + cat $GITHUB_WORKSPACE/docs/CHANGELOG.md >> $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog + sed -i 's//Aaron /' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/copyright + sed -i 's//https:\/\/github.com\/nanu-c\/axolotl/' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/copyright + cp $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog $GITHUB_WORKSPACE/deb/ + cp $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/copyright $GITHUB_WORKSPACE/deb/ - name: Build package Debian arm64 - run: | - #rm $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/compat - sudo ln -s /usr/lib/x86_64-linux-gnu/libfakeroot/libfakeroot-sysv.so /usr/aarch64-linux-gnu/lib/ - sed -i '4d' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog - sed -e '/Initial/ {' -e 'r $GITHUB_WORKSPACE/docs/CHANGELOG.md' -e 'd' -e '}' -i $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog - sed -i '3,4d' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog - sed -i 's/*/ */g' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog - sed -i 's//aaron@nanu-c.org/' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/copyright - sed -i 's//https:\/\/github.com\/nanu-c\/axolotl/' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/copyright - cd $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }} && debuild -i -us -uc -b -aarm64 + run: cargo deb --target=aarch64-unknown-linux-gnu --no-build - - name: Upload the built Debian package artifact (arm64) + - name: Upload package artifact Debian arm64 uses: actions/upload-artifact@v3 with: - name: Axolotl-Debian-arm64 - path: axolotl_*_arm64.deb + name: Axolotl-Debian-arm64-package + path: target/aarch64-unknown-linux-gnu/debian/axolotl_*_arm64.deb retention-days: 1 diff --git a/Cargo.toml b/Cargo.toml index 0561dd106..8c063df1e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,10 @@ [package] name = "axolotl" -version = "0.1.0" +version = "2.0.0" edition = "2021" +description = """\ +This is a cross-platform Signal client.""" +license = "GPL-3" [source.crates-io] registry = "git://github.com/rust-lang/crates.io-index.git" @@ -53,3 +56,22 @@ ut = ["dep:dbus"] [[example]] name = "dump_db" path = "examples/dump/dump_db.rs" + + +[package.metadata.deb] +maintainer = "Arno Nuehm " +copyright = "2023 Aaron " +license-file = ["deb/copyright", "0"] +depends = "$auto" +extended-description = """\ +Axolotl is built with Rust and has a Vue frontend that runs via tauri.""" +revision = "1" +section = "net" +priority = "optional" +assets = [ + ["target/aarch64-unknown-linux-gnu/release/axolotl/axolotl", "usr/bin/", "755"], + ["README.md", "usr/share/doc/axolotl/README", "644"], + ["deb/axolotl.png", "usr/share/icons/hicolor/128x128/apps/axolotl.png", "644"], + ["deb/axolotl.desktop", "usr/share/applications/", "644"], +] +changelog = "deb/changelog" diff --git a/Makefile b/Makefile index 33aebc3e5..c80123cb4 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ AXOLOTL_VERSION := $(subst v,,$(AXOLOTL_GIT_VERSION)) UNAME_S := $(shell uname -s) HARDWARE_PLATFORM := $(shell uname --machine) CURRENT_DIR := $(shell pwd) +DEBIAN_VERSION := $(shell lsb_release -cs) define APPDATA_TEXT= \\t\t\n\ @@ -172,9 +173,10 @@ build-snap: install-snap: @sudo $(SNAP) install axolotl_$(AXOLOTL_VERSION)_amd64.snap --dangerous -## Debian arm64 building/cross-compiling and packaging -## Please use "make dependencies-deb-arm64(-cc)" before getting the source via -## env GO111MODULE=off go get -d -u github.com/nanu-c/axolotl/ +## Debian arm64 building/cross-compiling and packaging on Debian 'testing' +## Please install the packages git and build-essential before getting the source via +## 'git clone --depth=1 https://github.com/nanu-c/axolotl/' +## and run 'make dependencies-deb-arm64(-cc)' once. check-platform-deb-arm64: ifneq ($(UNAME_S),Linux) @@ -186,28 +188,29 @@ endif ifneq ($(APT),/usr/bin/apt) @echo "OS unsupported - apt not found" && exit 1 endif +ifneq ($(DEBIAN_VERSION),bookworm) + @echo "Debian version not support - 'testing' is needed" && exit 1 +endif dependencies-deb-arm64: check-platform-deb-arm64 - @echo "Installing dependencies for building Axolotl..." + @echo "Installing dependencies for building Axolotl on Debian 'testing' (bookworm)..." @sudo $(APT) update - @sudo $(APT) install curl wget git golang nodejs npm debmake + @sudo $(APT) install --assume-yes curl wget nodejs npm debmake + @sudo $(APT) install --assume-yes --no-install-recommends libgtk-3-dev libjavascriptcoregtk-4.1-dev libsoup-3.0-dev libwebkit2gtk-4.1-dev protobuf-compiler ifneq ($(RUST),${HOME}/.cargo/bin/rustup) - @curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + @curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y endif @$(CARGO_PREFIX)/rustup update @echo "Dependencies installed." -build-deb-arm64: - @echo "Building Axolotl for Debian arm64/aarch64." - @echo "Installing (npm)..." +build-deb-arm64: clean-deb-arm64 + @echo "Building Axolotl for arm64/aarch64 on Debian - Please use 'testing' release!)." + @echo "Installing dependencies (npm)..." @cd $(CURRENT_DIR)/axolotl-web && npm ci @echo "Building (npm)..." @cd $(CURRENT_DIR)/axolotl-web && npm run build - @mkdir --parents $(CURRENT_DIR)/build/linux-arm64/axolotl-web - @echo "Building (go)..." - @cd $(CURRENT_DIR) && go build -o build/linux-arm64/axolotl . - @cp --recursive $(CURRENT_DIR)/axolotl-web/dist $(CURRENT_DIR)/build/linux-arm64/axolotl-web/ - @cp --recursive $(CURRENT_DIR)/guis $(CURRENT_DIR)/build/linux-arm64/ + @echo "Building (rust)..." + $(CARGO_PREFIX)/cargo build --features tauri --release @echo "Building complete." prebuild-package-deb-arm64: package-clean-deb-arm64 @@ -216,7 +219,6 @@ prebuild-package-deb-arm64: package-clean-deb-arm64 @$(WGET) https://github.com/nanu-c/axolotl/archive/v$(AXOLOTL_VERSION).tar.gz --output-document=$(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION).tar.gz # Prepare packaging folder @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/axolotl - @cp --recursive $(CURRENT_DIR)/build/linux-arm64/* $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/axolotl/ @cp $(CURRENT_DIR)/deb/LICENSE $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/LICENSE # Run debmake @cd $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION) && debmake --yes --email arno_nuehm@riseup.net --fullname "Arno Nuehm" --monoarch @@ -224,27 +226,24 @@ prebuild-package-deb-arm64: package-clean-deb-arm64 @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/share/icons/hicolor/128x128/apps @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/share/applications @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/bin - @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/etc/profile.d @cp $(CURRENT_DIR)/README.md $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/README.Debian @cp $(CURRENT_DIR)/deb/axolotl.png $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/share/icons/hicolor/128x128/apps/axolotl.png @cp $(CURRENT_DIR)/deb/axolotl.desktop $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/share/applications/ - @cp $(CURRENT_DIR)/deb/axolotl.sh $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/etc/profile.d/ @cp $(CURRENT_DIR)/deb/axolotl.install $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/ - @cp $(CURRENT_DIR)/deb/postinst $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/ @cp $(CURRENT_DIR)/deb/control $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/control - @mv $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/axolotl/axolotl $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/bin/ + @cp $(CURRENT_DIR)/target/release/axolotl $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/bin/ @echo "Prebuilding Debian package complete." build-package-deb-arm64: @echo "Building Debian package..." # Edit changelog file - @sed -i '4d' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog - @sed -e '/Initial/ {' -e 'r $(CURRENT_DIR)/docs/CHANGELOG.md' -e 'd' -e '}' -i $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog - @sed -i '3,4d' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog - @sed -i 's/*/ */g' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog + @sed -i '3d;4d' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog + @awk -i inplace 'NR == 3 {print " * See upstream changelog below."} {print}' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog + @echo >> $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog + @cat $(CURRENT_DIR)/docs/CHANGELOG.md >> $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog # Edit copyright file - @sed -i 's//aaron@nanu-c.org/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright - @sed -i 's//https:\/\/github.com\/nanu-c\/axolotl/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright + @sed -i 's//Aaron /' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright + @sed -i 's//https:\/\/github.com\/nanu-c\/axolotl/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright # Build Debian package @cd $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION) && debuild -i -us -uc -b @@ -252,25 +251,20 @@ install-deb-arm64: uninstall-deb-arm64 # Use for testing purposes only @echo "Installing Axolotl..." # Copy binary and helpers - @sudo mkdir --parents $(DESTDIR)$(SHARE_PREFIX)/axolotl - @sudo cp --recursive $(CURRENT_DIR)/build/linux-arm64/* $(DESTDIR)$(SHARE_PREFIX)/axolotl/ - @sudo mv $(DESTDIR)$(SHARE_PREFIX)/axolotl/axolotl $(DESTDIR)$(INSTALL_PREFIX)/ + @sudo cp $(CURRENT_DIR)/target/release/build/axolotl $(DESTDIR)$(INSTALL_PREFIX)/ @sudo cp $(CURRENT_DIR)/deb/axolotl.desktop $(DESTDIR)$(SHARE_PREFIX)/applications/ @sudo cp $(CURRENT_DIR)/deb/axolotl.png $(DESTDIR)$(SHARE_PREFIX)/icons/hicolor/128x128/apps/ - @sudo xdg-icon-resource forceupdate - @sudo cp $(CURRENT_DIR)/deb/axolotl.sh /etc/profile.d - @bash -c "source /etc/profile.d/axolotl.sh" + @sudo update-icon-caches $(DESTDIR)$(SHARE_PREFIX)/icons/ @echo "Installation complete." uninstall-deb-arm64: - @sudo rm --recursive --force $(DESTDIR)$(SHARE_PREFIX)/axolotl/ @sudo rm --force $(DESTDIR)$(INSTALL_PREFIX)/axolotl @sudo rm --force $(DESTDIR)$(SHARE_PREFIX)/applications/axolotl.desktop @sudo rm --force $(DESTDIR)$(SHARE_PREFIX)/icons/hicolor/128x128/apps/axolotl.png - @sudo xdg-icon-resource forceupdate - @sudo rm --force /etc/profile.d/axolotl.sh + @sudo update-icon-caches $(DESTDIR)$(SHARE_PREFIX)/icons/ @echo "Removing complete." +## Cross-compiling via Makefile is not working properly at the moment! check-platform-deb-arm64-cc: ifneq ($(UNAME_S),Linux) @echo "Platform unsupported - only available for Linux" && exit 1 @@ -281,15 +275,25 @@ endif ifneq ($(APT),/usr/bin/apt) @echo "OS unsupported - apt not found" && exit 1 endif +ifneq ($(DEBIAN_VERSION),bookworm) + @echo "Debian version not support - 'testing' is needed" && exit 1 +endif dependencies-deb-arm64-cc: check-platform-deb-arm64-cc - @echo "Installing dependencies for cross-compiling Axolotl..." + @echo "Installing dependencies for cross-compiling Axolotl... Be aware: This means Debian 'testing' (bookworm)!" +ifneq ($(DEBIAN_VERSION),bookworm) + @echo "deb http://deb.debian.org/debian testing main contrib non-free" | sudo tee -a /etc/apt/sources.list + @echo "deb-src http://deb.debian.org/debian testing main contrib non-free" | sudo tee -a /etc/apt/sources.list + @sudo $(APT) update + @sudo $(APT) --assume-yes upgrade + @sudo $(APT) --assume-yes full-upgrade +endif @sudo $(APT) update @sudo dpkg --add-architecture arm64 - @sudo $(APT) install curl wget git nodejs npm gcc-aarch64-linux-gnu debmake linux-libc-dev-arm64-cross - @sudo apt -t $(dpkg --status tzdata|grep Provides|cut -f2 -d'-')-backports install golang + @sudo $(APT) install --assume-yes curl wget nodejs npm gcc-aarch64-linux-gnu linux-libc-dev-arm64-cross debmake + @sudo $(APT) install --assume-yes --no-install-recommends libglib2.0-dev:arm64 libgtk-3-dev:arm64 libjavascriptcoregtk-4.1-dev:arm64 protobuf-compiler:arm64 libwebkit2gtk-4.1-dev:arm64 librsvg2-dev:arm64 libayatana-appindicator3-dev:arm64 libssl-dev:arm64 libjavascriptcoregtk-4.1-dev:arm64 g++ g++-aarch64-linux-gnu ifneq ($(RUST),${HOME}/.cargo/bin/rustup) - @curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + @curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y endif @$(CARGO_PREFIX)/rustup update ifneq ($(CROSS),${HOME}/.cargo/bin/cross) @@ -297,28 +301,31 @@ ifneq ($(CROSS),${HOME}/.cargo/bin/cross) endif ifneq ($(DOCKER),/usr/bin/docker) @curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg - @echo "deb [arch=$(shell dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(shell lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - @sudo apt update - @sudo apt install docker-ce docker-ce-cli containerd.io + @echo "deb [arch=$(shell dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(DEBIAN_VERSION) stable" | sudo tee -a /etc/apt/sources.list.d/docker.list > /dev/null + @sudo $(APT) update + @sudo $(APT) install --assume-yes docker-ce docker-ce-cli containerd.io @sudo usermod -aG docker ${USER} @echo "Dependencies installed." @newgrp docker # This ends the current bash an starts a new one with docker added to groups. endif @echo "Dependencies installed." -build-deb-arm64-cc: - @echo "Cross-compiling Axolotl for Debian arm64/aarch64." - @echo "Installing (npm)..." +build-deb-arm64-cc: clean-deb-arm64 + @echo "Cross-compiling Axolotl for arm64/aarch64 on Debian 'testing'." + @echo "Installing dependencies (npm)..." @cd $(CURRENT_DIR)/axolotl-web && npm --target_arch=arm64 ci @echo "Building (npm)..." @cd $(CURRENT_DIR)/axolotl-web && npm --target_arch=arm64 run build - @mkdir --parents $(CURRENT_DIR)/build/linux-arm64/axolotl-web - @echo "Building (go)..." - @cd $(CURRENT_DIR) && env GOOS=linux GOARCH=arm64 CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig go build -o build/linux-arm64/axolotl . - @cp --recursive $(CURRENT_DIR)/axolotl-web/dist $(CURRENT_DIR)/build/linux-arm64/axolotl-web/ - @cp --recursive $(CURRENT_DIR)/guis $(CURRENT_DIR)/build/linux-arm64/ @echo "Building (rust)..." @sudo systemctl start docker + @HOST_CC=gcc + @CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc + @CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++ + @CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc + @PKG_CONFIG_ALLOW_CROSS=1 + @PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig + @PKG_CONFIG_SYSROOT_DIR=/ + @$(CARGO_PREFIX)/cross build --features tauri --release --target aarch64-unknown-linux-gnu @echo "Cross-compiling complete." prebuild-package-deb-arm64-cc: package-clean-deb-arm64 @@ -326,8 +333,7 @@ prebuild-package-deb-arm64-cc: package-clean-deb-arm64 # Get the source tarball @$(WGET) https://github.com/nanu-c/axolotl/archive/v$(AXOLOTL_VERSION).tar.gz --output-document=$(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION).tar.gz # Prepare packaging folder - @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/axolotl - @cp --recursive $(CURRENT_DIR)/build/linux-arm64/* $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/axolotl/ + @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/ @cp $(CURRENT_DIR)/deb/LICENSE $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/LICENSE # Run debmake @cd $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION) && debmake --yes --email arno_nuehm@riseup.net --fullname "Arno Nuehm" --monoarch @@ -335,27 +341,24 @@ prebuild-package-deb-arm64-cc: package-clean-deb-arm64 @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/share/icons/hicolor/128x128/apps @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/share/applications @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/bin - @mkdir --parents $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/etc/profile.d @cp $(CURRENT_DIR)/README.md $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/README.Debian @cp $(CURRENT_DIR)/deb/axolotl.png $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/share/icons/hicolor/128x128/apps/axolotl.png @cp $(CURRENT_DIR)/deb/axolotl.desktop $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/share/applications/ - @cp $(CURRENT_DIR)/deb/axolotl.sh $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/etc/profile.d/ @cp $(CURRENT_DIR)/deb/axolotl.install $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/ - @cp $(CURRENT_DIR)/deb/postinst $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/ @cp $(CURRENT_DIR)/deb/control $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/control - @mv $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/axolotl/axolotl $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/bin/ + @cp $(CURRENT_DIR)/target/aarch64-unknown-linux-gnu/release/axolotl $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/usr/bin/ @echo "Prebuilding cross-compiled Debian package complete." build-package-deb-arm64-cc: @echo "Building cross-compiled Debian package..." # Edit changelog file - @sed -i '4d' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog - @sed -e '/Initial/ {' -e 'r $(CURRENT_DIR)/docs/CHANGELOG.md' -e 'd' -e '}' -i $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog - @sed -i '3,4d' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog - @sed -i 's/*/ */g' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog + @sed -i '3d;4d' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog + @awk -i inplace 'NR == 3 {print " * See upstream changelog below."} {print}' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog + @echo >> $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog + @cat $(CURRENT_DIR)/docs/CHANGELOG.md >> $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/changelog # Edit copyright file - @sed -i 's//aaron@nanu-c.org/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright - @sed -i 's//https:\/\/github.com\/nanu-c\/axolotl/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright + @sed -i 's//Aaron /' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright + @sed -i 's//https:\/\/github.com\/nanu-c\/axolotl/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright # Build Debian package @cd $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION) && debuild -i -us -uc -b -aarm64 @@ -371,7 +374,7 @@ uninstall-deb-dependencies: @rustup self uninstall uninstall-deb-dependencies-cc: - @sudo apt purge curl wget git golang nodejs npm gcc-aarch64-linux-gnu debmake linux-libc-dev-arm64-cross docker-ce docker-ce-cli containerd.io + @sudo apt purge curl wget git golang nodejs npm gcc-aarch64-linux-gnu debmake linux-libc-dev-arm64-cross docker-ce docker-ce-cli containerd.io libglib2.0-dev:arm64 libgtk-3-dev:arm64 libjavascriptcoregtk-4.1-dev:arm64 protobuf-compiler:arm64 libwebkit2gtk-4.1-dev:arm64 librsvg2-dev:arm64 libayatana-appindicator3-dev:arm64 libssl-dev:arm64 libjavascriptcoregtk-4.1-dev:arm64 g++ g++-aarch64-linux-gnu @sudo apt autoremove && sudo apt autoclean @rustup self uninstall @sudo rm /etc/apt/sources.list.d/docker.list diff --git a/deb/axolotl.desktop b/deb/axolotl.desktop index fc534e1d4..d7ca921da 100644 --- a/deb/axolotl.desktop +++ b/deb/axolotl.desktop @@ -2,9 +2,7 @@ Type=Application Name=Axolotl GenericName=Signal Chat Client -Path=/usr/share/axolotl/ -Exec=axolotl -electron-flag no-ozone -#Exec=axolotl -e qt +Exec=axolotl -m tauri Icon=axolotl Terminal=false Categories=Network;Chat;InstantMessaging diff --git a/deb/axolotl.install b/deb/axolotl.install index fdbdbd2b7..617920708 100644 --- a/deb/axolotl.install +++ b/deb/axolotl.install @@ -1,3 +1 @@ -axolotl/ /usr/share usr/ / -etc/ / diff --git a/deb/axolotl.sh b/deb/axolotl.sh deleted file mode 100644 index 76951553c..000000000 --- a/deb/axolotl.sh +++ /dev/null @@ -1,3 +0,0 @@ -# Set environment variables for Axolotl -export AXOLOTL_WEB_DIR=/usr/share/axolotl/axolotl-web/dist -export AXOLOTL_GUI_DIR=/usr/share/axolotl/ diff --git a/deb/control b/deb/control index bc6528adf..8c733d388 100644 --- a/deb/control +++ b/deb/control @@ -9,5 +9,5 @@ Homepage: https://github.com/nanu-c/axolotl Package: axolotl Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends} -Description: This program is a complete cross-platform Signal client. - It is built upon go textsecure and a Vue frontend that runs via electron. +Description: This is a cross-platform Signal client. + Axolotl is built with Rust and has a Vue frontend that runs via tauri. diff --git a/deb/postinst b/deb/postinst deleted file mode 100644 index 6784b1370..000000000 --- a/deb/postinst +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# postinst script for axolotl - -set -e - -bash -c "source /etc/profile.d/axolotl.sh" -exit 0 diff --git a/deb/rules b/deb/rules deleted file mode 100644 index 1dbe5c74b..000000000 --- a/deb/rules +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/make -f -# You must remove unused comment lines for the released package. -#export DH_VERBOSE = 1 -#export DEB_BUILD_MAINT_OPTIONS = hardening=+all -#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic -#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed - -export LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib/ - -%: - dh $@