ncdu-zig/Makefile
Yorhel f473f3605e Fix building of static binaries
It's a bit ugly, but appears to work. I've not tested the 32bit arm
version, but the others run.

The static binaries are about twice as large as the ncdu 1.x
counterparts.
2021-07-19 16:44:53 +02:00

88 lines
3 KiB
Makefile

# SPDX-FileCopyrightText: 2021 Yoran Heling <projects@yorhel.nl>
# SPDX-License-Identifier: MIT
# Optional semi-standard Makefile with some handy tools.
# Ncdu itself can be built with just the zig build system.
PREFIX ?= /usr/local
BINDIR ?= ${PREFIX}/bin
MANDIR ?= ${PREFIX}/share/man/man1
NCDU_VERSION=$(shell grep 'program_version = "' src/main.zig | sed -e 's/^.*"\(.\+\)".*$$/\1/')
release:
zig build -Drelease-fast
debug:
zig build
clean:
rm -rf zig-cache zig-out
distclean: clean
rm -f ncdu.1
doc: ncdu.1
ncdu.1: ncdu.pod src/main.zig
pod2man --center "ncdu manual" --release "ncdu-${NCDU_VERSION}" ncdu.pod >ncdu.1
install: install-bin install-doc
install-bin: release
mkdir -p ${BINDIR}
install -m0755 zig-out/bin/ncdu ${BINDIR}/
install-doc: doc
mkdir -p ${MANDIR}
install -m0644 ncdu.1 ${MANDIR}/
uninstall: uninstall-bin uninstall-doc
# XXX: Ideally, these would also remove the directories created by 'install' if they are empty.
uninstall-bin:
rm -f ${BINDIR}/ncdu
uninstall-doc:
rm -f ${MANDIR}/ncdu.1
dist: doc
rm -f ncdu-${NCDU_VERSION}.tar.gz
mkdir ncdu-${NCDU_VERSION}
for f in ncdu.1 `git ls-files | grep -v ^\.gitignore`; do mkdir -p ncdu-${NCDU_VERSION}/`dirname $$f`; ln -s "`pwd`/$$f" ncdu-${NCDU_VERSION}/$$f; done
tar -cophzf ncdu-${NCDU_VERSION}.tar.gz --sort=name ncdu-${NCDU_VERSION}
rm -rf ncdu-${NCDU_VERSION}
# ASSUMPTION: the ncurses source tree has been extracted into ncurses/
static:
mkdir -p static-${TARGET}/nc static-${TARGET}/inst/pkg
cd static-${TARGET}/nc && ../../ncurses/configure --prefix="`pwd`/../inst"\
--with-pkg-config-libdir="`pwd`/../inst/pkg"\
--without-cxx --without-cxx-binding --without-ada --without-manpages --without-progs\
--without-tests --enable-pc-files --without-pkg-config --without-shared --without-debug\
--without-gpm --without-sysmouse --enable-widec --with-default-terminfo-dir=/usr/share/terminfo\
--with-terminfo-dirs=/usr/share/terminfo:/lib/terminfo:/usr/local/share/terminfo\
--with-fallbacks="screen linux vt100 xterm xterm-256color" --host=${TARGET}\
CC="zig cc --target=${TARGET}"\
LD="zig cc --target=${TARGET}"\
AR="zig ar" RANLIB="zig ranlib"\
CPPFLAGS=-D_GNU_SOURCE && make && make install.libs
@# zig-build - cleaner approach but doesn't work, results in a dynamically linked binary.
@#cd static-${TARGET} && PKG_CONFIG_LIBDIR="`pwd`/inst/pkg" zig build -Dtarget=${TARGET}
@# --build-file ../build.zig --search-prefix inst/ --cache-dir zig -Drelease-fast=true
@# Alternative approach, bypassing zig-build
cd static-${TARGET} && zig build-exe -target ${TARGET}\
-Iinst/include -Iinst/include/ncursesw -lc inst/lib/libncursesw.a\
--cache-dir zig-cache -static --strip -O ReleaseFast ../src/main.zig ../src/ncurses_refs.c
cd static-${TARGET} && mv main ncdu && tar -czf ../ncdu-${NCDU_VERSION}-$(shell echo ${TARGET} | sed s/-musl//).tar.gz ncdu
rm -rf static-${TARGET}
static-target-%:
$(MAKE) static TARGET=$*
static-all:\
static-target-x86_64-linux-musl \
static-target-aarch64-linux-musl \
static-target-i386-linux-musl \
static-target-arm-linux-musleabi