# This builds libgit2.
include ../build/Makefile-vars
# See https://github.com/libgit2/libgit2/releases
VERSION = 1.5.0
URL = https://github.com/libgit2/libgit2/archive/refs/tags/v${VERSION}.tar.gz
TARBALL = ${UPSTREAM}/libgit2-${VERSION}.tar.gz
# Debug is HUGE
# BUILD_TYPE = Debug
# Release is pretty small
BUILD_TYPE = Release
ZLIB_WASM = $(shell cowasm-package-path @cowasm/zlib)
all: deps wasm
include ../build/Makefile-rules
${BUILD_WASM}/.patched: ${BUILD_WASM}/.build
cd ${BUILD_WASM} && cat ${SRC}/patches/00-fix_missing_max_align.patch | patch -p1
cd ${BUILD_WASM} && cat ${SRC}/patches/01-realpath-cast.patch | patch -p1
cd ${BUILD_WASM} && cat ${SRC}/patches/02-validate_ownership.patch | patch -p1
cp ${SRC}/ar ${BUILD_WASM}
cp ${SRC}/ranlib ${BUILD_WASM}
touch ${BUILD_WASM}/.patched
# Notes on options:
# - -DBUILD_SHARED_LIBS=OFF is the only way to get a static library, which is what we want for our use.
${DIST_WASM}/.built: node_modules ${BUILD_WASM}/.patched
cd ../build && make zig
cd ${BUILD_WASM} \
&& CC="cowasm-cc" \
CFLAGS="-Oz -I${ZLIB_WASM}/include" \
cmake -DCMAKE_AR="${BUILD_WASM}/ar" \
-DCMAKE_RANLIB="${BUILD_WASM}/ranlib" \
-DCMAKE_SIZEOF_VOID_P=4 \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DREGEX_BACKEND=regcomp \
-DSONAME=OFF \
-DUSE_HTTPS=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_CLI=OFF \
-DTHREADSAFE=OFF \
-DUSE_THREADS:BOOL=OFF \
-DUSE_SSH=OFF \
-DBUILD_CLAR=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_SHARED_LIBS=OFF \
-DGIT_QSORT_S:INTERNAL= \
&& make -j8
rm -rf ${DIST_WASM}
mkdir -p ${DIST_WASM}/lib
cp ${BUILD_WASM}/liblibgit2package.a ${DIST_WASM}/lib/libgit2.a
cp -r ${BUILD_WASM}/include ${DIST_WASM}/include
ln -s ${SRC}/rebuild ${BUILD_WASM}
touch ${DIST_WASM}/.built
TESTS = ${BUILD_WASM}/tests
test-init: node_modules ${DIST_WASM}/.built
cd ../build && make zig
${BIN}/cowasm-cc \
-v -fvisibility-main -Oz -I${DIST_WASM}/include \
-L${DIST_WASM}/lib -L${ZLIB_WASM}/lib -lgit2 -lz \
${SRC}/test-init.c -o ${TESTS}/test-init
rm -rf ${TESTS}/testrepo
cowasm ${TESTS}/test-init ${TESTS}/testrepo
cd ${TESTS}/testrepo && git status |grep "No commits yet"
test: test-init