.PHONY: all plugin agent beacon clean help

GO := go
GOFLAGS := -buildmode=plugin -ldflags="-s -w"
GOEXPERIMENT := jsonv2,greenteagc
DIST_DIR := dist
SRC_SERVER := src_server
SRC_BEACON := src_beacon

PLUGIN_FILES := \
	$(SRC_SERVER)/pl_lokycrypt.go \
	$(SRC_SERVER)/pl_malleable.go \
	$(SRC_SERVER)/pl_main.go \
	$(SRC_SERVER)/pl_agent.go \
	$(SRC_SERVER)/pl_packer.go \
	$(SRC_SERVER)/pl_utils.go

PLUGIN_OUT := $(DIST_DIR)/agent_kharon.so

all: clean plugin agent

plugin: $(PLUGIN_OUT)

$(PLUGIN_OUT): $(PLUGIN_FILES)
	@echo "[*] Building agent_kharon plugin..."
	@mkdir -p $(DIST_DIR)
	@GOEXPERIMENT=$(GOEXPERIMENT) $(GO) build $(GOFLAGS) \
		-o $@ \
		$^
	@echo "[✓] Plugin built: $(PLUGIN_OUT)"

agent: plugin
	@echo "[*] Building agent_kharon src code (beacon)..."
	@$(MAKE) -C $(SRC_BEACON) prebuild-x64 --no-print-directory
	@echo "[✓] Agent beacon source built"

clean:
	@echo "[*] Cleaning build artifacts..."
	@if [ -f "$(PLUGIN_OUT)" ]; then \
		rm -f "$(PLUGIN_OUT)"; \
	fi
	@$(MAKE) -C $(SRC_BEACON) clean --no-print-directory || true
	@echo "[✓] Clean complete"

.SILENT: help