MODULE := speistel

# directories for executables
CMDS := $(wildcard cmd/*)

# binaries will be placed here
BIN_DIR := bin

# convert cmd/* into binary names (strip "cmd/")
BINS := $(patsubst cmd/%, $(BIN_DIR)/%, $(CMDS))

.PHONY: all clean run

# default target builds all binaries
all: $(BINS)

# rule: build each cmd/<name>/main.go into bin/<name>
$(BIN_DIR)/%: cmd/%/*.go
	@mkdir -p $(BIN_DIR)
	go build -o $@ ./cmd/$*

# run a specific binary, e.g. `make run CMD=server`
run:
	@go run ./cmd/$(CMD)

# cleanup
clean:
	rm -rf $(BIN_DIR)
