commit 6ff7ab0f398beb90d721dac7df715a203c44cd72
parent d87e90042d0529162727382a7713c2bd98be4626
Author: Arun Prakash Jana <engineerarun@gmail.com>
Date: Wed, 4 Feb 2026 09:28:56 +0530
Generate musl static binary with Emoji
Diffstat:
2 files changed, 53 insertions(+), 23 deletions(-)
diff --git a/Makefile b/Makefile
@@ -293,43 +293,65 @@ sign:
upload-local: sign static musl
$(eval ID=$(shell curl -s 'https://api.github.com/repos/jarun/nnn/releases/tags/v$(VERSION)' | jq .id))
+ $(eval PKG_STATIC=$(BIN)-static)
+ $(eval PKG_ICONS=$(BIN)-icons-static)
+ $(eval PKG_NERD=$(BIN)-nerd-static)
+ $(eval PKG_EMOJI=$(BIN)-emoji-static)
+ $(eval PKG_MUSL=$(BIN)-musl-static)
+ $(eval PKG_MUSL_EMOJI=$(BIN)-musl-emoji-static)
+ $(eval ARCH=x86_64)
+
# upload sign file
curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=nnn-$(VERSION).tar.gz.sig' \
-H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/pgp-signature' \
--upload-file nnn-$(VERSION).tar.gz.sig
+
# upx compress all static binaries
- upx -qqq $(BIN)-static
- upx -qqq $(BIN)-icons-static
- upx -qqq $(BIN)-nerd-static
- upx -qqq $(BIN)-emoji-static
+ upx -qqq $(PKG_STATIC)
+ upx -qqq $(PKG_ICONS)
+ upx -qqq $(PKG_NERD)
+ upx -qqq $(PKG_EMOJI)
+ upx -qqq $(PKG_MUSL)
+ upx -qqq $(PKG_MUSL_EMOJI)
+
# upload static binary
- tar -zcf $(BIN)-static-$(VERSION).x86_64.tar.gz $(BIN)-static
- curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(BIN)-static-$(VERSION).x86_64.tar.gz' \
+ tar -zcf $(PKG_STATIC)-$(VERSION).$(ARCH).tar.gz $(PKG_STATIC)
+ curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(PKG_STATIC)-$(VERSION).$(ARCH).tar.gz' \
-H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
- --upload-file $(BIN)-static-$(VERSION).x86_64.tar.gz
+ --upload-file $(PKG_STATIC)-$(VERSION).$(ARCH).tar.gz
+
# upload icons-in-terminal compiled static binary
- tar -zcf $(BIN)-icons-static-$(VERSION).x86_64.tar.gz $(BIN)-icons-static
- curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(BIN)-icons-static-$(VERSION).x86_64.tar.gz' \
+ tar -zcf $(PKG_ICONS)-$(VERSION).$(ARCH).tar.gz $(PKG_ICONS)
+ curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(PKG_ICONS)-$(VERSION).$(ARCH).tar.gz' \
-H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
- --upload-file $(BIN)-icons-static-$(VERSION).x86_64.tar.gz
+ --upload-file $(PKG_ICONS)-$(VERSION).$(ARCH).tar.gz
+
# upload patched nerd font compiled static binary
- tar -zcf $(BIN)-nerd-static-$(VERSION).x86_64.tar.gz $(BIN)-nerd-static
- curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(BIN)-nerd-static-$(VERSION).x86_64.tar.gz' \
+ tar -zcf $(PKG_NERD)-$(VERSION).$(ARCH).tar.gz $(PKG_NERD)
+ curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(PKG_NERD)-$(VERSION).$(ARCH).tar.gz' \
-H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
- --upload-file $(BIN)-nerd-static-$(VERSION).x86_64.tar.gz
+ --upload-file $(PKG_NERD)-$(VERSION).$(ARCH).tar.gz
+
# upload emoji compiled static binary
- tar -zcf $(BIN)-emoji-static-$(VERSION).x86_64.tar.gz $(BIN)-emoji-static
- curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(BIN)-emoji-static-$(VERSION).x86_64.tar.gz' \
+ tar -zcf $(PKG_EMOJI)-$(VERSION).$(ARCH).tar.gz $(PKG_EMOJI)
+ curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(PKG_EMOJI)-$(VERSION).$(ARCH).tar.gz' \
-H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
- --upload-file $(BIN)-emoji-static-$(VERSION).x86_64.tar.gz
+ --upload-file $(PKG_EMOJI)-$(VERSION).$(ARCH).tar.gz
+
# upload musl static binary
- tar -zcf $(BIN)-musl-static-$(VERSION).x86_64.tar.gz $(BIN)-musl-static
- curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(BIN)-musl-static-$(VERSION).x86_64.tar.gz' \
+ tar -zcf $(PKG_MUSL)-$(VERSION).$(ARCH).tar.gz $(PKG_MUSL)
+ curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(PKG_MUSL)-$(VERSION).$(ARCH).tar.gz' \
+ -H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
+ --upload-file $(PKG_MUSL)-$(VERSION).$(ARCH).tar.gz
+
+ # upload musl emoji static binary
+ tar -zcf $(PKG_MUSL_EMOJI)-$(VERSION).$(ARCH).tar.gz $(PKG_MUSL_EMOJI)
+ curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(PKG_MUSL_EMOJI)-$(VERSION).$(ARCH).tar.gz' \
-H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
- --upload-file $(BIN)-musl-static-$(VERSION).x86_64.tar.gz
+ --upload-file $(PKG_MUSL_EMOJI)-$(VERSION).$(ARCH).tar.gz
clean:
- $(RM) -f $(BIN) nnn-$(VERSION).tar.gz *.sig $(BIN)-static $(BIN)-static-$(VERSION).x86_64.tar.gz $(BIN)-icons-static $(BIN)-icons-static-$(VERSION).x86_64.tar.gz $(BIN)-nerd-static $(BIN)-nerd-static-$(VERSION).x86_64.tar.gz $(BIN)-emoji-static $(BIN)-emoji-static-$(VERSION).x86_64.tar.gz $(BIN)-musl-static $(BIN)-musl-static-$(VERSION).x86_64.tar.gz src/icons-hash-gen src/icons-generated-*.h
+ $(RM) -f $(BIN) nnn-$(VERSION).tar.gz *.sig $(BIN)-static $(BIN)-static-$(VERSION).x86_64.tar.gz $(BIN)-icons-static $(BIN)-icons-static-$(VERSION).x86_64.tar.gz $(BIN)-nerd-static $(BIN)-nerd-static-$(VERSION).x86_64.tar.gz $(BIN)-emoji-static $(BIN)-emoji-static-$(VERSION).x86_64.tar.gz $(BIN)-musl-static $(BIN)-musl-static-$(VERSION).x86_64.tar.gz $(BIN)-musl-emoji-static $(BIN)-musl-emoji-static-$(VERSION).x86_64.tar.gz src/icons-hash-gen src/icons-generated-*.h
checkpatches:
./patches/check-patches.sh
diff --git a/misc/musl/musl-static-ubuntu.sh b/misc/musl/musl-static-ubuntu.sh
@@ -21,8 +21,9 @@
# Exit on first failure
set -e
-# Output binary name
+# Output binary names
BIN=nnn-musl-static
+EMOJIBIN=nnn-musl-emoji-static
# Install musl
sudo apt install -y --no-install-recommends musl musl-dev musl-tools
@@ -55,9 +56,16 @@ cd musl-fts
./configure
make CC=musl-gcc CFLAGS=-O3 LDFLAGS=-static -j$(($(nproc)+1))
-# Compile nnn
cd ..
-[ -e "./netbsd-curses" ] || rm -- "$BIN"
+
+# Compile nnn with Emoji
+[ -d "./netbsd-curses" ] && [ -d ./musl-fts ] || rm -- "$EMOJIBIN"
+musl-gcc -DEMOJI -std=c11 -Wall -Wextra -Wshadow -O3 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DICONS_GENERATE -o src/icons-hash-gen src/icons-hash.c
+./src/icons-hash-gen > src/icons-generated-emoji.h
+musl-gcc -O3 -DNORL -DNOMOUSE -DEMOJI -DICONS_INCLUDE=\"icons-generated-emoji.h\" -std=c11 -Wall -Wextra -Wshadow -I./netbsd-curses/libcurses -I./musl-fts -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -o "$EMOJIBIN" src/nnn.c -Wl,-Bsymbolic-functions -lpthread -L./netbsd-curses/libs -lcurses -lterminfo -static -L./musl-fts/.libs -lfts
+
+# Compile nnn
+[ -d "./netbsd-curses" ] && [ -d ./musl-fts ] || rm -- "$BIN"
musl-gcc -O3 -DNORL -DNOMOUSE -std=c11 -Wall -Wextra -Wshadow -I./netbsd-curses/libcurses -I./musl-fts -o "$BIN" src/nnn.c -Wl,-Bsymbolic-functions -lpthread -L./netbsd-curses/libs -lcurses -lterminfo -static -L./musl-fts/.libs -lfts
strip "$BIN"