mirror of
https://github.com/akuker/RASCSI.git
synced 2026-10-25 12:02:59 +00:00
183 lines
7.0 KiB
Makefile
183 lines
7.0 KiB
Makefile
.DEFAULT_GOAL := build
|
|
|
|
# Go parameters
|
|
GOCMD=go
|
|
GOBUILD=$(GOCMD) build
|
|
GOCLEAN=$(GOCMD) clean
|
|
GOTEST=$(GOCMD) test
|
|
GOMOD=$(GOCMD) mod
|
|
PROTOC_GEN_GO_VERSION=v1.36.11
|
|
GO_BIN=$(shell $(GOCMD) env GOBIN)
|
|
ifeq ($(GO_BIN),)
|
|
GO_BIN=$(shell $(GOCMD) env GOPATH)/bin
|
|
endif
|
|
PROTOC_GEN_GO=$(GO_BIN)/protoc-gen-go
|
|
|
|
# Binary names
|
|
BINARY_NAME=piscsi-web
|
|
BINARY_UNIX=$(BINARY_NAME)_unix
|
|
MOCK_BINARY=mock-piscsi
|
|
OLED_BINARY=piscsi-oled
|
|
CTRLBOARD_BINARY=piscsi-ctrlboard
|
|
OLED_INSTALL_DIR ?= /opt/piscsi/oled
|
|
SYSTEMD_UNIT_DIR ?= /etc/systemd/system
|
|
OLED_SERVICE=piscsi-oled.service
|
|
OLED_SERVICE_TEMPLATE=../os_integration/systemd/$(OLED_SERVICE)
|
|
|
|
# Build flags
|
|
LDFLAGS=-ldflags "-s -w"
|
|
DEFAULT_BASE_DIR ?= /var/lib/piscsi/images
|
|
DEFAULT_SHARED_DIR ?= /var/lib/piscsi/shared
|
|
DEFAULT_CONFIG_DIR ?= /var/lib/piscsi/config
|
|
DEFAULT_DATA_DIR ?= /var/lib/piscsi/data
|
|
DEFAULT_DRIVE_PROPERTIES_FILE ?= drive_properties.json
|
|
DEFAULT_SESSION_KEY_FILE ?= /etc/piscsi-web/session.key
|
|
CONFIG_LDFLAGS = -X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultBaseDir=$(DEFAULT_BASE_DIR) \
|
|
-X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultSharedDir=$(DEFAULT_SHARED_DIR) \
|
|
-X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultConfigDir=$(DEFAULT_CONFIG_DIR) \
|
|
-X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultDataDir=$(DEFAULT_DATA_DIR) \
|
|
-X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultDrivePropertiesFile=$(DEFAULT_DRIVE_PROPERTIES_FILE) \
|
|
-X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultSessionKeyFile=$(DEFAULT_SESSION_KEY_FILE)
|
|
WEB_LDFLAGS = -ldflags "-s -w $(CONFIG_LDFLAGS)"
|
|
STATIC_WEB_LDFLAGS = -ldflags "-s -w $(CONFIG_LDFLAGS) -extldflags=-static"
|
|
# Gin's optional MessagePack codec is unused and expensive to compile on
|
|
# memory-constrained Raspberry Pis.
|
|
WEB_TAGS ?= nomsgpack
|
|
STATIC_WEB_TAGS ?= nomsgpack
|
|
WEB_TAG_FLAGS=-tags "$(WEB_TAGS)"
|
|
STATIC_WEB_TAG_FLAGS=-tags "$(STATIC_WEB_TAGS)"
|
|
|
|
all: test build
|
|
|
|
build: proto
|
|
$(GOBUILD) $(WEB_TAG_FLAGS) $(WEB_LDFLAGS) -o $(BINARY_NAME) -v ./piscsi-web/cmd/piscsi-web
|
|
|
|
mock: proto
|
|
@echo "Building mock PiSCSI daemon..."
|
|
$(GOBUILD) $(LDFLAGS) -o $(MOCK_BINARY) -v ./piscsi-web/cmd/mock-piscsi
|
|
@echo "✅ Mock daemon created: $(MOCK_BINARY)"
|
|
@echo "Run with: ./$(MOCK_BINARY)"
|
|
|
|
build-linux-arm64: proto
|
|
@echo "Building for ARM64..."
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 \
|
|
$(GOBUILD) $(WEB_TAG_FLAGS) $(WEB_LDFLAGS) -o $(BINARY_NAME)-arm64 ./piscsi-web/cmd/piscsi-web
|
|
@echo "✅ ARM64 binary created"
|
|
@ls -lh $(BINARY_NAME)-arm64
|
|
|
|
build-linux-armv7: proto
|
|
@echo "Building for ARMv7..."
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 \
|
|
$(GOBUILD) $(WEB_TAG_FLAGS) $(WEB_LDFLAGS) -o $(BINARY_NAME)-armv7 ./piscsi-web/cmd/piscsi-web
|
|
@echo "✅ ARMv7 binary created"
|
|
@ls -lh $(BINARY_NAME)-armv7
|
|
|
|
build-linux-arm64-static: proto
|
|
@echo "Building static ARM64 binary..."
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 \
|
|
$(GOBUILD) $(STATIC_WEB_TAG_FLAGS) $(STATIC_WEB_LDFLAGS) -o $(BINARY_NAME)-arm64-static ./piscsi-web/cmd/piscsi-web
|
|
@echo "✅ Static ARM64 binary created: $(BINARY_NAME)-arm64-static"
|
|
@file $(BINARY_NAME)-arm64-static
|
|
@ls -lh $(BINARY_NAME)-arm64-static
|
|
|
|
build-linux-armv7-static: proto
|
|
@echo "Building static ARMv7 binary..."
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 \
|
|
$(GOBUILD) $(STATIC_WEB_TAG_FLAGS) $(STATIC_WEB_LDFLAGS) -o $(BINARY_NAME)-armv7-static ./piscsi-web/cmd/piscsi-web
|
|
|
|
build-oled: proto
|
|
$(GOBUILD) $(LDFLAGS) -o $(OLED_BINARY) -v ./cmd/piscsi-oled
|
|
|
|
build-ctrlboard: proto
|
|
$(GOBUILD) $(LDFLAGS) -o $(CTRLBOARD_BINARY) -v ./cmd/piscsi-ctrlboard
|
|
|
|
build-oled-linux-arm64: proto
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(OLED_BINARY)-arm64 ./cmd/piscsi-oled
|
|
|
|
build-oled-linux-armv7: proto
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 $(GOBUILD) $(LDFLAGS) -o $(OLED_BINARY)-armv7 ./cmd/piscsi-oled
|
|
@echo "✅ Static ARMv7 binary created: $(BINARY_NAME)-armv7-static"
|
|
@file $(BINARY_NAME)-armv7-static
|
|
@ls -lh $(BINARY_NAME)-armv7-static
|
|
|
|
build-ctrlboard-linux-arm64: proto
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(CTRLBOARD_BINARY)-arm64 ./cmd/piscsi-ctrlboard
|
|
|
|
build-ctrlboard-linux-armv7: proto
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 $(GOBUILD) $(LDFLAGS) -o $(CTRLBOARD_BINARY)-armv7 ./cmd/piscsi-ctrlboard
|
|
|
|
test: proto
|
|
$(GOTEST) $(WEB_TAG_FLAGS) -v -coverprofile=coverage.txt -covermode=atomic ./...
|
|
|
|
test-race: proto
|
|
$(GOTEST) $(WEB_TAG_FLAGS) -v -race -coverprofile=coverage.txt -covermode=atomic ./...
|
|
|
|
test-short: proto
|
|
$(GOTEST) $(WEB_TAG_FLAGS) -v -short ./...
|
|
|
|
test-server: proto
|
|
$(GOTEST) $(WEB_TAG_FLAGS) -v ./piscsi-web/internal/server
|
|
|
|
test-coverage: proto
|
|
$(GOTEST) $(WEB_TAG_FLAGS) -v -coverprofile=coverage.txt -covermode=atomic ./...
|
|
$(GOCMD) tool cover -html=coverage.txt -o coverage.html
|
|
@echo "✅ Coverage report generated: coverage.html"
|
|
|
|
test-verbose: proto
|
|
$(GOTEST) $(WEB_TAG_FLAGS) -v ./...
|
|
|
|
clean:
|
|
$(GOCLEAN)
|
|
rm -f $(BINARY_NAME)
|
|
rm -f $(BINARY_NAME)-arm64 $(BINARY_NAME)-armv7
|
|
rm -f $(BINARY_NAME)-arm64-static $(BINARY_NAME)-armv7-static
|
|
rm -f $(MOCK_BINARY)
|
|
rm -f $(OLED_BINARY) $(OLED_BINARY)-arm64 $(OLED_BINARY)-armv7
|
|
rm -f $(CTRLBOARD_BINARY) $(CTRLBOARD_BINARY)-arm64 $(CTRLBOARD_BINARY)-armv7
|
|
rm -f coverage.txt coverage.html
|
|
|
|
run: proto
|
|
$(GOBUILD) $(WEB_TAG_FLAGS) $(WEB_LDFLAGS) -o $(BINARY_NAME) -v ./piscsi-web/cmd/piscsi-web
|
|
./$(BINARY_NAME)
|
|
|
|
deps:
|
|
$(GOMOD) download
|
|
$(GOMOD) verify
|
|
|
|
tidy:
|
|
$(GOMOD) tidy
|
|
|
|
proto: proto-tools version
|
|
PATH="$(GO_BIN):$$PATH" ./proto/generate.sh
|
|
|
|
version:
|
|
./piscsi/generate_version.sh
|
|
|
|
version-check:
|
|
./piscsi/generate_version.sh --check
|
|
|
|
proto-tools:
|
|
@command -v protoc >/dev/null || { echo "protoc is required; install protobuf-compiler."; exit 1; }
|
|
@test -x "$(PROTOC_GEN_GO)" || { echo "protoc-gen-go is required; install it with: go install google.golang.org/protobuf/cmd/protoc-gen-go@$(PROTOC_GEN_GO_VERSION)"; exit 1; }
|
|
@actual="$$($(PROTOC_GEN_GO) --version)"; expected="protoc-gen-go $(PROTOC_GEN_GO_VERSION)"; test "$$actual" = "$$expected" || { echo "$$expected is required (found $$actual)."; exit 1; }
|
|
|
|
install:
|
|
@echo "Installing PiSCSI Web Interface for development..."
|
|
@./piscsi-web/scripts/install.sh
|
|
|
|
install-oled: build-oled
|
|
@echo "Installing PiSCSI OLED monitor for development..."
|
|
install -d "$(OLED_INSTALL_DIR)"
|
|
install -m 0755 "$(OLED_BINARY)" "$(OLED_INSTALL_DIR)/$(OLED_BINARY)"
|
|
sed 's@^ExecStart=/usr/bin/piscsi-oled$$@ExecStart=$(OLED_INSTALL_DIR)/$(OLED_BINARY)@' "$(OLED_SERVICE_TEMPLATE)" | install -m 0644 /dev/stdin "$(SYSTEMD_UNIT_DIR)/$(OLED_SERVICE)"
|
|
systemctl daemon-reload
|
|
|
|
migrate-data:
|
|
@./piscsi-web/scripts/migrate-data.sh
|
|
|
|
uninstall:
|
|
@echo "Uninstalling PiSCSI Web Interface..."
|
|
@./piscsi-web/scripts/uninstall.sh
|
|
|
|
.PHONY: all build mock build-oled build-ctrlboard build-linux-arm64 build-linux-armv7 build-linux-arm64-static build-linux-armv7-static build-oled-linux-arm64 build-oled-linux-armv7 build-ctrlboard-linux-arm64 build-ctrlboard-linux-armv7 test test-race test-short test-server test-coverage test-verbose clean run deps tidy proto proto-tools version version-check install install-oled migrate-data uninstall
|