upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile148
1 files changed, 148 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..7d655ff
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,148 @@
1# Bitflash — top-level build
2#
3# make linux build Bitflash-*-x86_64.AppImage
4# make windows build Bitflash-*-windows.zip (from MSYS2 UCRT64)
5# make clean remove build artifacts
6
7ROOT := $(shell pwd)
8NPROC := $(shell nproc 2>/dev/null || echo 2)
9SUDO := $(shell [ "$$(id -u)" = "0" ] && echo "" || echo "sudo")
10VERSION := 1.1.0
11
12# ---- Linux ----------------------------------------------------------------
13
14linux: deps-linux
15 $(MAKE) -C src -f Makefile -j$(NPROC)
16 strip src/bitflash
17 $(MAKE) -f Makefile appimage
18
19deps-linux: deps-apt deps-secp256k1 deps-randomx
20
21deps-apt:
22 @if command -v apt-get >/dev/null 2>&1; then \
23 $(SUDO) apt-get install -y build-essential cmake git pkg-config autoconf \
24 libtool libssl-dev libdb5.3++-dev libsodium-dev nlohmann-json3-dev \
25 libboost-system-dev libglfw3-dev libgl-dev; \
26 else \
27 echo "Not an apt system — install: g++ cmake git autoconf libtool"; \
28 echo " libssl libdb++ libsodium nlohmann-json boost glfw3 opengl"; \
29 fi
30
31deps-secp256k1:
32 @if [ ! -f /usr/local/lib/libsecp256k1.a ]; then \
33 echo "==> building libsecp256k1"; \
34 rm -rf $(ROOT)/secp256k1-build; \
35 git clone --depth 1 https://github.com/bitcoin-core/secp256k1 $(ROOT)/secp256k1-build; \
36 cd $(ROOT)/secp256k1-build && ./autogen.sh && \
37 ./configure --enable-module-schnorrsig --enable-module-extrakeys \
38 --disable-shared --with-pic --disable-benchmark --disable-tests && \
39 make -j$(NPROC) && $(SUDO) make install && $(SUDO) ldconfig; \
40 echo "==> libsecp256k1 done"; \
41 else \
42 echo "==> libsecp256k1 already installed"; \
43 fi
44
45deps-randomx:
46 @if [ ! -f $(HOME)/RandomX/build/librandomx.a ]; then \
47 echo "==> building RandomX"; \
48 rm -rf $(HOME)/RandomX; \
49 git clone --depth 1 https://github.com/tevador/RandomX $(HOME)/RandomX; \
50 mkdir -p $(HOME)/RandomX/build; \
51 cd $(HOME)/RandomX/build && cmake .. -DCMAKE_BUILD_TYPE=Release && \
52 make -j$(NPROC) randomx; \
53 echo "==> RandomX done"; \
54 else \
55 echo "==> RandomX already built"; \
56 fi
57
58appimage: src/bitflash
59 @echo "==> building AppImage"
60 @if [ ! -x /tmp/appimagetool ]; then \
61 wget -q "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" \
62 -O /tmp/appimagetool && chmod +x /tmp/appimagetool; \
63 fi
64 @rm -rf /tmp/bitflash.AppDir
65 @mkdir -p /tmp/bitflash.AppDir/usr/bin \
66 /tmp/bitflash.AppDir/usr/lib \
67 /tmp/bitflash.AppDir/usr/share/applications \
68 /tmp/bitflash.AppDir/usr/share/icons/hicolor/256x256/apps
69 @cp src/bitflash /tmp/bitflash.AppDir/usr/bin/bitflash
70 @printf '#!/bin/sh\nHERE="$$(dirname "$$(readlink -f "$$0")")"\nexport LD_LIBRARY_PATH="$$HERE/usr/lib:$$LD_LIBRARY_PATH"\nexec "$$HERE/usr/bin/bitflash" "$$@"\n' \
71 > /tmp/bitflash.AppDir/AppRun && chmod +x /tmp/bitflash.AppDir/AppRun
72 @printf '[Desktop Entry]\nName=Bitflash\nExec=bitflash\nIcon=bitflash\nType=Application\nCategories=Finance;\n' \
73 > /tmp/bitflash.AppDir/bitflash.desktop
74 @cp /tmp/bitflash.AppDir/bitflash.desktop \
75 /tmp/bitflash.AppDir/usr/share/applications/
76 @python3 -c "\
77from PIL import Image; \
78ico = Image.open('src/rc/bitcoin.ico'); \
79img = ico.convert('RGBA'); \
80img.save('/tmp/bitflash.AppDir/bitflash.png'); \
81import shutil; shutil.copy('/tmp/bitflash.AppDir/bitflash.png', \
82'/tmp/bitflash.AppDir/usr/share/icons/hicolor/256x256/apps/bitflash.png')"
83 @for lib in libsodium.so.23 libdb_cxx-5.3.so libglfw.so.3; do \
84 path=$$(ldconfig -p | grep " $$lib " | awk '{print $$NF}' | head -1); \
85 [ -z "$$path" ] && path=$$(find /usr/lib /lib -name "$$lib" 2>/dev/null | head -1); \
86 [ -n "$$path" ] && cp -L "$$path" /tmp/bitflash.AppDir/usr/lib/ && echo " bundled $$lib" || echo " missing $$lib"; \
87 done
88 @ARCH=x86_64 /tmp/appimagetool --no-appstream /tmp/bitflash.AppDir \
89 $(ROOT)/Bitflash-$(VERSION)-x86_64.AppImage 2>&1 | grep -E "^Built|^Error" || true
90 @echo "Built: Bitflash-$(VERSION)-x86_64.AppImage"
91
92# ---- Windows (MSYS2 UCRT64) -----------------------------------------------
93
94deps-windows:
95 pacman -S --noconfirm --needed \
96 mingw-w64-ucrt-x86_64-gcc \
97 mingw-w64-ucrt-x86_64-make \
98 mingw-w64-ucrt-x86_64-glfw \
99 mingw-w64-ucrt-x86_64-openssl \
100 mingw-w64-ucrt-x86_64-db \
101 mingw-w64-ucrt-x86_64-libsodium \
102 mingw-w64-ucrt-x86_64-nlohmann-json \
103 mingw-w64-ucrt-x86_64-boost \
104 mingw-w64-ucrt-x86_64-cmake \
105 autoconf automake libtool
106 @if [ ! -f deps/lib/libsecp256k1.a ]; then \
107 rm -rf secp256k1-build; \
108 git clone --depth 1 https://github.com/bitcoin-core/secp256k1 secp256k1-build; \
109 cd secp256k1-build && ./autogen.sh && \
110 ./configure --prefix=$(ROOT)/deps \
111 --enable-module-schnorrsig --enable-module-extrakeys \
112 --disable-shared --with-pic --disable-benchmark --disable-tests && \
113 make install; \
114 echo "==> secp256k1 done"; \
115 else \
116 echo "==> secp256k1 already built"; \
117 fi
118 @if [ ! -f RandomX/build/librandomx.a ]; then \
119 rm -rf RandomX; \
120 git clone --depth 1 https://github.com/tevador/RandomX; \
121 mkdir -p RandomX/build; \
122 cd RandomX/build && cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release && \
123 make randomx; \
124 echo "==> RandomX done"; \
125 else \
126 echo "==> RandomX already built"; \
127 fi
128
129windows: deps-windows
130 cd src && make -f makefile.mingw
131 @rm -rf Bitflash-$(VERSION)-windows
132 @mkdir -p Bitflash-$(VERSION)-windows
133 @cp src/bitflash.exe Bitflash-$(VERSION)-windows/Bitflash.exe
134 @ldd src/bitflash.exe | grep ucrt64 | awk '{print $$3}' | \
135 xargs -I{} cp {} Bitflash-$(VERSION)-windows/ 2>/dev/null || true
136 @zip -r Bitflash-$(VERSION)-windows.zip Bitflash-$(VERSION)-windows/
137 @echo "Built: Bitflash-$(VERSION)-windows.zip"
138
139# ---- Clean ----------------------------------------------------------------
140
141clean:
142 $(MAKE) -C src -f Makefile clean 2>/dev/null || true
143 cd src && make -f makefile.mingw clean 2>/dev/null || true
144 rm -f Bitflash-*.AppImage Bitflash-*.zip
145 rm -rf Bitflash-*-windows
146
147.PHONY: linux windows clean appimage \
148 deps-linux deps-windows deps-apt deps-secp256k1 deps-randomx