From 6ca1a1d6799474f8ca977b93ab630af7ace879c2 Mon Sep 17 00:00:00 2001 From: Victorio Nascimento <155357371+Vic-Nas@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:45:28 -0400 Subject: Add Linux GUI installer via Wine (#3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Linux GUI installer via Wine * Fix launcher creation and add BTF_RELAY env var support * Pool server, Linux GUI, unified binary, README update * Root Makefile: make linux / make windows, cleaner README * Remove headless.cpp * Fix XPM color count mismatch causing toolbar image errors on Linux * XPM icons: same code on Windows and Linux, no ifdefs around image loading * Fix GTK icon crash and Linux printf format * btfrv: 10s socket timeout on relay connects * Faster peer discovery: more dials per pass, shorter backoff and sleep * Parallel btf peer connections * Fix GetMyExternalIP - was disabled, now uses modern IP echo services * Fix tunnel disconnect on idle and restore external IP detection * Filter stale Nostr descriptors * Sort peers by freshness, fresh first * Pool: add .btf Stratum listener — miners connect via rendezvous, no port forwarding needed * btf pool: self-replacing listeners, one per relay, no queuing between miners * Mining modes: solo/operator/participant — pool server on-demand, participant Stratum client * Status bar: show external IP and .btf address * README: clean rewrite, concept-first, minimal * make linux produces AppImage * make linux produces AppImage * Pool dashboard: connect instructions, tabs, share bars * Perf fixes: GetMyExternalIP threaded, btf listener counted * Perf fixes: GetMyExternalIP threaded, btf listener counted * Fix pool payouts: defer until coinbase maturity * Pool: clean mode switching, IP warning * Pool: clean mode switching * Fix gPoolRunning: remove static * AppImage: use real icon from bitcoin.ico * Fix exit crash; Mining menu * Fix exit crash; Mining menu * Fix exit crash; Mining menu * Fix exit crash; Mining menu * Fix exit crash; Mining menu * Windows build: use mingw32-make * Windows build: simpler make invocation * Add deps-windows target * Windows build fixes * Windows build fixes * Windows makefile: fix obj dir * Windows: output to repo root * Windows: bundle DLLs into zip * Replace wxWidgets with ImGui+GLFW: same build on Linux and Windows * Fix %I64d that slipped back through rebase (main.h, net.h) * MinGW: add _mkdir shim for non-MSVC Windows; fix %I64d * Fix gPoolRunning extern outside ifndef _WIN32 * Remove -lboost_system: boost is header-only in this codebase * Status bar: copy buttons for IP and .btf address * Windows: add app icon via windres, strip wx stuff from rc file * Clean GUI: single Options menu item, bigger font, better spacing, cleaner options dialog; update README * GUI: embed Roboto font at 16px for clear readability on all platforms * Windows: windres depends on obj dir target * Fix balance hidden off-screen: put on own line below address bar * Windows: inline mkdir in every rule, remove dir target that confused make * Windows: move all target to top so it's the default rule * Fix pool server not starting: always start when operator selected, re-sync dialog state on open * Write debug.log to data directory (AppData/Roaming/Bitflash on Windows) * Participant miner: use wallet address as username so payouts go to wallet * Add .gitattributes to lock LF line endings, prevent CRLF drift * Refactor pool mining to btf-only transport * Persist pool settings and startup wiring * Prune stale peers and expose pool queries * Fix build regressions and add CLI mode/arg parity * Fix rpc miner stats declaration order * Centralize pool runtime extern declarations * Separate operator/participant dashboards and restore peer stats * Add live telemetry strip and clearer per-mode runtime metrics * Reduce mining dashboard clutter and remove manual pool entry * Count only authorized pool miners * Seed initial pool job on startup * Use a real share target for pool work * Switch pool accounting to round-based shares * Fix nostr pool announcer stats call sites * Fix pool stats definition order * Improve pool worker status display * Add mutex include for participant status * Replace ImClamp in dashboard layout * Clarify participant work status * Log participant status transitions * Reduce peer discovery log noise * Add participant status badge * Track participant auth acknowledgements * Log and validate pool job delivery --------- Co-authored-by: Bitflash Pool Dev --- Makefile | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 Makefile (limited to 'Makefile') diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7d655ff --- /dev/null +++ b/Makefile @@ -0,0 +1,148 @@ +# Bitflash — top-level build +# +# make linux build Bitflash-*-x86_64.AppImage +# make windows build Bitflash-*-windows.zip (from MSYS2 UCRT64) +# make clean remove build artifacts + +ROOT := $(shell pwd) +NPROC := $(shell nproc 2>/dev/null || echo 2) +SUDO := $(shell [ "$$(id -u)" = "0" ] && echo "" || echo "sudo") +VERSION := 1.1.0 + +# ---- Linux ---------------------------------------------------------------- + +linux: deps-linux + $(MAKE) -C src -f Makefile -j$(NPROC) + strip src/bitflash + $(MAKE) -f Makefile appimage + +deps-linux: deps-apt deps-secp256k1 deps-randomx + +deps-apt: + @if command -v apt-get >/dev/null 2>&1; then \ + $(SUDO) apt-get install -y build-essential cmake git pkg-config autoconf \ + libtool libssl-dev libdb5.3++-dev libsodium-dev nlohmann-json3-dev \ + libboost-system-dev libglfw3-dev libgl-dev; \ + else \ + echo "Not an apt system — install: g++ cmake git autoconf libtool"; \ + echo " libssl libdb++ libsodium nlohmann-json boost glfw3 opengl"; \ + fi + +deps-secp256k1: + @if [ ! -f /usr/local/lib/libsecp256k1.a ]; then \ + echo "==> building libsecp256k1"; \ + rm -rf $(ROOT)/secp256k1-build; \ + git clone --depth 1 https://github.com/bitcoin-core/secp256k1 $(ROOT)/secp256k1-build; \ + cd $(ROOT)/secp256k1-build && ./autogen.sh && \ + ./configure --enable-module-schnorrsig --enable-module-extrakeys \ + --disable-shared --with-pic --disable-benchmark --disable-tests && \ + make -j$(NPROC) && $(SUDO) make install && $(SUDO) ldconfig; \ + echo "==> libsecp256k1 done"; \ + else \ + echo "==> libsecp256k1 already installed"; \ + fi + +deps-randomx: + @if [ ! -f $(HOME)/RandomX/build/librandomx.a ]; then \ + echo "==> building RandomX"; \ + rm -rf $(HOME)/RandomX; \ + git clone --depth 1 https://github.com/tevador/RandomX $(HOME)/RandomX; \ + mkdir -p $(HOME)/RandomX/build; \ + cd $(HOME)/RandomX/build && cmake .. -DCMAKE_BUILD_TYPE=Release && \ + make -j$(NPROC) randomx; \ + echo "==> RandomX done"; \ + else \ + echo "==> RandomX already built"; \ + fi + +appimage: src/bitflash + @echo "==> building AppImage" + @if [ ! -x /tmp/appimagetool ]; then \ + wget -q "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" \ + -O /tmp/appimagetool && chmod +x /tmp/appimagetool; \ + fi + @rm -rf /tmp/bitflash.AppDir + @mkdir -p /tmp/bitflash.AppDir/usr/bin \ + /tmp/bitflash.AppDir/usr/lib \ + /tmp/bitflash.AppDir/usr/share/applications \ + /tmp/bitflash.AppDir/usr/share/icons/hicolor/256x256/apps + @cp src/bitflash /tmp/bitflash.AppDir/usr/bin/bitflash + @printf '#!/bin/sh\nHERE="$$(dirname "$$(readlink -f "$$0")")"\nexport LD_LIBRARY_PATH="$$HERE/usr/lib:$$LD_LIBRARY_PATH"\nexec "$$HERE/usr/bin/bitflash" "$$@"\n' \ + > /tmp/bitflash.AppDir/AppRun && chmod +x /tmp/bitflash.AppDir/AppRun + @printf '[Desktop Entry]\nName=Bitflash\nExec=bitflash\nIcon=bitflash\nType=Application\nCategories=Finance;\n' \ + > /tmp/bitflash.AppDir/bitflash.desktop + @cp /tmp/bitflash.AppDir/bitflash.desktop \ + /tmp/bitflash.AppDir/usr/share/applications/ + @python3 -c "\ +from PIL import Image; \ +ico = Image.open('src/rc/bitcoin.ico'); \ +img = ico.convert('RGBA'); \ +img.save('/tmp/bitflash.AppDir/bitflash.png'); \ +import shutil; shutil.copy('/tmp/bitflash.AppDir/bitflash.png', \ +'/tmp/bitflash.AppDir/usr/share/icons/hicolor/256x256/apps/bitflash.png')" + @for lib in libsodium.so.23 libdb_cxx-5.3.so libglfw.so.3; do \ + path=$$(ldconfig -p | grep " $$lib " | awk '{print $$NF}' | head -1); \ + [ -z "$$path" ] && path=$$(find /usr/lib /lib -name "$$lib" 2>/dev/null | head -1); \ + [ -n "$$path" ] && cp -L "$$path" /tmp/bitflash.AppDir/usr/lib/ && echo " bundled $$lib" || echo " missing $$lib"; \ + done + @ARCH=x86_64 /tmp/appimagetool --no-appstream /tmp/bitflash.AppDir \ + $(ROOT)/Bitflash-$(VERSION)-x86_64.AppImage 2>&1 | grep -E "^Built|^Error" || true + @echo "Built: Bitflash-$(VERSION)-x86_64.AppImage" + +# ---- Windows (MSYS2 UCRT64) ----------------------------------------------- + +deps-windows: + pacman -S --noconfirm --needed \ + mingw-w64-ucrt-x86_64-gcc \ + mingw-w64-ucrt-x86_64-make \ + mingw-w64-ucrt-x86_64-glfw \ + mingw-w64-ucrt-x86_64-openssl \ + mingw-w64-ucrt-x86_64-db \ + mingw-w64-ucrt-x86_64-libsodium \ + mingw-w64-ucrt-x86_64-nlohmann-json \ + mingw-w64-ucrt-x86_64-boost \ + mingw-w64-ucrt-x86_64-cmake \ + autoconf automake libtool + @if [ ! -f deps/lib/libsecp256k1.a ]; then \ + rm -rf secp256k1-build; \ + git clone --depth 1 https://github.com/bitcoin-core/secp256k1 secp256k1-build; \ + cd secp256k1-build && ./autogen.sh && \ + ./configure --prefix=$(ROOT)/deps \ + --enable-module-schnorrsig --enable-module-extrakeys \ + --disable-shared --with-pic --disable-benchmark --disable-tests && \ + make install; \ + echo "==> secp256k1 done"; \ + else \ + echo "==> secp256k1 already built"; \ + fi + @if [ ! -f RandomX/build/librandomx.a ]; then \ + rm -rf RandomX; \ + git clone --depth 1 https://github.com/tevador/RandomX; \ + mkdir -p RandomX/build; \ + cd RandomX/build && cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release && \ + make randomx; \ + echo "==> RandomX done"; \ + else \ + echo "==> RandomX already built"; \ + fi + +windows: deps-windows + cd src && make -f makefile.mingw + @rm -rf Bitflash-$(VERSION)-windows + @mkdir -p Bitflash-$(VERSION)-windows + @cp src/bitflash.exe Bitflash-$(VERSION)-windows/Bitflash.exe + @ldd src/bitflash.exe | grep ucrt64 | awk '{print $$3}' | \ + xargs -I{} cp {} Bitflash-$(VERSION)-windows/ 2>/dev/null || true + @zip -r Bitflash-$(VERSION)-windows.zip Bitflash-$(VERSION)-windows/ + @echo "Built: Bitflash-$(VERSION)-windows.zip" + +# ---- Clean ---------------------------------------------------------------- + +clean: + $(MAKE) -C src -f Makefile clean 2>/dev/null || true + cd src && make -f makefile.mingw clean 2>/dev/null || true + rm -f Bitflash-*.AppImage Bitflash-*.zip + rm -rf Bitflash-*-windows + +.PHONY: linux windows clean appimage \ + deps-linux deps-windows deps-apt deps-secp256k1 deps-randomx -- cgit v1.2.3