KVCS_C_DIR    ?= ../../C
KVCS_EFC_DIR  ?= ../../../kvcs-efc
PKG_CONFIG_PATH := $(abspath $(KVCS_C_DIR)):$(PKG_CONFIG_PATH)
EFC_BUILD_DIR  := $(abspath $(KVCS_EFC_DIR)/build)
export PKG_CONFIG_PATH

E2E_COMPOSE ?= ../../../kvcs-test/runtimes/data-plane-e2e/docker-compose.yaml
BENCH_ARGS  ?= --low-level --duration 10 --batches 4 --batch-size 32

# Static libkvcs.a by default; KVCS_DYNAMIC=1 links libkvcs.so (same knob as the SDK build).
ifeq ($(KVCS_DYNAMIC),1)
GO_TAGS := -tags kvcs_dynamic
endif

.PHONY: build test run run-docker clean help

build: ## Build kvcs-bench binary (KVCS_DYNAMIC=1 for dynamic link)
	CGO_ENABLED=1 go build -buildvcs=false $(GO_TAGS) -o kvcs-bench .

test: ## Run bench unit tests
	CGO_ENABLED=1 go test $(GO_TAGS) ./...

run: build ## Build and run bench on the host (physical machine)
	LD_LIBRARY_PATH=$(EFC_BUILD_DIR):$$LD_LIBRARY_PATH ./kvcs-bench $(BENCH_ARGS)

run-docker: build ## Build and run bench inside EFC container (for CI)
	docker compose -f $(E2E_COMPOSE) exec kvcs-efc-1 \
		/kvcs-efc-rt/kvcs-sdk/go/bench/kvcs-bench \
		$(BENCH_ARGS)

clean: ## Remove build artifacts
	rm -f kvcs-bench

help: ## Show this help
	@grep -E '^[a-z].*:.*##' $(MAKEFILE_LIST) | sed 's/:.*## /\t/' | sort
