+GO = $(shell which go)
GOMAINSRCS = $(shell find . -type f -name main.go | cut -c 3- | paste -s -d ' ' -)
GOMAINDIRS = $(GOMAINSRCS:/main.go=)
-GOOS ?= $(shell go env GOOS)
-GOARCH ?= $(shell go env GOARCH)
+GOOS ?= $(shell $(GO) env GOOS)
+GOARCH ?= $(shell $(GO) env GOARCH)
-ifeq ($(GOOS)/$(GOARCH),$(shell env - go env GOOS)/$(shell env - go env GOARCH))
+ifeq ($(GOOS)/$(GOARCH),$(shell env - $(GO) env GOOS)/$(shell env - $(GO) env GOARCH))
NATIVE_BUILD := 1
else
NATIVE_BUILD := 0
LDFLAGS += -X "go.fuhry.dev/runtime/constants.IntCAName=$(INT_CA_NAME)"
LDFLAGS += -X "go.fuhry.dev/runtime/constants.DeviceTrustTokenName=$(DEVICE_TRUST_TOKEN_NAME)"
-define GOPROG_template =
+define GOPROG_template
GOMAINS += $(1)/$(2)
all: $(1)/$(2)
$(1)/$(2): $(1)/main.go
- go build -ldflags '$$(LDFLAGS)' $$(GOBUILDFLAGS) -o $$@ $$<
+ $(GO) build -ldflags '$$(LDFLAGS)' $$(GOBUILDFLAGS) -o $$@ $$<
endef
$(foreach maindir,$(GOMAINDIRS),$(eval $(call GOPROG_template,$(maindir),$(shell basename $(maindir)))))
-.PHONY: $(GOMAINDIRS) clean all
+.PHONY: clean all list
clean:
if test -z "$(GOMAINS)"; then \
exit 1; \
fi
rm -fv $(GOMAINS)
+
+list:
+ @LC_ALL=C $(MAKE) -pRrq -f $(firstword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/(^|\n)# Files(\n|$$)/,/(^|\n)# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | grep -E -v -e '^[^[:alnum:]]' -e '^$@$$'