GO ?= go EPOCH_TEST_COMMIT ?= 1cc5a27 PROJECT := github.com/kubernetes-incubator/cri-o GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null) GIT_BRANCH_CLEAN := $(shell echo $(GIT_BRANCH) | sed -e "s/[^[:alnum:]]/-/g") CRIO_IMAGE := crio_dev$(if $(GIT_BRANCH_CLEAN),:$(GIT_BRANCH_CLEAN)) CRIO_INSTANCE := crio_dev PREFIX ?= ${DESTDIR}/usr/local BINDIR ?= ${PREFIX}/bin LIBEXECDIR ?= ${PREFIX}/libexec MANDIR ?= ${PREFIX}/share/man ETCDIR ?= ${DESTDIR}/etc ETCDIR_CRIO ?= ${ETCDIR}/crio BUILDTAGS ?= selinux seccomp $(shell hack/btrfs_tag.sh) $(shell hack/libdm_tag.sh) BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions SELINUXOPT ?= $(shell test -x /usr/sbin/selinuxenabled && selinuxenabled && echo -Z) COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true) GIT_COMMIT := $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}") BUILD_INFO := $(shell date +%s) VERSION := ${shell cat ./VERSION} KPOD_VERSION := ${shell cat ./KPOD_VERSION} # If GOPATH not specified, use one in the local directory ifeq ($(GOPATH),) export GOPATH := $(CURDIR)/_output unexport GOBIN endif GOPKGDIR := $(GOPATH)/src/$(PROJECT) GOPKGBASEDIR := $(shell dirname "$(GOPKGDIR)") # Update VPATH so make finds .gopathok VPATH := $(VPATH):$(GOPATH) LDFLAGS := -ldflags '-X main.gitCommit=${GIT_COMMIT} -X main.buildInfo=${BUILD_INFO} -X main.version=${VERSION} -X main.kpodVersion=${KPOD_VERSION}' all: binaries crio.conf docs default: help help: @echo "Usage: make " @echo @echo " * 'install' - Install binaries to system locations" @echo " * 'binaries' - Build crio, conmon and crioctl" @echo " * 'integration' - Execute integration tests" @echo " * 'clean' - Clean artifacts" @echo " * 'lint' - Execute the source code linter" @echo " * 'gofmt' - Verify the source code gofmt" .gopathok: ifeq ("$(wildcard $(GOPKGDIR))","") mkdir -p "$(GOPKGBASEDIR)" ln -s "$(CURDIR)" "$(GOPKGBASEDIR)" endif touch "$(GOPATH)/.gopathok" lint: .gopathok @echo "checking lint" @./.tool/lint gofmt: @./hack/verify-gofmt.sh conmon: $(MAKE) -C $@ pause: $(MAKE) -C $@ test/bin2img/bin2img: .gopathok $(wildcard test/bin2img/*.go) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS)" -o $@ $(PROJECT)/test/bin2img test/copyimg/copyimg: .gopathok $(wildcard test/copyimg/*.go) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS)" -o $@ $(PROJECT)/test/copyimg test/checkseccomp/checkseccomp: .gopathok $(wildcard test/checkseccomp/*.go) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS)" -o $@ $(PROJECT)/test/checkseccomp crio: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/crio $(PROJECT)) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS)" -o $@ $(PROJECT)/cmd/crio crioctl: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/crioctl $(PROJECT)) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS)" -o $@ $(PROJECT)/cmd/crioctl kpod: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/kpod $(PROJECT)) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS)" -o $@ $(PROJECT)/cmd/kpod crio.conf: crio ./crio --config="" config --default > crio.conf clean: ifneq ($(GOPATH),) rm -f "$(GOPATH)/.gopathok" endif rm -rf _output rm -f docs/*.1 docs/*.5 docs/*.8 rm -fr test/testdata/redis-image find . -name \*~ -delete find . -name \#\* -delete rm -f crioctl crio kpod make -C conmon clean make -C pause clean rm -f test/bin2img/bin2img rm -f test/copyimg/copyimg rm -f test/checkseccomp/checkseccomp crioimage: docker build -t ${CRIO_IMAGE} . dbuild: crioimage docker run --name=${CRIO_INSTANCE} --privileged ${CRIO_IMAGE} -v ${PWD}:/go/src/${PROJECT} --rm make binaries integration: crioimage docker run -e TESTFLAGS -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${CRIO_IMAGE} make localintegration localintegration: clean binaries ./test/test_runner.sh ${TESTFLAGS} binaries: crio crioctl kpod conmon pause test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp MANPAGES_MD := $(wildcard docs/*.md) MANPAGES := $(MANPAGES_MD:%.md=%) docs/%.1: docs/%.1.md .gopathok (go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || ($(GOPATH)/bin/go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) docs/%.5: docs/%.5.md .gopathok (go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || ($(GOPATH)/bin/go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) docs/%.8: docs/%.8.md .gopathok (go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || ($(GOPATH)/bin/go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) docs: $(MANPAGES) install: .gopathok install ${SELINUXOPT} -D -m 755 crio $(BINDIR)/crio install ${SELINUXOPT} -D -m 755 crioctl $(BINDIR)/crioctl install ${SELINUXOPT} -D -m 755 kpod $(BINDIR)/kpod install ${SELINUXOPT} -D -m 755 conmon/conmon $(LIBEXECDIR)/crio/conmon install ${SELINUXOPT} -D -m 755 pause/pause $(LIBEXECDIR)/crio/pause install ${SELINUXOPT} -d -m 755 $(MANDIR)/man1 install ${SELINUXOPT} -d -m 755 $(MANDIR)/man5 install ${SELINUXOPT} -d -m 755 $(MANDIR)/man8 install ${SELINUXOPT} -m 644 $(filter %.1,$(MANPAGES)) -t $(MANDIR)/man1 install ${SELINUXOPT} -m 644 $(filter %.5,$(MANPAGES)) -t $(MANDIR)/man5 install ${SELINUXOPT} -m 644 $(filter %.8,$(MANPAGES)) -t $(MANDIR)/man8 install.config: install ${SELINUXOPT} -D -m 644 crio.conf $(ETCDIR_CRIO)/crio.conf install ${SELINUXOPT} -D -m 644 seccomp.json $(ETCDIR_CRIO)/seccomp.json install.completions: install ${SELINUXOPT} -d -m 755 ${BASHINSTALLDIR} install ${SELINUXOPT} -m 644 -D completions/bash/kpod ${BASHINSTALLDIR} install.systemd: install ${SELINUXOPT} -D -m 644 contrib/systemd/crio.service $(PREFIX)/lib/systemd/system/crio.service ln -sf crio.service $(PREFIX)/lib/systemd/system/cri-o.service install ${SELINUXOPT} -D -m 644 contrib/systemd/crio-shutdown.service $(PREFIX)/lib/systemd/system/crio-shutdown.service uninstall: rm -f $(BINDIR)/crio rm -f $(BINDIR)/crioctl rm -f $(LIBEXECDIR)/crio/conmon rm -f $(LIBEXECDIR)/crio/pause for i in $(filter %.1,$(MANPAGES)); do \ rm -f $(MANDIR)/man8/$$(basename $${i}); \ done for i in $(filter %.5,$(MANPAGES)); do \ rm -f $(MANDIR)/man5/$$(basename $${i}); \ done for i in $(filter %.8,$(MANPAGES)); do \ rm -f $(MANDIR)/man8/$$(basename $${i}); \ done .PHONY: .gitvalidation # When this is running in travis, it will only check the travis commit range .gitvalidation: .gopathok ifeq ($(TRAVIS),true) GIT_CHECK_EXCLUDE="./vendor" $(GOPATH)/bin/git-validation -q -run DCO,short-subject,dangling-whitespace else GIT_CHECK_EXCLUDE="./vendor" $(GOPATH)/bin/git-validation -v -run DCO,short-subject,dangling-whitespace -range $(EPOCH_TEST_COMMIT)..HEAD endif .PHONY: install.tools install.tools: .install.gitvalidation .install.gometalinter .install.md2man .install.gitvalidation: .gopathok if [ ! -x "$(GOPATH)/bin/git-validation" ]; then \ go get -u github.com/vbatts/git-validation; \ fi .install.gometalinter: .gopathok if [ ! -x "$(GOPATH)/bin/gometalinter" ]; then \ go get -u github.com/alecthomas/gometalinter; \ cd $(GOPATH)/src/github.com/alecthomas/gometalinter; \ git checkout 23261fa046586808612c61da7a81d75a658e0814; \ go install github.com/alecthomas/gometalinter; \ $(GOPATH)/bin/gometalinter --install; \ fi .install.md2man: .gopathok if [ ! -x "$(GOPATH)/bin/go-md2man" ]; then \ go get -u github.com/cpuguy83/go-md2man; \ fi .install.ostree: .gopathok if ! pkg-config ostree-1 2> /dev/null ; then \ git clone https://github.com/ostreedev/ostree $(GOPATH)/src/github.com/ostreedev/ostree ; \ cd $(GOPATH)/src/github.com/ostreedev/ostree ; \ ./autogen.sh --prefix=/usr/local; \ make all install; \ fi .PHONY: \ binaries \ clean \ conmon \ default \ docs \ gofmt \ help \ install \ lint \ pause \ uninstall