diff --git a/Makefile b/Makefile index 8ef57c08..b10d5a4b 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ GO ?= GO15VENDOREXPERIMENT=1 go GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) +GOARCH := $(shell $(GO) env GOARCH) PROMU ?= $(GOPATH)/bin/promu STATICCHECK ?= $(GOPATH)/bin/staticcheck @@ -37,7 +38,22 @@ else test-e2e := skip-test-e2e endif -all: format vet staticcheck build test $(test-e2e) +# 64bit -> 32bit mapping for cross-checking. At least for amd64/386, the 64bit CPU can execute 32bit code but not the other way around, so we don't support cross-testing upwards. +cross-test = skip-test-32bit +define goarch_pair +ifeq ($$(GOARCH),$1) + GOARCH_CROSS = $2 + cross-test = test-32bit +endif +endef + +# By default, "cross" test with ourselves to cover unknown pairings. +$(eval $(call goarch_pair,amd64,386)) +$(eval $(call goarch_pair,arm64,arm)) +$(eval $(call goarch_pair,mips64,mips)) +$(eval $(call goarch_pair,mips64el,mipsel)) + +all: format vet staticcheck build test $(cross-test) $(test-e2e) style: @echo ">> checking code style" @@ -47,6 +63,13 @@ test: collector/fixtures/sys/.unpacked @echo ">> running tests" @$(GO) test -short -race $(pkgs) +test-32bit: collector/fixtures/sys/.unpacked + @echo ">> running tests in 32-bit mode" + @env GOARCH=$(GOARCH_CROSS) $(GO) test $(pkgs) + +skip-test-32bit: + @echo ">> SKIP running tests in 32-bit mode: not supported on $(GOARCH)" + collector/fixtures/sys/.unpacked: collector/fixtures/sys.ttar ./ttar -C collector/fixtures -x -f collector/fixtures/sys.ttar touch $@