BINARY := ezcoo-usb-control VERSION ?= 0.1.0 CMD := ./cmd/$(BINARY) BUILD_DIR := build DIST_DIR := dist DEB_TARGETS := arm64 armhf amd64 .PHONY: build deb-all $(addprefix deb-,$(DEB_TARGETS)) clean deps prepare lint deps: go mod tidy prepare: deps go mod download go generate ./... lint: prepare gofmt -w -s . goimports -w . go vet ./... golangci-lint run --color always build: prepare mkdir -p $(BUILD_DIR) go build -o $(BUILD_DIR)/$(BINARY) $(CMD) # ── Per-architecture .deb builder ───────────────────────────────────────────── # $(1) = Debian arch (arm64 / armhf / amd64) # $(2) = GOARCH (arm64 / arm / amd64) # $(3) = GOARM (7 for armhf, empty otherwise) define make_deb $(eval BIN := $(BUILD_DIR)/$(BINARY)-$(1)) $(eval PKG_DIR := $(BUILD_DIR)/pkg-$(1)) $(eval DEB_OUT := $(DIST_DIR)/$(BINARY)_$(VERSION)_$(1).deb) $(eval GO_ENV := GOOS=linux GOARCH=$(2)$(if $(3), GOARM=$(3),)) mkdir -p $(BUILD_DIR) $(DIST_DIR) $(GO_ENV) go build -o $(BIN) $(CMD) rm -rf $(PKG_DIR) install -D -m 0755 $(BIN) $(PKG_DIR)/usr/bin/$(BINARY) install -D -m 0640 cmd/ezcoo-usb-control/config.example.yaml $(PKG_DIR)/etc/$(BINARY)/config.yaml install -D -m 0644 packaging/systemd/$(BINARY).service $(PKG_DIR)/lib/systemd/system/$(BINARY).service install -d $(PKG_DIR)/DEBIAN sed -e 's/VERSION_PLACEHOLDER/$(VERSION)/' \ -e 's/ARCH_PLACEHOLDER/$(1)/' \ packaging/DEBIAN/control > $(PKG_DIR)/DEBIAN/control install -m 0644 packaging/DEBIAN/conffiles $(PKG_DIR)/DEBIAN/conffiles install -m 0755 packaging/DEBIAN/postinst $(PKG_DIR)/DEBIAN/postinst install -m 0755 packaging/DEBIAN/prerm $(PKG_DIR)/DEBIAN/prerm install -m 0755 packaging/DEBIAN/postrm $(PKG_DIR)/DEBIAN/postrm dpkg-deb --build --root-owner-group $(PKG_DIR) $(DEB_OUT) rm -rf $(PKG_DIR) @echo "→ $(DEB_OUT)" endef deb-arm64: $(call make_deb,arm64,arm64,) deb-armhf: $(call make_deb,armhf,arm,7) deb-amd64: $(call make_deb,amd64,amd64,) deb-all: $(addprefix deb-,$(DEB_TARGETS)) @echo "" @echo "Built packages:" @ls -lh $(DIST_DIR)/$(BINARY)_$(VERSION)_*.deb clean: rm -rf $(BUILD_DIR) $(DIST_DIR)