| # Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| DOCKER ?= docker |
| MKDIR ?= mkdir |
| DIST_DIR ?= $(CURDIR)/dist |
| |
| include $(CURDIR)/versions.mk |
| |
| MODULE := github.com/NVIDIA/nvidia-container-toolkit |
| |
| # By default run all native docker-based targets |
| docker-native: |
| include $(CURDIR)/docker/docker.mk |
| |
| ifeq ($(IMAGE_NAME),) |
| REGISTRY ?= nvidia |
| IMAGE_NAME = $(REGISTRY)/container-toolkit |
| endif |
| |
| BUILDIMAGE_TAG ?= golang$(GOLANG_VERSION) |
| BUILDIMAGE ?= $(IMAGE_NAME)-build:$(BUILDIMAGE_TAG) |
| |
| EXAMPLES := $(patsubst ./examples/%/,%,$(sort $(dir $(wildcard ./examples/*/)))) |
| EXAMPLE_TARGETS := $(patsubst %,example-%, $(EXAMPLES)) |
| |
| CMDS := $(patsubst ./cmd/%/,%,$(sort $(dir $(wildcard ./cmd/*/)))) |
| CMD_TARGETS := $(patsubst %,cmd-%, $(CMDS)) |
| |
| CHECK_TARGETS := lint |
| MAKE_TARGETS := binaries build check fmt test examples cmds coverage generate licenses vendor check-vendor $(CHECK_TARGETS) |
| |
| TARGETS := $(MAKE_TARGETS) $(EXAMPLE_TARGETS) $(CMD_TARGETS) |
| |
| DOCKER_TARGETS := $(patsubst %,docker-%, $(TARGETS)) |
| .PHONY: $(TARGETS) $(DOCKER_TARGETS) |
| |
| ifeq ($(VERSION),) |
| CLI_VERSION = $(LIB_VERSION)$(if $(LIB_TAG),-$(LIB_TAG)) |
| else |
| CLI_VERSION = $(VERSION) |
| endif |
| CLI_VERSION_PACKAGE = github.com/NVIDIA/nvidia-container-toolkit/internal/info |
| |
| binaries: cmds |
| ifneq ($(PREFIX),) |
| cmd-%: COMMAND_BUILD_OPTIONS = -o $(PREFIX)/$(*) |
| endif |
| cmds: $(CMD_TARGETS) |
| |
| ifneq ($(shell uname),Darwin) |
| EXTLDFLAGS = -Wl,--export-dynamic -Wl,--unresolved-symbols=ignore-in-object-files -Wl,-z,lazy |
| else |
| EXTLDFLAGS = -Wl,-undefined,dynamic_lookup |
| endif |
| $(CMD_TARGETS): cmd-%: |
| go build -ldflags "-s -w '-extldflags=$(EXTLDFLAGS)' -X $(CLI_VERSION_PACKAGE).gitCommit=$(GIT_COMMIT) -X $(CLI_VERSION_PACKAGE).version=$(CLI_VERSION)" $(COMMAND_BUILD_OPTIONS) $(MODULE)/cmd/$(*) |
| |
| build: |
| go build ./... |
| |
| examples: $(EXAMPLE_TARGETS) |
| $(EXAMPLE_TARGETS): example-%: |
| go build ./examples/$(*) |
| |
| all: check test build binary |
| check: $(CHECK_TARGETS) |
| |
| # Apply go fmt to the codebase |
| fmt: |
| go list -f '{{.Dir}}' $(MODULE)/... \ |
| | xargs gofmt -s -l -w |
| |
| # Apply goimports -local github.com/NVIDIA/container-toolkit to the codebase |
| goimports: |
| go list -f {{.Dir}} $(MODULE)/... \ |
| | xargs goimports -local $(MODULE) -w |
| |
| lint: |
| golangci-lint run ./... |
| |
| vendor: |
| go mod tidy |
| go mod vendor |
| go mod verify |
| |
| check-vendor: vendor |
| git diff --quiet HEAD -- go.mod go.sum vendor |
| |
| licenses: |
| go-licenses csv $(MODULE)/... |
| |
| COVERAGE_FILE := coverage.out |
| test: build cmds |
| go test -coverprofile=$(COVERAGE_FILE) $(MODULE)/... |
| |
| coverage: test |
| cat $(COVERAGE_FILE) | grep -v "_mock.go" > $(COVERAGE_FILE).no-mocks |
| go tool cover -func=$(COVERAGE_FILE).no-mocks |
| |
| generate: |
| go generate $(MODULE)/... |
| |
| # Generate an image for containerized builds |
| # Note: This image is local only |
| .PHONY: .build-image |
| .build-image: |
| make -f deployments/devel/Makefile .build-image |
| |
| ifeq ($(BUILD_DEVEL_IMAGE),yes) |
| $(DOCKER_TARGETS): .build-image |
| .shell: .build-image |
| endif |
| |
| $(DOCKER_TARGETS): docker-%: |
| @echo "Running 'make $(*)' in container image $(BUILDIMAGE)" |
| $(DOCKER) run \ |
| --rm \ |
| -e GOCACHE=/tmp/.cache/go \ |
| -e GOMODCACHE=/tmp/.cache/gomod \ |
| -e GOLANGCI_LINT_CACHE=/tmp/.cache/golangci-lint \ |
| -v $(PWD):/work \ |
| -w /work \ |
| --user $$(id -u):$$(id -g) \ |
| $(BUILDIMAGE) \ |
| make $(*) |
| |
| # Start an interactive shell using the development image. |
| PHONY: .shell |
| .shell: |
| $(DOCKER) run \ |
| --rm \ |
| -ti \ |
| -e GOCACHE=/tmp/.cache/go \ |
| -e GOMODCACHE=/tmp/.cache/gomod \ |
| -e GOLANGCI_LINT_CACHE=/tmp/.cache/golangci-lint \ |
| -v $(PWD):/work \ |
| -w /work \ |
| --user $$(id -u):$$(id -g) \ |
| $(BUILDIMAGE) |