#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all export GOTOOLCHAIN = local export GOFLAGS = -mod=vendor -buildvcs=false include /usr/share/dpkg/architecture.mk PISCSI_RPI_ZERO ?= 0 RPI_ZERO_CXXFLAGS = CPP_MAKE_FLAGS = \ DEFAULT_IMAGE_FOLDER=/var/lib/piscsi/images \ CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)- \ EXTRA_FLAGS="$(shell dpkg-buildflags --get CPPFLAGS) $(shell dpkg-buildflags --get CXXFLAGS) $(RPI_ZERO_CXXFLAGS)" \ LDFLAGS="$(shell dpkg-buildflags --get LDFLAGS)" WEB_LDFLAGS = -s -w \ -X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultBaseDir=/var/lib/piscsi/images \ -X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultSharedDir=/var/lib/piscsi/shared \ -X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultConfigDir=/var/lib/piscsi/config \ -X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultDataDir=/var/lib/piscsi/data \ -X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultDrivePropertiesFile=/etc/piscsi-web/drive_properties.json \ -X github.com/piscsi/piscsi/go/piscsi-web/internal/config.defaultSessionKeyFile=/etc/piscsi-web/session.key ifeq ($(DEB_HOST_ARCH),arm64) GO_ARCH_ENV = GOARCH=arm64 else ifeq ($(DEB_HOST_ARCH),armhf) ifeq ($(PISCSI_RPI_ZERO),1) GO_ARCH_ENV = GOARCH=arm GOARM=6 RPI_ZERO_CXXFLAGS = -march=armv6 -mfpu=vfp -mfloat-abi=hard else GO_ARCH_ENV = GOARCH=arm GOARM=7 endif else GO_ARCH_ENV = endif %: dh $@ # dh_installsysusers is not part of the default compat 13 sequence. Run it # before tmpfiles so service identities exist before their directories are # created during package configuration. execute_before_dh_installtmpfiles: dh_installsysusers override_dh_auto_configure: @test -d go/vendor || { echo "go/vendor is required for an offline Debian build; run 'cd go && go mod vendor' before making the source tarball" >&2; exit 1; } @go env GOVERSION | awk -F. '($$1 == "go1" && $$2 >= 25) { ok = 1 } END { exit !ok }' || { echo "PiSCSI Go components require Go 1.25 or newer; Debian Trixie supplies Go 1.24, so put a preinstalled Go 1.25+ toolchain first in PATH" >&2; exit 1; } @command -v protoc-gen-go >/dev/null || { echo "protoc-gen-go is required" >&2; exit 1; } @cd go && ./piscsi/generate_version.sh --check override_dh_auto_build: $(MAKE) -C cpp $(CPP_MAKE_FLAGS) cd go && protoc --proto_path=.. --go_out=. --go_opt=paths=source_relative --go_opt=Mproto/piscsi_interface.proto=github.com/piscsi/piscsi/go/proto ../proto/piscsi_interface.proto install -d debian/build cd go && env CGO_ENABLED=0 GOOS=linux $(GO_ARCH_ENV) go build -trimpath -tags nomsgpack -ldflags "$(WEB_LDFLAGS)" -o ../debian/build/piscsi-web ./piscsi-web/cmd/piscsi-web cd go && env CGO_ENABLED=0 GOOS=linux $(GO_ARCH_ENV) go build -trimpath -o ../debian/build/piscsi-oled ./cmd/piscsi-oled cd go && env CGO_ENABLED=0 GOOS=linux $(GO_ARCH_ENV) go build -trimpath -o ../debian/build/piscsi-ctrlboard ./cmd/piscsi-ctrlboard override_dh_auto_test: ifneq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) @: else ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) @echo "Skipping tests while cross-building" else $(MAKE) -C cpp test cd go && go test -tags nomsgpack ./piscsi-web/... ./piscsi-oled ./piscsi-ctrlboard ./piscsi/... ./cmd/piscsi-oled ./cmd/piscsi-ctrlboard endif override_dh_auto_install: install -d debian/tmp/usr/bin debian/tmp/usr/share/man/man1 install -m 0755 cpp/bin/piscsi cpp/bin/scsictl cpp/bin/scsimon cpp/bin/scsiloop cpp/bin/scsidump cpp/bin/sasidump debian/tmp/usr/bin/ install -m 0755 debian/build/piscsi-web debian/build/piscsi-oled debian/build/piscsi-ctrlboard debian/tmp/usr/bin/ install -m 0644 doc/piscsi.1 doc/piscsi-web.1 doc/piscsi-oled.1 doc/piscsi-ctrlboard.1 doc/scsictl.1 doc/scsimon.1 doc/scsiloop.1 doc/scsidump.1 doc/sasidump.1 debian/tmp/usr/share/man/man1/ install -D -m 0644 go/piscsi-web/drive_properties.json debian/tmp/etc/piscsi-web/drive_properties.json install -D -m 0644 debian/piscsi-web.piscsi-web.env debian/tmp/etc/piscsi-web/piscsi-web.env @piscsi_version=$$(awk -F '[=;]' '\ /^const int piscsi_major_version =/ { major = $$2 + 0; have_major = 1 } \ /^const int piscsi_minor_version =/ { minor = $$2 + 0; have_minor = 1 } \ /^const int piscsi_patch_version =/ { patch = $$2 + 0; have_patch = 1 } \ END { if (!have_major || !have_minor || !have_patch) exit 1; printf "%d.%d.%d", major, minor, patch }' \ cpp/shared/piscsi_version.cpp); \ [ -n "$$piscsi_version" ] || { echo "could not determine PiSCSI version" >&2; exit 1; }; \ install -d debian/tmp/usr/share/piscsi-web; \ sed "s/@PISCSI_VERSION@/$$piscsi_version/" debian/piscsi-web.default.json.in > debian/tmp/usr/share/piscsi-web/default.json; \ chmod 0644 debian/tmp/usr/share/piscsi-web/default.json # Go's compressed DWARF sections are not supported by dwz, and some cross-built # C++ binaries also fail its optional ELF rewrite pass. override_dh_dwz: @: override_dh_auto_clean: $(MAKE) -C cpp clean rm -f go/proto/piscsi_interface.pb.go dh_clean debian/build/