PRIV_DIR    := $(MIX_APP_PATH)/priv
BUILD_DIR   := $(MIX_APP_PATH)/cmake_build
NIF_SO      := $(PRIV_DIR)/chromaprint_nif.so
JOBS        ?= $(shell nproc 2>/dev/null || echo 4)
CMAKE_BUILD_TYPE       ?= Release
CHROMAPRINT_USE_SYSTEM ?= OFF

CMAKE_EXTRA_ARGS ?=

ifneq ($(strip $(CHROMAPRINT_INCLUDE_DIR)),)
CMAKE_EXTRA_ARGS += -DCHROMAPRINT_INCLUDE_DIR=$(CHROMAPRINT_INCLUDE_DIR)
endif
ifneq ($(strip $(CHROMAPRINT_LIB_DIR)),)
CMAKE_EXTRA_ARGS += -DCMAKE_LIBRARY_PATH=$(CHROMAPRINT_LIB_DIR)
endif

.PHONY: all clean

all: $(NIF_SO)

$(NIF_SO): $(BUILD_DIR)/CMakeCache.txt
	@mkdir -p $(PRIV_DIR)
	cmake --build $(BUILD_DIR) --config $(CMAKE_BUILD_TYPE) -j $(JOBS)
	cmake --install $(BUILD_DIR)

$(BUILD_DIR)/CMakeCache.txt:
	@mkdir -p $(BUILD_DIR)
	cmake -S c_src -B $(BUILD_DIR) \
	  -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \
	  -DERTS_INCLUDE_DIR=$(ERTS_INCLUDE_DIR) \
	  -DPRIV_DIR=$(PRIV_DIR) \
	  -DCHROMAPRINT_USE_SYSTEM=$(CHROMAPRINT_USE_SYSTEM) \
	  $(CMAKE_EXTRA_ARGS)

clean:
	rm -rf $(BUILD_DIR) $(NIF_SO)
