# MyBeacon Native - Build Makefile # Cross-compilation for ARM (Luckfox Pico Ultra W) BINDIR := bin ARMDIR := $(BINDIR)/arm CMDS := ble-scanner wifi-scanner beacon-daemon # Build flags LDFLAGS := -s -w BUILD_FLAGS := -trimpath -buildvcs=false # Device settings DEVICE_IP ?= 192.168.1.100 DEVICE_USER ?= root .PHONY: all clean native arm deps deploy # Default: native build all: native # Native build (for testing on x86) native: @mkdir -p $(BINDIR) @for cmd in $(CMDS); do \ echo "Building $$cmd (native)..."; \ go build $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" -o $(BINDIR)/$$cmd ./cmd/$$cmd; \ done @echo "Build complete: $(BINDIR)/" # ARM cross-compile (pure Go, no CGO needed) arm: @mkdir -p $(ARMDIR) @for cmd in $(CMDS); do \ echo "Building $$cmd (arm)..."; \ CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 \ go build $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" -o $(ARMDIR)/$$cmd ./cmd/$$cmd; \ done @ls -lh $(ARMDIR)/ @echo "ARM build complete: $(ARMDIR)/" # Install dependencies deps: go mod download go mod tidy # Clean clean: rm -rf $(BINDIR) go clean # Run tests test: go test -v ./... # Format code fmt: go fmt ./... # Lint lint: go vet ./... # Deploy to device via SCP deploy: arm @echo "Deploying to $(DEVICE_USER)@$(DEVICE_IP)..." scp $(ARMDIR)/ble-scanner $(ARMDIR)/wifi-scanner $(ARMDIR)/beacon-daemon \ $(DEVICE_USER)@$(DEVICE_IP):/opt/mybeacon/bin/ @echo "Deploy complete!" # Create release tarball release: arm @mkdir -p release tar czvf release/mybeacon-arm-$$(date +%Y%m%d).tar.gz \ -C $(ARMDIR) ble-scanner wifi-scanner beacon-daemon @echo "Release tarball created: release/mybeacon-arm-$$(date +%Y%m%d).tar.gz" # Show help help: @echo "MyBeacon Build System" @echo "" @echo "Targets:" @echo " make native - Build for current platform (default)" @echo " make arm - Cross-compile for ARM (Luckfox)" @echo " make deps - Download dependencies" @echo " make clean - Clean build artifacts" @echo " make test - Run tests" @echo " make deploy - Deploy to device (set DEVICE_IP)" @echo " make release - Create release tarball" @echo "" @echo "Variables:" @echo " DEVICE_IP=x.x.x.x - Device IP for deploy" @echo " DEVICE_USER=root - Device user for deploy"