# Makefile for easily building LF on MacOS, Linux, BSD, etc.

UNAME_S := $(shell uname -s | tr '[:upper:]' '[:lower:]')

CC := cc
CFLAGS := -O3 -std=c99

SQLITE3_FLAGS := \
	-Inative/sqlite3 \
	-DVERSION=\"3.28.0\" \
	-DSTDC_HEADERS=1 \
	-DHAVE_SYS_TYPES_H=1 \
	-DHAVE_SYS_STAT_H=1 \
	-DHAVE_STDLIB_H=1 \
	-DHAVE_STRING_H=1 \
	-DHAVE_MEMORY_H=1 \
	-DHAVE_STRINGS_H=1 \
	-DHAVE_INTTYPES_H=1 \
	-DHAVE_STDINT_H=1 \
	-DHAVE_UNISTD_H=1 \
	-DHAVE_USLEEP=1 \
	-DHAVE_LOCALTIME_R=1 \
	-DHAVE_GMTIME_R=1 \
	-DHAVE_DECL_STRERROR_R=1 \
	-DHAVE_STRERROR_R=1 \
	-DSQLITE_OMIT_LOAD_EXTENSION=1 \
	-DSQLITE_THREADSAFE=0

all: lf

lf:	native_if
	go build -trimpath -ldflags -s -o ./lf cmd/lf/lf.go

native_if: FORCE
	if [ ! -f native/db_$(UNAME_S).o ]; then $(CC) $(CFLAGS) -c -o native/db_$(UNAME_S).o native/db.c; fi
	if [ ! -f native/sqlite3_$(UNAME_S).o ]; then $(CC) $(CFLAGS) $(SQLITE3_FLAGS) -c -o native/sqlite3_$(UNAME_S).o native/sqlite3/sqlite3.c; fi

native:	FORCE
	$(CC) $(CFLAGS) -c -o native/db_$(UNAME_S).o native/db.c
	$(CC) $(CFLAGS) $(SQLITE3_FLAGS) -c -o native/sqlite3_$(UNAME_S).o native/sqlite3/sqlite3.c

clean:	FORCE
	rm -rf lf lf-db-test native/*.o native/*.a

FORCE:
