mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-31 16:36:38 +00:00
build: Move CLI makefile to top level
Merge `cli/Makefile` with the top level `Makefile`. Also includes a Travis config update. Fixes #88. Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
This commit is contained in:
10
.travis.yml
10
.travis.yml
@@ -9,10 +9,6 @@ dist: trusty
|
||||
|
||||
language: go
|
||||
|
||||
env:
|
||||
- KATA_RUNTIME=cc
|
||||
- KATA_RUNTIME=runv
|
||||
|
||||
go:
|
||||
- 1.8
|
||||
|
||||
@@ -21,7 +17,5 @@ before_script:
|
||||
|
||||
install:
|
||||
- cd ${TRAVIS_BUILD_DIR}
|
||||
- pushd cli
|
||||
- make KATA_RUNTIME=${KATA_RUNTIME}
|
||||
- sudo -E PATH=$PATH make KATA_RUNTIME=${KATA_RUNTIME} install
|
||||
- popd
|
||||
- make
|
||||
- sudo -E PATH=$PATH make install
|
||||
|
482
Makefile
482
Makefile
@@ -4,20 +4,484 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
distro := $(shell \
|
||||
for file in /etc/os-release /usr/lib/os-release; do \
|
||||
if [ -e $$file ]; then \
|
||||
grep ^ID= $$file|cut -d= -f2-|tr -d '"'; \
|
||||
break; \
|
||||
fi \
|
||||
done)
|
||||
|
||||
GOARCH=$(shell go env GOARCH)
|
||||
HOST_ARCH=$(shell arch)
|
||||
|
||||
ifeq ($(ARCH),)
|
||||
ARCH = $(GOARCH)
|
||||
endif
|
||||
|
||||
ARCH_DIR = arch
|
||||
ARCH_FILE_SUFFIX = -options.mk
|
||||
ARCH_FILE = $(ARCH_DIR)/$(ARCH)$(ARCH_FILE_SUFFIX)
|
||||
ARCH_FILES = $(wildcard arch/*$(ARCH_FILE_SUFFIX))
|
||||
ALL_ARCHES = $(patsubst $(ARCH_DIR)/%$(ARCH_FILE_SUFFIX),%,$(ARCH_FILES))
|
||||
|
||||
# Load architecture-dependent settings
|
||||
include $(ARCH_FILE)
|
||||
|
||||
PROJECT_TYPE = kata
|
||||
PROJECT_NAME = Kata Containers
|
||||
PROJECT_TAG = kata-containers
|
||||
PROJECT_URL = https://github.com/kata-containers
|
||||
PROJECT_BUG_URL = $(PROJECT_URL)/kata-containers/issues/new
|
||||
|
||||
BIN_PREFIX = $(PROJECT_TYPE)
|
||||
PROJECT_DIR = $(PROJECT_TAG)
|
||||
IMAGENAME = $(PROJECT_TAG).img
|
||||
|
||||
TARGET = $(BIN_PREFIX)-runtime
|
||||
TARGET_OUTPUT = $(CURDIR)/$(TARGET)
|
||||
|
||||
DESTDIR :=
|
||||
|
||||
installing = $(findstring install,$(MAKECMDGOALS))
|
||||
|
||||
# Configure the build for a standard system that is
|
||||
# using OBS-generated packages.
|
||||
PREFIX := /usr
|
||||
BINDIR := $(PREFIX)/bin
|
||||
DESTBINDIR := /usr/local/bin
|
||||
QEMUBINDIR := $(BINDIR)
|
||||
SYSCONFDIR := /etc
|
||||
LOCALSTATEDIR := /var
|
||||
|
||||
ifeq (,$(installing))
|
||||
# Force a rebuild to ensure version details are correct
|
||||
# (but only for a non-install build phase).
|
||||
EXTRA_DEPS = clean
|
||||
endif
|
||||
|
||||
LIBEXECDIR := $(PREFIX)/libexec
|
||||
SHAREDIR := $(PREFIX)/share
|
||||
DEFAULTSDIR := $(SHAREDIR)/defaults
|
||||
|
||||
PKGDATADIR := $(SHAREDIR)/$(PROJECT_DIR)
|
||||
PKGLIBDIR := $(LOCALSTATEDIR)/lib/$(PROJECT_DIR)
|
||||
PKGRUNDIR := $(LOCALSTATEDIR)/run/$(PROJECT_DIR)
|
||||
PKGLIBEXECDIR := $(LIBEXECDIR)/$(PROJECT_DIR)
|
||||
|
||||
KERNELPATH := $(PKGDATADIR)/vmlinuz.container
|
||||
IMAGEPATH := $(PKGDATADIR)/$(IMAGENAME)
|
||||
FIRMWAREPATH :=
|
||||
|
||||
QEMUPATH := $(QEMUBINDIR)/$(QEMUCMD)
|
||||
|
||||
SHIMCMD := $(BIN_PREFIX)-shim
|
||||
SHIMPATH := $(PKGLIBEXECDIR)/$(SHIMCMD)
|
||||
|
||||
PROXYCMD := $(BIN_PREFIX)-proxy
|
||||
PROXYPATH := $(PKGLIBEXECDIR)/$(PROXYCMD)
|
||||
|
||||
# Default number of vCPUs
|
||||
DEFVCPUS := 1
|
||||
# Default memory size in MiB
|
||||
DEFMEMSZ := 2048
|
||||
#Default number of bridges
|
||||
DEFBRIDGES := 1
|
||||
#Default network model
|
||||
DEFNETWORKMODEL := macvtap
|
||||
|
||||
DEFDISABLEBLOCK := false
|
||||
DEFBLOCKSTORAGEDRIVER := virtio-scsi
|
||||
DEFENABLEMEMPREALLOC := false
|
||||
DEFENABLEHUGEPAGES := false
|
||||
DEFENABLESWAP := false
|
||||
DEFENABLEDEBUG := false
|
||||
DEFDISABLENESTINGCHECKS := false
|
||||
|
||||
SED = sed
|
||||
|
||||
CLI_DIR = cli
|
||||
SOURCES := $(shell find . 2>&1 | grep -E '.*\.(c|h|go)$$')
|
||||
VERSION := ${shell cat ./VERSION}
|
||||
COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true)
|
||||
COMMIT := $(if $(shell git status --porcelain --untracked-files=no),${COMMIT_NO}-dirty,${COMMIT_NO})
|
||||
|
||||
CONFIG_FILE = configuration.toml
|
||||
CONFIG = $(CLI_DIR)/config/$(CONFIG_FILE)
|
||||
CONFIG_IN = $(CONFIG).in
|
||||
|
||||
DESTTARGET := $(abspath $(DESTBINDIR)/$(TARGET))
|
||||
|
||||
DESTCONFDIR := $(DESTDIR)/$(DEFAULTSDIR)/$(PROJECT_DIR)
|
||||
DESTSYSCONFDIR := $(DESTDIR)/$(SYSCONFDIR)/$(PROJECT_DIR)
|
||||
|
||||
# Main configuration file location for stateless systems
|
||||
DESTCONFIG := $(abspath $(DESTCONFDIR)/$(CONFIG_FILE))
|
||||
|
||||
# Secondary configuration file location. Note that this takes precedence
|
||||
# over DESTCONFIG.
|
||||
DESTSYSCONFIG := $(abspath $(DESTSYSCONFDIR)/$(CONFIG_FILE))
|
||||
|
||||
DESTSHAREDIR := $(DESTDIR)/$(SHAREDIR)
|
||||
|
||||
SCRIPTS_DIR := $(BINDIR)
|
||||
|
||||
# list of variables the user may wish to override
|
||||
USER_VARS += ARCH
|
||||
USER_VARS += BINDIR
|
||||
USER_VARS += DESTCONFIG
|
||||
USER_VARS += DESTDIR
|
||||
USER_VARS += DESTSYSCONFIG
|
||||
USER_VARS += DESTTARGET
|
||||
USER_VARS += IMAGENAME
|
||||
USER_VARS += IMAGEPATH
|
||||
USER_VARS += MACHINETYPE
|
||||
USER_VARS += KERNELPATH
|
||||
USER_VARS += FIRMWAREPATH
|
||||
USER_VARS += MACHINEACCELERATORS
|
||||
USER_VARS += KERNELPARAMS
|
||||
USER_VARS += LIBEXECDIR
|
||||
USER_VARS += LOCALSTATEDIR
|
||||
USER_VARS += PKGDATADIR
|
||||
USER_VARS += PKGLIBDIR
|
||||
USER_VARS += PKGLIBEXECDIR
|
||||
USER_VARS += PKGRUNDIR
|
||||
USER_VARS += PREFIX
|
||||
USER_VARS += PROJECT_NAME
|
||||
USER_VARS += PROJECT_PREFIX
|
||||
USER_VARS += PROJECT_TYPE
|
||||
USER_VARS += PROXYPATH
|
||||
USER_VARS += QEMUBINDIR
|
||||
USER_VARS += QEMUCMD
|
||||
USER_VARS += QEMUPATH
|
||||
USER_VARS += SHAREDIR
|
||||
USER_VARS += SHIMPATH
|
||||
USER_VARS += SYSCONFDIR
|
||||
USER_VARS += DEFVCPUS
|
||||
USER_VARS += DEFMEMSZ
|
||||
USER_VARS += DEFBRIDGES
|
||||
USER_VARS += DEFNETWORKMODEL
|
||||
USER_VARS += DEFDISABLEBLOCK
|
||||
USER_VARS += DEFBLOCKSTORAGEDRIVER
|
||||
USER_VARS += DEFENABLEMEMPREALLOC
|
||||
USER_VARS += DEFENABLEHUGEPAGES
|
||||
USER_VARS += DEFENABLESWAP
|
||||
USER_VARS += DEFENABLEDEBUG
|
||||
USER_VARS += DEFDISABLENESTINGCHECKS
|
||||
|
||||
V = @
|
||||
Q = $(V:1=)
|
||||
QUIET_BUILD = $(Q:@=@echo ' BUILD '$@;)
|
||||
QUIET_CHECK = $(Q:@=@echo ' CHECK '$@;)
|
||||
QUIET_CLEAN = $(Q:@=@echo ' CLEAN '$@;)
|
||||
QUIET_CONFIG = $(Q:@=@echo ' CONFIG '$@;)
|
||||
QUIET_GENERATE = $(Q:@=@echo ' GENERATE '$@;)
|
||||
QUIET_INST = $(Q:@=@echo ' INSTALL '$@;)
|
||||
QUIET_TEST = $(Q:@=@echo ' TEST '$@;)
|
||||
|
||||
# Return non-empty string if specified directory exists
|
||||
define DIR_EXISTS
|
||||
$(shell test -d $(1) && echo "$(1)")
|
||||
endef
|
||||
|
||||
# $1: name of architecture to display
|
||||
define SHOW_ARCH
|
||||
$(shell printf "\\t%s%s\\\n" "$(1)" $(if $(filter $(ARCH),$(1))," (default)",""))
|
||||
endef
|
||||
|
||||
# Only install git hooks if working in a git clone
|
||||
ifneq (,$(call DIR_EXISTS,.git))
|
||||
HANDLE_GIT_HOOKS = install-git-hooks
|
||||
endif
|
||||
|
||||
# Don't install hooks when running under the CI as they will stop the
|
||||
# tests from running.
|
||||
#
|
||||
# See: https://github.com/clearcontainers/runtime/issues/984
|
||||
ifneq (,$(CI))
|
||||
HANDLE_GIT_HOOKS =
|
||||
endif
|
||||
|
||||
all: runtime
|
||||
|
||||
runtime:
|
||||
make -C cli
|
||||
runtime: $(TARGET_OUTPUT) $(CONFIG) $(HANDLE_GIT_HOOKS)
|
||||
.DEFAULT: default
|
||||
|
||||
install:
|
||||
make -C cli install
|
||||
build: default
|
||||
|
||||
define GENERATED_CODE
|
||||
// WARNING: This file is auto-generated - DO NOT EDIT!
|
||||
//
|
||||
// Note that some variables are "var" to allow them to be modified
|
||||
// by the tests.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// name is the name of the runtime
|
||||
const name = "$(TARGET)"
|
||||
|
||||
// name of the project
|
||||
const project = "$(PROJECT_NAME)"
|
||||
|
||||
// prefix used to denote non-standard CLI commands and options.
|
||||
const projectPrefix = "$(PROJECT_TYPE)"
|
||||
|
||||
// systemdUnitName is the systemd(1) target used to launch the agent.
|
||||
const systemdUnitName = "$(PROJECT_TAG).target"
|
||||
|
||||
// original URL for this project
|
||||
const projectURL = "$(PROJECT_URL)"
|
||||
|
||||
// commit is the git commit the runtime is compiled from.
|
||||
var commit = "$(COMMIT)"
|
||||
|
||||
// version is the runtime version.
|
||||
var version = "$(VERSION)"
|
||||
|
||||
// project-specific command names
|
||||
var envCmd = fmt.Sprintf("%s-env", projectPrefix)
|
||||
var checkCmd = fmt.Sprintf("%s-check", projectPrefix)
|
||||
|
||||
// project-specific option names
|
||||
var configFilePathOption = fmt.Sprintf("%s-config", projectPrefix)
|
||||
var showConfigPathsOption = fmt.Sprintf("%s-show-default-config-paths", projectPrefix)
|
||||
|
||||
var defaultHypervisorPath = "$(QEMUPATH)"
|
||||
var defaultImagePath = "$(IMAGEPATH)"
|
||||
var defaultKernelPath = "$(KERNELPATH)"
|
||||
var defaultFirmwarePath = "$(FIRMWAREPATH)"
|
||||
var defaultMachineAccelerators = "$(MACHINEACCELERATORS)"
|
||||
var defaultShimPath = "$(SHIMPATH)"
|
||||
|
||||
const defaultKernelParams = "$(KERNELPARAMS)"
|
||||
const defaultMachineType = "$(MACHINETYPE)"
|
||||
const defaultRootDirectory = "$(PKGRUNDIR)"
|
||||
|
||||
const defaultVCPUCount uint32 = $(DEFVCPUS)
|
||||
const defaultMemSize uint32 = $(DEFMEMSZ) // MiB
|
||||
const defaultBridgesCount uint32 = $(DEFBRIDGES)
|
||||
const defaultInterNetworkingModel = "$(DEFNETWORKMODEL)"
|
||||
const defaultDisableBlockDeviceUse bool = $(DEFDISABLEBLOCK)
|
||||
const defaultBlockDeviceDriver = "$(DEFBLOCKSTORAGEDRIVER)"
|
||||
const defaultEnableMemPrealloc bool = $(DEFENABLEMEMPREALLOC)
|
||||
const defaultEnableHugePages bool = $(DEFENABLEHUGEPAGES)
|
||||
const defaultEnableSwap bool = $(DEFENABLESWAP)
|
||||
const defaultEnableDebug bool = $(DEFENABLEDEBUG)
|
||||
const defaultDisableNestingChecks bool = $(DEFDISABLENESTINGCHECKS)
|
||||
|
||||
// Default config file used by stateless systems.
|
||||
var defaultRuntimeConfiguration = "$(DESTCONFIG)"
|
||||
|
||||
// Alternate config file that takes precedence over
|
||||
// defaultRuntimeConfiguration.
|
||||
var defaultSysConfRuntimeConfiguration = "$(DESTSYSCONFIG)"
|
||||
|
||||
var defaultProxyPath = "$(PROXYPATH)"
|
||||
endef
|
||||
|
||||
export GENERATED_CODE
|
||||
|
||||
#Install an executable file
|
||||
# params:
|
||||
# $1 : file to install
|
||||
# $2 : directory path where file will be installed
|
||||
define INSTALL_EXEC
|
||||
$(QUIET_INST)install -D $1 $(DESTDIR)$2/$(notdir $1);
|
||||
endef
|
||||
|
||||
GENERATED_CONFIG = $(CLI_DIR)/config-generated.go
|
||||
|
||||
GENERATED_GO_FILES += $(GENERATED_CONFIG)
|
||||
|
||||
$(GENERATED_CONFIG): Makefile VERSION
|
||||
$(QUIET_GENERATE)echo "$$GENERATED_CODE" >$@
|
||||
|
||||
$(TARGET_OUTPUT): $(EXTRA_DEPS) $(SOURCES) $(GENERATED_GO_FILES) $(GENERATED_FILES) Makefile | show-summary
|
||||
$(QUIET_BUILD)(cd $(CLI_DIR) && go build -i -o $@ .)
|
||||
|
||||
.PHONY: \
|
||||
check \
|
||||
check-go-static \
|
||||
check-go-test \
|
||||
coverage \
|
||||
default \
|
||||
install \
|
||||
install-git-hooks \
|
||||
show-header \
|
||||
show-summary \
|
||||
show-variables
|
||||
|
||||
$(TARGET).coverage: $(SOURCES) $(GENERATED_FILES) Makefile
|
||||
$(QUIET_TEST)go test -o $@ -covermode count
|
||||
|
||||
GENERATED_FILES += $(CONFIG)
|
||||
|
||||
$(GENERATED_FILES): %: %.in Makefile VERSION
|
||||
$(QUIET_CONFIG)$(SED) \
|
||||
-e "s|@COMMIT@|$(COMMIT)|g" \
|
||||
-e "s|@VERSION@|$(VERSION)|g" \
|
||||
-e "s|@CONFIG_IN@|$(CONFIG_IN)|g" \
|
||||
-e "s|@DESTCONFIG@|$(DESTCONFIG)|g" \
|
||||
-e "s|@DESTSYSCONFIG@|$(DESTSYSCONFIG)|g" \
|
||||
-e "s|@IMAGEPATH@|$(IMAGEPATH)|g" \
|
||||
-e "s|@KERNELPATH@|$(KERNELPATH)|g" \
|
||||
-e "s|@FIRMWAREPATH@|$(FIRMWAREPATH)|g" \
|
||||
-e "s|@MACHINEACCELERATORS@|$(MACHINEACCELERATORS)|g" \
|
||||
-e "s|@KERNELPARAMS@|$(KERNELPARAMS)|g" \
|
||||
-e "s|@LOCALSTATEDIR@|$(LOCALSTATEDIR)|g" \
|
||||
-e "s|@PKGLIBEXECDIR@|$(PKGLIBEXECDIR)|g" \
|
||||
-e "s|@PROXYPATH@|$(PROXYPATH)|g" \
|
||||
-e "s|@PROJECT_BUG_URL@|$(PROJECT_BUG_URL)|g" \
|
||||
-e "s|@PROJECT_URL@|$(PROJECT_URL)|g" \
|
||||
-e "s|@PROJECT_NAME@|$(PROJECT_NAME)|g" \
|
||||
-e "s|@PROJECT_TAG@|$(PROJECT_TAG)|g" \
|
||||
-e "s|@PROJECT_TYPE@|$(PROJECT_TYPE)|g" \
|
||||
-e "s|@QEMUPATH@|$(QEMUPATH)|g" \
|
||||
-e "s|@RUNTIME_NAME@|$(TARGET)|g" \
|
||||
-e "s|@MACHINETYPE@|$(MACHINETYPE)|g" \
|
||||
-e "s|@SHIMPATH@|$(SHIMPATH)|g" \
|
||||
-e "s|@DEFVCPUS@|$(DEFVCPUS)|g" \
|
||||
-e "s|@DEFMEMSZ@|$(DEFMEMSZ)|g" \
|
||||
-e "s|@DEFBRIDGES@|$(DEFBRIDGES)|g" \
|
||||
-e "s|@DEFNETWORKMODEL@|$(DEFNETWORKMODEL)|g" \
|
||||
-e "s|@DEFDISABLEBLOCK@|$(DEFDISABLEBLOCK)|g" \
|
||||
-e "s|@DEFBLOCKSTORAGEDRIVER@|$(DEFBLOCKSTORAGEDRIVER)|g" \
|
||||
-e "s|@DEFENABLEMEMPREALLOC@|$(DEFENABLEMEMPREALLOC)|g" \
|
||||
-e "s|@DEFENABLEHUGEPAGES@|$(DEFENABLEHUGEPAGES)|g" \
|
||||
-e "s|@DEFENABLEMSWAP@|$(DEFENABLESWAP)|g" \
|
||||
-e "s|@DEFENABLEDEBUG@|$(DEFENABLEDEBUG)|g" \
|
||||
-e "s|@DEFDISABLENESTINGCHECKS@|$(DEFDISABLENESTINGCHECKS)|g" \
|
||||
$< > $@
|
||||
|
||||
generate-config: $(CONFIG)
|
||||
|
||||
check: check-go-static
|
||||
|
||||
test: go-test
|
||||
|
||||
go-test: $(GENERATED_FILES)
|
||||
$(QUIET_TEST).ci/go-test.sh
|
||||
|
||||
check-go-static:
|
||||
$(QUIET_CHECK).ci/static-checks.sh
|
||||
$(QUIET_CHECK).ci/go-no-os-exit.sh
|
||||
|
||||
coverage:
|
||||
$(QUIET_TEST).ci/go-test.sh html-coverage
|
||||
|
||||
install: default install-scripts
|
||||
$(QUIET_INST)install -D $(TARGET) $(DESTTARGET)
|
||||
$(QUIET_INST)install -D $(CONFIG) $(DESTCONFIG)
|
||||
|
||||
install-scripts:
|
||||
$(foreach f,$(SCRIPTS),$(call INSTALL_EXEC,$f,$(SCRIPTS_DIR)))
|
||||
|
||||
clean:
|
||||
make -C cli clean
|
||||
$(QUIET_CLEAN)rm -f $(TARGET) $(CONFIG) $(GENERATED_GO_FILES) $(GENERATED_FILES)
|
||||
|
||||
help:
|
||||
@printf "To build a Kata Containers runtime:\n"
|
||||
show-usage: show-header
|
||||
@printf "• Overview:\n"
|
||||
@printf "\n"
|
||||
@printf " \$$ make [install]\n"
|
||||
@printf "\tTo build $(TARGET), just run, \"make\".\n"
|
||||
@printf "\n"
|
||||
@printf "Project home: https://github.com/kata-containers\n"
|
||||
@printf "\tFor a verbose build, run \"make V=1\".\n"
|
||||
@printf "\n"
|
||||
@printf "• Additional targets:\n"
|
||||
@printf "\n"
|
||||
@printf "\tbuild : standard build.\n"
|
||||
@printf "\tcheck : run tests.\n"
|
||||
@printf "\tclean : remove built files.\n"
|
||||
@printf "\tcoverage : run coverage tests.\n"
|
||||
@printf "\tdefault : same as 'make build' (or just 'make').\n"
|
||||
@printf "\tgenerate-config : create configuration file.\n"
|
||||
@printf "\tinstall : install files.\n"
|
||||
@printf "\tshow-arches : show supported architectures (ARCH variable values).\n"
|
||||
@printf "\tshow-summary : show install locations.\n"
|
||||
@printf "\n"
|
||||
|
||||
handle_help: show-usage show-summary show-variables show-footer
|
||||
|
||||
usage: handle_help
|
||||
help: handle_help
|
||||
|
||||
show-variables:
|
||||
@printf "• Variables affecting the build:\n\n"
|
||||
@printf \
|
||||
"$(foreach v,$(sort $(USER_VARS)),$(shell printf "\\t$(v)='$($(v))'\\\n"))"
|
||||
@printf "\n"
|
||||
|
||||
show-header:
|
||||
@printf "%s - version %s (commit %s)\n\n" $(TARGET) $(VERSION) $(COMMIT)
|
||||
|
||||
show-arches: show-header
|
||||
@printf "Supported architectures (possible values for ARCH variable):\n\n"
|
||||
@printf \
|
||||
"$(foreach v,$(ALL_ARCHES),$(call SHOW_ARCH,$(v)))\n"
|
||||
|
||||
show-footer:
|
||||
@printf "• Project:\n"
|
||||
@printf "\tHome: $(PROJECT_URL)\n"
|
||||
@printf "\tBugs: $(PROJECT_BUG_URL)\n\n"
|
||||
|
||||
show-summary: show-header
|
||||
@printf "• architecture:\n"
|
||||
@printf "\tHost: $(HOST_ARCH)\n"
|
||||
@printf "\tgolang: $(GOARCH)\n"
|
||||
@printf "\tBuild: $(ARCH)\n"
|
||||
@printf "\n"
|
||||
@printf "• golang:\n"
|
||||
@printf "\t"
|
||||
@go version
|
||||
@printf "\n"
|
||||
@printf "• Summary:\n"
|
||||
@printf "\n"
|
||||
@printf "\tbinary install path (DESTTARGET) : %s\n" $(DESTTARGET)
|
||||
@printf "\tconfig install path (DESTCONFIG) : %s\n" $(DESTCONFIG)
|
||||
@printf "\talternate config path (DESTSYSCONFIG) : %s\n" $(DESTSYSCONFIG)
|
||||
@printf "\thypervisor path (QEMUPATH) : %s\n" $(QEMUPATH)
|
||||
@printf "\tassets path (PKGDATADIR) : %s\n" $(PKGDATADIR)
|
||||
@printf "\tproxy+shim path (PKGLIBEXECDIR) : %s\n" $(PKGLIBEXECDIR)
|
||||
@printf "\n"
|
||||
|
||||
|
||||
# The following git hooks handle HEAD changes:
|
||||
# post-checkout <prev_head> <new_head> <file_or_branch_checkout>
|
||||
# post-commit # no parameters
|
||||
# post-merge <squash_or_not>
|
||||
# post-rewrite <amend_or_rebase>
|
||||
#
|
||||
define GIT_HOOK_POST_CHECKOUT
|
||||
#!/usr/bin/env bash
|
||||
prev_head=$$1
|
||||
new_head=$$2
|
||||
[[ "$$prev_head" == "$$new_head" ]] && exit
|
||||
printf "\nexecuting post-checkout git hook\n\n"
|
||||
rm -f $(GENERATED_CONFIG)
|
||||
endef
|
||||
export GIT_HOOK_POST_CHECKOUT
|
||||
|
||||
define GIT_HOOK_POST_GENERIC
|
||||
#!/usr/bin/env bash
|
||||
printf "\n executing $$0 git hook\n\n"
|
||||
rm -f $(GENERATED_CONFIG)
|
||||
endef
|
||||
export GIT_HOOK_POST_GENERIC
|
||||
|
||||
# This git-hook is executed after every checkout git operation
|
||||
.git/hooks/post-checkout: Makefile
|
||||
@ mkdir -p .git/hooks/
|
||||
$(QUIET_INST)echo "$$GIT_HOOK_POST_CHECKOUT" >$@
|
||||
@ chmod +x $@
|
||||
|
||||
# This git-hook is executed after every commit, merge, amend or rebase git
|
||||
# operation
|
||||
.git/hooks/post-commit .git/hooks/post-merge .git/hooks/post-rewrite: Makefile
|
||||
@ mkdir -p .git/hooks/
|
||||
$(QUIET_INST)echo "$$GIT_HOOK_POST_GENERIC" >$@
|
||||
@ chmod +x $@
|
||||
|
||||
install-git-hooks: .git/hooks/post-checkout .git/hooks/post-commit \
|
||||
.git/hooks/post-merge .git/hooks/post-rewrite
|
||||
|
495
cli/Makefile
495
cli/Makefile
@@ -1,495 +0,0 @@
|
||||
# Copyright (c) 2017-2018 Intel Corporation
|
||||
#
|
||||
# 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.
|
||||
|
||||
MAKEFILE_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
|
||||
# Determine the lower-case name of the distro
|
||||
distro := $(shell \
|
||||
for file in /etc/os-release /usr/lib/os-release; do \
|
||||
if [ -e $$file ]; then \
|
||||
grep ^ID= $$file|cut -d= -f2-|tr -d '"'; \
|
||||
break; \
|
||||
fi \
|
||||
done)
|
||||
|
||||
GOARCH=$(shell go env GOARCH)
|
||||
HOST_ARCH=$(shell arch)
|
||||
|
||||
ifeq ($(ARCH),)
|
||||
ARCH = $(GOARCH)
|
||||
endif
|
||||
|
||||
ARCH_DIR = arch
|
||||
ARCH_FILE_SUFFIX = -options.mk
|
||||
ARCH_FILE = $(ARCH_DIR)/$(ARCH)$(ARCH_FILE_SUFFIX)
|
||||
ARCH_FILES = $(wildcard arch/*$(ARCH_FILE_SUFFIX))
|
||||
ALL_ARCHES = $(patsubst $(ARCH_DIR)/%$(ARCH_FILE_SUFFIX),%,$(ARCH_FILES))
|
||||
|
||||
# Load architecture-dependent settings
|
||||
include $(ARCH_FILE)
|
||||
|
||||
PROJECT_TYPE = kata
|
||||
PROJECT_NAME = Kata Containers
|
||||
PROJECT_TAG = kata-containers
|
||||
PROJECT_URL = https://github.com/kata-containers
|
||||
PROJECT_BUG_URL = $(PROJECT_URL)/kata-containers/issues/new
|
||||
|
||||
BIN_PREFIX = $(PROJECT_TYPE)
|
||||
PROJECT_DIR = $(PROJECT_TAG)
|
||||
IMAGENAME = $(PROJECT_TAG).img
|
||||
|
||||
TARGET = $(BIN_PREFIX)-runtime
|
||||
DESTDIR :=
|
||||
|
||||
installing = $(findstring install,$(MAKECMDGOALS))
|
||||
|
||||
# Configure the build for a standard system that is
|
||||
# using OBS-generated packages.
|
||||
PREFIX := /usr
|
||||
BINDIR := $(PREFIX)/bin
|
||||
DESTBINDIR := /usr/local/bin
|
||||
QEMUBINDIR := $(BINDIR)
|
||||
SYSCONFDIR := /etc
|
||||
LOCALSTATEDIR := /var
|
||||
|
||||
ifeq (,$(installing))
|
||||
# Force a rebuild to ensure version details are correct
|
||||
# (but only for a non-install build phase).
|
||||
EXTRA_DEPS = clean
|
||||
endif
|
||||
|
||||
LIBEXECDIR := $(PREFIX)/libexec
|
||||
SHAREDIR := $(PREFIX)/share
|
||||
DEFAULTSDIR := $(SHAREDIR)/defaults
|
||||
|
||||
PKGDATADIR := $(SHAREDIR)/$(PROJECT_DIR)
|
||||
PKGLIBDIR := $(LOCALSTATEDIR)/lib/$(PROJECT_DIR)
|
||||
PKGRUNDIR := $(LOCALSTATEDIR)/run/$(PROJECT_DIR)
|
||||
PKGLIBEXECDIR := $(LIBEXECDIR)/$(PROJECT_DIR)
|
||||
|
||||
KERNELPATH := $(PKGDATADIR)/vmlinuz.container
|
||||
IMAGEPATH := $(PKGDATADIR)/$(IMAGENAME)
|
||||
FIRMWAREPATH :=
|
||||
|
||||
QEMUPATH := $(QEMUBINDIR)/$(QEMUCMD)
|
||||
|
||||
SHIMCMD := $(BIN_PREFIX)-shim
|
||||
SHIMPATH := $(PKGLIBEXECDIR)/$(SHIMCMD)
|
||||
|
||||
PROXYCMD := $(BIN_PREFIX)-proxy
|
||||
PROXYPATH := $(PKGLIBEXECDIR)/$(PROXYCMD)
|
||||
|
||||
# Default number of vCPUs
|
||||
DEFVCPUS := 1
|
||||
# Default memory size in MiB
|
||||
DEFMEMSZ := 2048
|
||||
#Default number of bridges
|
||||
DEFBRIDGES := 1
|
||||
#Default network model
|
||||
DEFNETWORKMODEL := macvtap
|
||||
|
||||
DEFDISABLEBLOCK := false
|
||||
DEFBLOCKSTORAGEDRIVER := virtio-scsi
|
||||
DEFENABLEMEMPREALLOC := false
|
||||
DEFENABLEHUGEPAGES := false
|
||||
DEFENABLESWAP := false
|
||||
DEFENABLEDEBUG := false
|
||||
DEFDISABLENESTINGCHECKS := false
|
||||
|
||||
SED = sed
|
||||
|
||||
SOURCES := $(shell find . 2>&1 | grep -E '.*\.(c|h|go)$$')
|
||||
VERSION := ${shell cat ./VERSION}
|
||||
COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true)
|
||||
COMMIT := $(if $(shell git status --porcelain --untracked-files=no),${COMMIT_NO}-dirty,${COMMIT_NO})
|
||||
|
||||
CONFIG_FILE = configuration.toml
|
||||
CONFIG = config/$(CONFIG_FILE)
|
||||
CONFIG_IN = $(CONFIG).in
|
||||
|
||||
DESTTARGET := $(abspath $(DESTBINDIR)/$(TARGET))
|
||||
|
||||
DESTCONFDIR := $(DESTDIR)/$(DEFAULTSDIR)/$(PROJECT_DIR)
|
||||
DESTSYSCONFDIR := $(DESTDIR)/$(SYSCONFDIR)/$(PROJECT_DIR)
|
||||
|
||||
# Main configuration file location for stateless systems
|
||||
DESTCONFIG := $(abspath $(DESTCONFDIR)/$(CONFIG_FILE))
|
||||
|
||||
# Secondary configuration file location. Note that this takes precedence
|
||||
# over DESTCONFIG.
|
||||
DESTSYSCONFIG := $(abspath $(DESTSYSCONFDIR)/$(CONFIG_FILE))
|
||||
|
||||
DESTSHAREDIR := $(DESTDIR)/$(SHAREDIR)
|
||||
|
||||
SCRIPTS_DIR := $(BINDIR)
|
||||
|
||||
# list of variables the user may wish to override
|
||||
USER_VARS += ARCH
|
||||
USER_VARS += BASH_COMPLETIONSDIR
|
||||
USER_VARS += BINDIR
|
||||
USER_VARS += DESTCONFIG
|
||||
USER_VARS += DESTDIR
|
||||
USER_VARS += DESTSYSCONFIG
|
||||
USER_VARS += DESTTARGET
|
||||
USER_VARS += IMAGENAME
|
||||
USER_VARS += IMAGEPATH
|
||||
USER_VARS += MACHINETYPE
|
||||
USER_VARS += KERNELPATH
|
||||
USER_VARS += FIRMWAREPATH
|
||||
USER_VARS += MACHINEACCELERATORS
|
||||
USER_VARS += KERNELPARAMS
|
||||
USER_VARS += LIBEXECDIR
|
||||
USER_VARS += LOCALSTATEDIR
|
||||
USER_VARS += PKGDATADIR
|
||||
USER_VARS += PKGLIBDIR
|
||||
USER_VARS += PKGLIBEXECDIR
|
||||
USER_VARS += PKGRUNDIR
|
||||
USER_VARS += PREFIX
|
||||
USER_VARS += PROJECT_NAME
|
||||
USER_VARS += PROJECT_PREFIX
|
||||
USER_VARS += PROJECT_TYPE
|
||||
USER_VARS += PROXYPATH
|
||||
USER_VARS += QEMUBINDIR
|
||||
USER_VARS += QEMUCMD
|
||||
USER_VARS += QEMUPATH
|
||||
USER_VARS += SHAREDIR
|
||||
USER_VARS += SHIMPATH
|
||||
USER_VARS += SYSCONFDIR
|
||||
USER_VARS += DEFVCPUS
|
||||
USER_VARS += DEFMEMSZ
|
||||
USER_VARS += DEFBRIDGES
|
||||
USER_VARS += DEFNETWORKMODEL
|
||||
USER_VARS += DEFDISABLEBLOCK
|
||||
USER_VARS += DEFBLOCKSTORAGEDRIVER
|
||||
USER_VARS += DEFENABLEMEMPREALLOC
|
||||
USER_VARS += DEFENABLEHUGEPAGES
|
||||
USER_VARS += DEFENABLESWAP
|
||||
USER_VARS += DEFENABLEDEBUG
|
||||
USER_VARS += DEFDISABLENESTINGCHECKS
|
||||
|
||||
V = @
|
||||
Q = $(V:1=)
|
||||
QUIET_BUILD = $(Q:@=@echo ' BUILD '$@;)
|
||||
QUIET_CHECK = $(Q:@=@echo ' CHECK '$@;)
|
||||
QUIET_CLEAN = $(Q:@=@echo ' CLEAN '$@;)
|
||||
QUIET_CONFIG = $(Q:@=@echo ' CONFIG '$@;)
|
||||
QUIET_GENERATE = $(Q:@=@echo ' GENERATE '$@;)
|
||||
QUIET_INST = $(Q:@=@echo ' INSTALL '$@;)
|
||||
QUIET_TEST = $(Q:@=@echo ' TEST '$@;)
|
||||
|
||||
# Return non-empty string if specified directory exists
|
||||
define DIR_EXISTS
|
||||
$(shell test -d $(1) && echo "$(1)")
|
||||
endef
|
||||
|
||||
# $1: name of architecture to display
|
||||
define SHOW_ARCH
|
||||
$(shell printf "\\t%s%s\\\n" "$(1)" $(if $(filter $(ARCH),$(1))," (default)",""))
|
||||
endef
|
||||
|
||||
# Only install git hooks if working in a git clone
|
||||
ifneq (,$(call DIR_EXISTS,.git))
|
||||
HANDLE_GIT_HOOKS = install-git-hooks
|
||||
endif
|
||||
|
||||
# Don't install hooks when running under the CI as they will stop the
|
||||
# tests from running.
|
||||
#
|
||||
# See: https://github.com/clearcontainers/runtime/issues/984
|
||||
ifneq (,$(CI))
|
||||
HANDLE_GIT_HOOKS =
|
||||
endif
|
||||
|
||||
default: $(TARGET) $(CONFIG) $(HANDLE_GIT_HOOKS)
|
||||
.DEFAULT: default
|
||||
|
||||
build: default
|
||||
|
||||
define GENERATED_CODE
|
||||
// WARNING: This file is auto-generated - DO NOT EDIT!
|
||||
//
|
||||
// Note that some variables are "var" to allow them to be modified
|
||||
// by the tests.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// name is the name of the runtime
|
||||
const name = "$(TARGET)"
|
||||
|
||||
// name of the project
|
||||
const project = "$(PROJECT_NAME)"
|
||||
|
||||
// prefix used to denote non-standard CLI commands and options.
|
||||
const projectPrefix = "$(PROJECT_TYPE)"
|
||||
|
||||
// systemdUnitName is the systemd(1) target used to launch the agent.
|
||||
const systemdUnitName = "$(PROJECT_TAG).target"
|
||||
|
||||
// original URL for this project
|
||||
const projectURL = "$(PROJECT_URL)"
|
||||
|
||||
// commit is the git commit the runtime is compiled from.
|
||||
var commit = "$(COMMIT)"
|
||||
|
||||
// version is the runtime version.
|
||||
var version = "$(VERSION)"
|
||||
|
||||
// project-specific command names
|
||||
var envCmd = fmt.Sprintf("%s-env", projectPrefix)
|
||||
var checkCmd = fmt.Sprintf("%s-check", projectPrefix)
|
||||
|
||||
// project-specific option names
|
||||
var configFilePathOption = fmt.Sprintf("%s-config", projectPrefix)
|
||||
var showConfigPathsOption = fmt.Sprintf("%s-show-default-config-paths", projectPrefix)
|
||||
|
||||
var defaultHypervisorPath = "$(QEMUPATH)"
|
||||
var defaultImagePath = "$(IMAGEPATH)"
|
||||
var defaultKernelPath = "$(KERNELPATH)"
|
||||
var defaultFirmwarePath = "$(FIRMWAREPATH)"
|
||||
var defaultMachineAccelerators = "$(MACHINEACCELERATORS)"
|
||||
var defaultShimPath = "$(SHIMPATH)"
|
||||
|
||||
const defaultKernelParams = "$(KERNELPARAMS)"
|
||||
const defaultMachineType = "$(MACHINETYPE)"
|
||||
const defaultRootDirectory = "$(PKGRUNDIR)"
|
||||
|
||||
const defaultVCPUCount uint32 = $(DEFVCPUS)
|
||||
const defaultMemSize uint32 = $(DEFMEMSZ) // MiB
|
||||
const defaultBridgesCount uint32 = $(DEFBRIDGES)
|
||||
const defaultInterNetworkingModel = "$(DEFNETWORKMODEL)"
|
||||
const defaultDisableBlockDeviceUse bool = $(DEFDISABLEBLOCK)
|
||||
const defaultBlockDeviceDriver = "$(DEFBLOCKSTORAGEDRIVER)"
|
||||
const defaultEnableMemPrealloc bool = $(DEFENABLEMEMPREALLOC)
|
||||
const defaultEnableHugePages bool = $(DEFENABLEHUGEPAGES)
|
||||
const defaultEnableSwap bool = $(DEFENABLESWAP)
|
||||
const defaultEnableDebug bool = $(DEFENABLEDEBUG)
|
||||
const defaultDisableNestingChecks bool = $(DEFDISABLENESTINGCHECKS)
|
||||
|
||||
// Default config file used by stateless systems.
|
||||
var defaultRuntimeConfiguration = "$(DESTCONFIG)"
|
||||
|
||||
// Alternate config file that takes precedence over
|
||||
// defaultRuntimeConfiguration.
|
||||
var defaultSysConfRuntimeConfiguration = "$(DESTSYSCONFIG)"
|
||||
|
||||
var defaultProxyPath = "$(PROXYPATH)"
|
||||
endef
|
||||
|
||||
export GENERATED_CODE
|
||||
|
||||
#Install an executable file
|
||||
# params:
|
||||
# $1 : file to install
|
||||
# $2 : directory path where file will be installed
|
||||
define INSTALL_EXEC
|
||||
$(QUIET_INST)install -D $1 $(DESTDIR)$2/$(notdir $1);
|
||||
endef
|
||||
|
||||
GENERATED_GO_FILES += config-generated.go
|
||||
|
||||
config-generated.go: Makefile VERSION
|
||||
$(QUIET_GENERATE)echo "$$GENERATED_CODE" >$@
|
||||
|
||||
$(TARGET): $(EXTRA_DEPS) $(SOURCES) $(GENERATED_GO_FILES) $(GENERATED_FILES) Makefile | show-summary
|
||||
$(QUIET_BUILD)go build -i -o $@ .
|
||||
|
||||
.PHONY: \
|
||||
check \
|
||||
check-go-static \
|
||||
check-go-test \
|
||||
coverage \
|
||||
default \
|
||||
install \
|
||||
install-git-hooks \
|
||||
show-header \
|
||||
show-summary \
|
||||
show-variables
|
||||
|
||||
$(TARGET).coverage: $(SOURCES) $(GENERATED_FILES) Makefile
|
||||
$(QUIET_TEST)go test -o $@ -covermode count
|
||||
|
||||
GENERATED_FILES += $(CONFIG)
|
||||
|
||||
$(COLLECT_SCRIPT_PROJ): $(COLLECT_SCRIPT_SRC)
|
||||
$(QUIET_GENERATE)cp $< $(@)
|
||||
|
||||
$(BASH_COMPLETIONS_PROJ): $(BASH_COMPLETIONS_SRC)
|
||||
$(QUIET_GENERATE)cp $< $(@)
|
||||
|
||||
$(GENERATED_FILES): %: %.in Makefile VERSION
|
||||
$(QUIET_CONFIG)$(SED) \
|
||||
-e "s|@COMMIT@|$(COMMIT)|g" \
|
||||
-e "s|@VERSION@|$(VERSION)|g" \
|
||||
-e "s|@CONFIG_IN@|$(CONFIG_IN)|g" \
|
||||
-e "s|@DESTCONFIG@|$(DESTCONFIG)|g" \
|
||||
-e "s|@DESTSYSCONFIG@|$(DESTSYSCONFIG)|g" \
|
||||
-e "s|@IMAGEPATH@|$(IMAGEPATH)|g" \
|
||||
-e "s|@KERNELPATH@|$(KERNELPATH)|g" \
|
||||
-e "s|@FIRMWAREPATH@|$(FIRMWAREPATH)|g" \
|
||||
-e "s|@MACHINEACCELERATORS@|$(MACHINEACCELERATORS)|g" \
|
||||
-e "s|@KERNELPARAMS@|$(KERNELPARAMS)|g" \
|
||||
-e "s|@LOCALSTATEDIR@|$(LOCALSTATEDIR)|g" \
|
||||
-e "s|@PKGLIBEXECDIR@|$(PKGLIBEXECDIR)|g" \
|
||||
-e "s|@PROXYPATH@|$(PROXYPATH)|g" \
|
||||
-e "s|@PROJECT_BUG_URL@|$(PROJECT_BUG_URL)|g" \
|
||||
-e "s|@PROJECT_URL@|$(PROJECT_URL)|g" \
|
||||
-e "s|@PROJECT_NAME@|$(PROJECT_NAME)|g" \
|
||||
-e "s|@PROJECT_TAG@|$(PROJECT_TAG)|g" \
|
||||
-e "s|@PROJECT_TYPE@|$(PROJECT_TYPE)|g" \
|
||||
-e "s|@QEMUPATH@|$(QEMUPATH)|g" \
|
||||
-e "s|@RUNTIME_NAME@|$(TARGET)|g" \
|
||||
-e "s|@MACHINETYPE@|$(MACHINETYPE)|g" \
|
||||
-e "s|@SHIMPATH@|$(SHIMPATH)|g" \
|
||||
-e "s|@DEFVCPUS@|$(DEFVCPUS)|g" \
|
||||
-e "s|@DEFMEMSZ@|$(DEFMEMSZ)|g" \
|
||||
-e "s|@DEFBRIDGES@|$(DEFBRIDGES)|g" \
|
||||
-e "s|@DEFNETWORKMODEL@|$(DEFNETWORKMODEL)|g" \
|
||||
-e "s|@DEFDISABLEBLOCK@|$(DEFDISABLEBLOCK)|g" \
|
||||
-e "s|@DEFBLOCKSTORAGEDRIVER@|$(DEFBLOCKSTORAGEDRIVER)|g" \
|
||||
-e "s|@DEFENABLEMEMPREALLOC@|$(DEFENABLEMEMPREALLOC)|g" \
|
||||
-e "s|@DEFENABLEHUGEPAGES@|$(DEFENABLEHUGEPAGES)|g" \
|
||||
-e "s|@DEFENABLEMSWAP@|$(DEFENABLESWAP)|g" \
|
||||
-e "s|@DEFENABLEDEBUG@|$(DEFENABLEDEBUG)|g" \
|
||||
-e "s|@DEFDISABLENESTINGCHECKS@|$(DEFDISABLENESTINGCHECKS)|g" \
|
||||
$< > $@
|
||||
|
||||
generate-config: $(CONFIG)
|
||||
|
||||
check: check-go-static check-go-test
|
||||
|
||||
check-go-test: $(GENERATED_FILES)
|
||||
$(QUIET_TEST)$(MAKEFILE_DIR)/../.ci/go-test.sh
|
||||
|
||||
check-go-static:
|
||||
$(QUIET_CHECK)$(MAKEFILE_DIR)/../.ci/static-checks.sh
|
||||
$(QUIET_CHECK)$(MAKEFILE_DIR)/../.ci/go-no-os-exit.sh
|
||||
|
||||
coverage:
|
||||
$(QUIET_TEST)$(MAKEFILE_DIR)/../.ci/go-test.sh html-coverage
|
||||
|
||||
install: default install-scripts
|
||||
$(QUIET_INST)install -D $(TARGET) $(DESTTARGET)
|
||||
$(QUIET_INST)install -D $(CONFIG) $(DESTCONFIG)
|
||||
|
||||
install-scripts:
|
||||
$(foreach f,$(SCRIPTS),$(call INSTALL_EXEC,$f,$(SCRIPTS_DIR)))
|
||||
|
||||
clean:
|
||||
$(QUIET_CLEAN)rm -f $(TARGET) $(CONFIG) $(GENERATED_GO_FILES) $(GENERATED_FILES) $(COLLECT_SCRIPT_PROJ) $(BASH_COMPLETIONS_PROJ)
|
||||
|
||||
show-usage: show-header
|
||||
@printf "• Overview:\n"
|
||||
@printf "\n"
|
||||
@printf "\tTo build $(TARGET), just run, \"make\".\n"
|
||||
@printf "\n"
|
||||
@printf "\tFor a verbose build, run \"make V=1\".\n"
|
||||
@printf "\n"
|
||||
@printf "• Additional targets:\n"
|
||||
@printf "\n"
|
||||
@printf "\tbuild : standard build.\n"
|
||||
@printf "\tcheck : run tests.\n"
|
||||
@printf "\tclean : remove built files.\n"
|
||||
@printf "\tcoverage : run coverage tests.\n"
|
||||
@printf "\tdefault : same as 'make build' (or just 'make').\n"
|
||||
@printf "\tgenerate-config : create configuration file.\n"
|
||||
@printf "\tinstall : install files.\n"
|
||||
@printf "\tshow-arches : show supported architectures (ARCH variable values).\n"
|
||||
@printf "\tshow-summary : show install locations.\n"
|
||||
@printf "\n"
|
||||
|
||||
handle_help: show-usage show-summary show-variables show-footer
|
||||
|
||||
usage: handle_help
|
||||
help: handle_help
|
||||
|
||||
show-variables:
|
||||
@printf "• Variables affecting the build:\n\n"
|
||||
@printf \
|
||||
"$(foreach v,$(sort $(USER_VARS)),$(shell printf "\\t$(v)='$($(v))'\\\n"))"
|
||||
@printf "\n"
|
||||
|
||||
show-header:
|
||||
@printf "%s - version %s (commit %s)\n\n" $(TARGET) $(VERSION) $(COMMIT)
|
||||
|
||||
show-arches: show-header
|
||||
@printf "Supported architectures (possible values for ARCH variable):\n\n"
|
||||
@printf \
|
||||
"$(foreach v,$(ALL_ARCHES),$(call SHOW_ARCH,$(v)))\n"
|
||||
|
||||
show-footer:
|
||||
@printf "• Project:\n"
|
||||
@printf "\tHome: $(PROJECT_URL)\n"
|
||||
@printf "\tBugs: $(PROJECT_BUG_URL)\n\n"
|
||||
|
||||
show-summary: show-header
|
||||
@printf "• architecture:\n"
|
||||
@printf "\tHost: $(HOST_ARCH)\n"
|
||||
@printf "\tgolang: $(GOARCH)\n"
|
||||
@printf "\tBuild: $(ARCH)\n"
|
||||
@printf "\n"
|
||||
@printf "• golang:\n"
|
||||
@printf "\t"
|
||||
@go version
|
||||
@printf "\n"
|
||||
@printf "• Summary:\n"
|
||||
@printf "\n"
|
||||
@printf "\tbinary install path (DESTTARGET) : %s\n" $(DESTTARGET)
|
||||
@printf "\tconfig install path (DESTCONFIG) : %s\n" $(DESTCONFIG)
|
||||
@printf "\talternate config path (DESTSYSCONFIG) : %s\n" $(DESTSYSCONFIG)
|
||||
@printf "\thypervisor path (QEMUPATH) : %s\n" $(QEMUPATH)
|
||||
@printf "\tassets path (PKGDATADIR) : %s\n" $(PKGDATADIR)
|
||||
@printf "\tproxy+shim path (PKGLIBEXECDIR) : %s\n" $(PKGLIBEXECDIR)
|
||||
@printf "\n"
|
||||
|
||||
|
||||
# The following git hooks handle HEAD changes:
|
||||
# post-checkout <prev_head> <new_head> <file_or_branch_checkout>
|
||||
# post-commit # no parameters
|
||||
# post-merge <squash_or_not>
|
||||
# post-rewrite <amend_or_rebase>
|
||||
#
|
||||
define GIT_HOOK_POST_CHECKOUT
|
||||
#!/usr/bin/env bash
|
||||
prev_head=$$1
|
||||
new_head=$$2
|
||||
[[ "$$prev_head" == "$$new_head" ]] && exit
|
||||
printf "\nexecuting post-checkout git hook\n\n"
|
||||
rm -f config-generated.go
|
||||
endef
|
||||
export GIT_HOOK_POST_CHECKOUT
|
||||
|
||||
define GIT_HOOK_POST_GENERIC
|
||||
#!/usr/bin/env bash
|
||||
printf "\n executing $$0 git hook\n\n"
|
||||
rm -f config-generated.go
|
||||
endef
|
||||
export GIT_HOOK_POST_GENERIC
|
||||
|
||||
# This git-hook is executed after every checkout git operation
|
||||
.git/hooks/post-checkout: Makefile
|
||||
@ mkdir -p .git/hooks/
|
||||
$(QUIET_INST)echo "$$GIT_HOOK_POST_CHECKOUT" >$@
|
||||
@ chmod +x $@
|
||||
|
||||
# This git-hook is executed after every commit, merge, amend or rebase git
|
||||
# operation
|
||||
.git/hooks/post-commit .git/hooks/post-merge .git/hooks/post-rewrite: Makefile
|
||||
@ mkdir -p .git/hooks/
|
||||
$(QUIET_INST)echo "$$GIT_HOOK_POST_GENERIC" >$@
|
||||
@ chmod +x $@
|
||||
|
||||
install-git-hooks: .git/hooks/post-checkout .git/hooks/post-commit \
|
||||
.git/hooks/post-merge .git/hooks/post-rewrite
|
Reference in New Issue
Block a user