# Define variables for the application APP_NAME = llama-swap BUILD_DIR = build # Get the current Git hash GIT_HASH := $(shell git rev-parse --short HEAD) ifneq ($(shell git status --porcelain),) # There are untracked changes GIT_HASH := $(GIT_HASH)+ endif # Capture the current build date in RFC3339 format BUILD_DATE := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") # Default target: Builds binaries for both OSX and Linux all: mac linux simple-responder # Clean build directory clean: rm -rf $(BUILD_DIR) test: go test -short -v -count=1 ./proxy test-all: go test -v -count=1 ./proxy # Build OSX binary mac: @echo "Building Mac binary..." GOOS=darwin GOARCH=arm64 go build -ldflags="-X main.commit=${GIT_HASH} -X main.version=local_${GIT_HASH} -X main.date=${BUILD_DATE}" -o $(BUILD_DIR)/$(APP_NAME)-darwin-arm64 # Build Linux binary linux: @echo "Building Linux binary..." GOOS=linux GOARCH=amd64 go build -ldflags="-X main.commit=${GIT_HASH} -X main.version=local_${GIT_HASH} -X main.date=${BUILD_DATE}" -o $(BUILD_DIR)/$(APP_NAME)-linux-amd64 # Build Windows binary windows: @echo "Building Windows binary..." GOOS=windows GOARCH=amd64 go build -ldflags="-X main.commit=${GIT_HASH} -X main.version=local_${GIT_HASH} -X main.date=${BUILD_DATE}" -o $(BUILD_DIR)/$(APP_NAME)-windows-amd64.exe # for testing proxy.Process simple-responder: @echo "Building simple responder" GOOS=darwin GOARCH=arm64 go build -o $(BUILD_DIR)/simple-responder_darwin_arm64 misc/simple-responder/simple-responder.go GOOS=linux GOARCH=amd64 go build -o $(BUILD_DIR)/simple-responder_linux_amd64 misc/simple-responder/simple-responder.go simple-responder-windows: @echo "Building simple responder for windows" GOOS=windows GOARCH=amd64 go build -o $(BUILD_DIR)/simple-responder.exe misc/simple-responder/simple-responder.go # Ensure build directory exists $(BUILD_DIR): mkdir -p $(BUILD_DIR) # Create a new release tag release: @echo "Checking for unstaged changes..." @if [ -n "$(shell git status --porcelain)" ]; then \ echo "Error: There are unstaged changes. Please commit or stash your changes before creating a release tag." >&2; \ exit 1; \ fi # Get the highest tag in v{number} format, increment it, and create a new tag @highest_tag=$$(git tag --sort=-v:refname | grep -E '^v[0-9]+$$' | head -n 1 || echo "v0"); \ new_tag="v$$(( $${highest_tag#v} + 1 ))"; \ echo "tagging new version: $$new_tag"; \ git tag "$$new_tag"; # Phony targets .PHONY: all clean mac linux windows simple-responder