BINARY := openclaw VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev) LDFLAGS := -s -w -X main.version=$(VERSION) GOFLAGS := -trimpath DIST := dist export CGO_ENABLED := 0 .PHONY: all build test vet race run cross linux-amd64 linux-arm64 linux-armv7 android-arm64 android-armv7 docker clean all: vet test build build: go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o bin/$(BINARY) ./cmd/openclaw test: go test ./... race: CGO_ENABLED=1 go test -race ./... vet: go vet ./... run: build ./bin/$(BINARY) -config config.yaml cross: linux-amd64 linux-arm64 linux-armv7 android-arm64 android-armv7 linux-amd64: GOOS=linux GOARCH=amd64 go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o $(DIST)/$(BINARY)-linux-amd64 ./cmd/openclaw linux-arm64: GOOS=linux GOARCH=arm64 go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o $(DIST)/$(BINARY)-linux-arm64 ./cmd/openclaw linux-armv7: GOOS=linux GOARCH=arm GOARM=7 go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o $(DIST)/$(BINARY)-linux-armv7 ./cmd/openclaw # Termux on Android: GOOS=android, pure Go (no NDK needed thanks to CGO_ENABLED=0) android-arm64: GOOS=android GOARCH=arm64 go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o $(DIST)/$(BINARY)-termux-arm64 ./cmd/openclaw # android/arm needs cgo+NDK; a static linux/arm binary runs fine in Termux instead. android-armv7: GOOS=linux GOARCH=arm GOARM=7 go build $(GOFLAGS) -ldflags '$(LDFLAGS)' -o $(DIST)/$(BINARY)-termux-armv7 ./cmd/openclaw docker: docker build -t openclaw:$(VERSION) . clean: rm -rf bin $(DIST)