# Copyright (c) 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. MODULE := github.com/NVIDIA/go-nvlib DOCKER ?= docker GOLANG_VERSION := 1.21.1 ifeq ($(IMAGE),) REGISTRY ?= nvidia IMAGE=$(REGISTRY)/go-nvlib endif IMAGE_TAG ?= $(GOLANG_VERSION) BUILDIMAGE ?= $(IMAGE):$(IMAGE_TAG)-devel PCI_IDS_URL ?= https://pci-ids.ucw.cz/v2.2/pci.ids TARGETS := binary build all check fmt assert-fmt generate lint vet test coverage DOCKER_TARGETS := $(patsubst %,docker-%, $(TARGETS)) .PHONY: $(TARGETS) $(DOCKER_TARGETS) GOOS := linux build: GOOS=$(GOOS) go build ./... all: check build binary check: assert-fmt lint vet # Apply go fmt to the codebase fmt: go list -f '{{.Dir}}' $(MODULE)/... \ | xargs gofmt -s -l -w assert-fmt: go list -f '{{.Dir}}' $(MODULE)/... \ | xargs gofmt -s -l > fmt.out @if [ -s fmt.out ]; then \ echo "\nERROR: The following files are not formatted:\n"; \ cat fmt.out; \ rm fmt.out; \ exit 1; \ else \ rm fmt.out; \ fi generate: go generate $(MODULE)/... lint: # We use `go list -f '{{.Dir}}' $(MODULE)/...` to skip the `vendor` folder. go list -f '{{.Dir}}' $(MODULE)/... | grep -v pkg/nvml | xargs golint -set_exit_status vet: go vet $(MODULE)/... COVERAGE_FILE := coverage.out test: build go test -v -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 update-pcidb: wget $(PCI_IDS_URL) -O $(CURDIR)/pkg/pciids/default_pci.ids # Generate an image for containerized builds # Note: This image is local only .PHONY: .build-image .pull-build-image .push-build-image .build-image: docker/Dockerfile.devel if [ "$(SKIP_IMAGE_BUILD)" = "" ]; then \ $(DOCKER) build \ --progress=plain \ --build-arg GOLANG_VERSION="$(GOLANG_VERSION)" \ --tag $(BUILDIMAGE) \ -f $(^) \ docker; \ fi .pull-build-image: $(DOCKER) pull $(BUILDIMAGE) .push-build-image: $(DOCKER) push $(BUILDIMAGE) $(DOCKER_TARGETS): docker-%: .build-image @echo "Running 'make $(*)' in docker container $(BUILDIMAGE)" $(DOCKER) run \ --rm \ -e GOCACHE=/tmp/.cache \ -v $(PWD):$(PWD) \ -w $(PWD) \ --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 \ -v $(PWD):$(PWD) \ -w $(PWD) \ --user $$(id -u):$$(id -g) \ $(BUILDIMAGE)