Skip to content

Commit

Permalink
Update Makefile
Browse files Browse the repository at this point in the history
  • Loading branch information
nuehm-arno committed Jun 22, 2023
1 parent 80687d1 commit 15d3f73
Showing 1 changed file with 68 additions and 63 deletions.
131 changes: 68 additions & 63 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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<release version="$(NEW_VERSION)" date="$(shell date --rfc-3339='date')">\n\
Expand Down Expand Up @@ -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)
Expand All @@ -186,91 +188,84 @@ 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
@echo "Prebuilding Debian package..."
# 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
@$(WGET) https://github.com/nanu-c/axolotl/archive/v1.6.0.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 [email protected] --fullname "Arno Nuehm" --monoarch
# Create target folders and copy additional files into package folder
@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' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog
@sed -e '3 {r $GITHUB_WORKSPACE/docs/CHANGELOG.md' -e 'd}' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_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
# Edit copyright file
@sed -i 's/<preferred name and address to reach the upstream project>/[email protected]/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright
@sed -i 's/<url:\/\/example.com>/https:\/\/github.com\/nanu-c\/axolotl/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright
#@sed -i 's/<preferred name and address to reach the upstream project>/[email protected]/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright
@sed -i ':a;N;$!ba;s/<preferred name and address to reach the upstream project>/Aaron <[email protected]>/g' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog
@sed -i 's/<url:\/\/example.com>/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

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
Expand All @@ -281,81 +276,91 @@ 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)
@$(CARGO_PREFIX)/cargo install 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
@echo "Prebuilding cross-compiled Debian package..."
# 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 [email protected] --fullname "Arno Nuehm" --monoarch
# Create target folders and copy additional files into package folder
@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' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog
@sed -e '3 {r $GITHUB_WORKSPACE/docs/CHANGELOG.md' -e 'd}' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_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
# Edit copyright file
@sed -i 's/<preferred name and address to reach the upstream project>/[email protected]/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright
@sed -i 's/<url:\/\/example.com>/https:\/\/github.com\/nanu-c\/axolotl/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright
#@sed -i 's/<preferred name and address to reach the upstream project>/[email protected]/' $(CURRENT_DIR)/axolotl-$(AXOLOTL_VERSION)/debian/copyright
@sed -i ':a;N;$!ba;s/<preferred name and address to reach the upstream project>/Aaron <[email protected]>/g' $GITHUB_WORKSPACE/axolotl-${{ env.RELEASE_VERSION }}/debian/changelog
@sed -i 's/<url:\/\/example.com>/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

Expand All @@ -371,7 +376,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

0 comments on commit 15d3f73

Please sign in to comment.