mirror of
				https://github.com/NVIDIA/nvidia-container-toolkit
				synced 2025-06-26 18:18:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
# 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:  | mod-tidy mod-vendor mod-verify
 | 
						|
 | 
						|
mod-tidy:
 | 
						|
	@for mod in $$(find . -name go.mod -not -path "./testdata/*" -not -path "./third_party/*"); do \
 | 
						|
	    echo "Tidying $$mod..."; ( \
 | 
						|
	        cd $$(dirname $$mod) && go mod tidy \
 | 
						|
            ) || exit 1; \
 | 
						|
	done
 | 
						|
 | 
						|
mod-vendor:
 | 
						|
	@for mod in $$(find . -name go.mod -not -path "./testdata/*" -not -path "./third_party/*" -not -path "./deployments/*"); do \
 | 
						|
		echo "Vendoring $$mod..."; ( \
 | 
						|
			cd $$(dirname $$mod) && go mod vendor \
 | 
						|
			) || exit 1; \
 | 
						|
	done
 | 
						|
 | 
						|
mod-verify:
 | 
						|
	@for mod in $$(find . -name go.mod -not -path "./testdata/*" -not -path "./third_party/*"); do \
 | 
						|
	    echo "Verifying $$mod..."; ( \
 | 
						|
	        cd $$(dirname $$mod) && go mod verify | sed 's/^/  /g' \
 | 
						|
	    ) || exit 1; \
 | 
						|
	done
 | 
						|
 | 
						|
 | 
						|
check-vendor: vendor
 | 
						|
	git diff --exit-code 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)
 |