# This builds libarchive -- i.e., the tar command.
include ../build/Makefile-vars
# See https://github.com/libarchive/libarchive/releases
VERSION = 3.6.1
URL = https://github.com/libarchive/libarchive/releases/download/v${VERSION}/libarchive-${VERSION}.tar.xz
TARBALL = ${UPSTREAM}/libarchive-${VERSION}.tar.gz
POSIX_WASM = $(shell cowasm-package-path @cowasm/posix-wasm)
LZMA_WASM = $(shell cowasm-package-path @cowasm/lzma)
ZLIB_WASM = $(shell cowasm-package-path @cowasm/zlib)
BZIP2_WASM = $(shell cowasm-package-path @cowasm/bzip2)
all: deps wasm
include ../build/Makefile-rules
${BUILD_WASM}/.patched: ${BUILD_WASM}/.build
cd ${BUILD_WASM} && cat ${SRC}/patches/01-main-visibility.patch | patch -p1
touch ${BUILD_WASM}/.patched
${DIST_WASM}/.built: node_modules ${BUILD_WASM}/.patched
cd ../build && make zig
cd ${BUILD_WASM} \
&& CC="cowasm-cc" \
CFLAGS="-Oz -I${POSIX_WASM} -I${LZMA_WASM}/include -I${ZLIB_WASM}/include -I${BZIP2_WASM}/include" \
LDFLAGS="-L${LZMA_WASM}/lib -llzma -L${ZLIB_WASM}/lib -lz -L${BZIP2_WASM}/lib -lbz2" \
AR="zig ar" \
RANLIB="zig ranlib" \
./configure \
--host=none \
--program-transform-name='s/bsd//' \
--prefix=${DIST_WASM} \
--without-openssl \
--without-xml2 \
--without-expat \
--without-libb2 \
--without-iconv \
--without-libiconv-prefix \
--without-zstd \
--without-cng \
--without-lz4 \
&& cat ${SRC}/config.h >> config.h \
&& make -j12 \
&& make install
touch ${DIST_WASM}/.built
test: ${DIST_WASM}/.built
# Check that each binary runs
${BIN}/cowasm ${DIST_WASM}/bin/tar -h |grep "bsdtar ${VERSION}"
${BIN}/cowasm ${DIST_WASM}/bin/cat --version |grep "bsdcat ${VERSION}"
${BIN}/cowasm ${DIST_WASM}/bin/cpio --version |grep "bsdcpio ${VERSION}"
# Consistency check -- do a compressed archive of dist, then extract,
# then run tar at of that. NOTE: this also illustrates the issue with
# file permissions that is caused by WASI.
rm -rf ${BUILD_WASM}/test
mkdir -p ${BUILD_WASM}/test
# This takes about 2 seconds, but is surprisingly competitive with native for speed.
${BIN}/cowasm ${DIST_WASM}/bin/tar -Jcf ${BUILD_WASM}/test/dist.tar.xz dist
cd ${BUILD_WASM}/test \
&& ${BIN}/cowasm ${DIST_WASM}/bin/tar -xf dist.tar.xz \
&& chmod +x dist/wasm/bin/tar \
&& ${BIN}/cowasm dist/wasm/bin/tar -h |grep "bsdtar ${VERSION}"