From 11d6080941884b681bedb0d9299b63f622a2e38d Mon Sep 17 00:00:00 2001
From: Kevin Klues <kklues@nvidia.com>
Date: Mon, 22 Mar 2021 10:57:58 +0000
Subject: [PATCH] Add Makefile and build targets

Signed-off-by: Kevin Klues <kklues@nvidia.com>
---
 Makefile                | 95 +++++++++++++++++++++++++++++++++++++++++
 docker/Dockerfile.devel | 17 ++++++++
 2 files changed, 112 insertions(+)
 create mode 100644 Makefile
 create mode 100644 docker/Dockerfile.devel

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..61ccd68
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,95 @@
+# 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 := gitlab.com/nvidia/cloud-native/go-nvlib
+
+DOCKER ?= docker
+
+GOLANG_VERSION := 1.15
+
+ifeq ($(IMAGE),)
+REGISTRY ?= nvidia
+IMAGE=$(REGISTRY)/go-nvlib
+endif
+IMAGE_TAG ?= $(GOLANG_VERSION)
+BUILDIMAGE ?= $(IMAGE):$(IMAGE_TAG)-devel
+
+TARGETS := binary build all check fmt assert-fmt lint vet test
+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
+
+lint:
+	# We use `go list -f '{{.Dir}}' $(MODULE)/...` to skip the `vendor` folder.
+	go list -f '{{.Dir}}' $(MODULE)/... | xargs golint -set_exit_status
+
+vet:
+	go vet $(MODULE)/...
+
+test:
+	go test $(MODULE)/...
+
+# 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 $(*)
diff --git a/docker/Dockerfile.devel b/docker/Dockerfile.devel
new file mode 100644
index 0000000..e72f097
--- /dev/null
+++ b/docker/Dockerfile.devel
@@ -0,0 +1,17 @@
+# 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.
+ARG GOLANG_VERSION=1.15
+FROM golang:${GOLANG_VERSION}
+
+RUN go get -u golang.org/x/lint/golint