github.com/kata-containers/runtime@v0.0.0-20210505125100-04f29832a923/Makefile (about)

     1  #
     2  # Copyright (c) 2018-2019 Intel Corporation
     3  #
     4  # SPDX-License-Identifier: Apache-2.0
     5  #
     6  
     7  distro := $(shell \
     8  for file in /etc/os-release /usr/lib/os-release; do \
     9      if [ -e $$file ]; then \
    10          grep ^ID= $$file|cut -d= -f2-|tr -d '"'; \
    11          break; \
    12      fi \
    13  done)
    14  
    15  SKIP_GO_VERSION_CHECK=
    16  include golang.mk
    17  
    18  #Get ARCH.
    19  ifneq (,$(golang_version_raw))
    20      GOARCH=$(shell go env GOARCH)
    21      ifeq ($(ARCH),)
    22          ARCH = $(GOARCH)
    23      endif
    24  else
    25      ARCH = $(shell uname -m)
    26      ifeq ($(ARCH),x86_64)
    27          ARCH = amd64
    28      endif
    29      ifeq ($(ARCH),aarch64)
    30          ARCH = arm64
    31      endif
    32  endif
    33  
    34  ARCH_DIR = arch
    35  ARCH_FILE_SUFFIX = -options.mk
    36  ARCH_FILE = $(ARCH_DIR)/$(ARCH)$(ARCH_FILE_SUFFIX)
    37  ARCH_FILES = $(wildcard arch/*$(ARCH_FILE_SUFFIX))
    38  ALL_ARCHES = $(patsubst $(ARCH_DIR)/%$(ARCH_FILE_SUFFIX),%,$(ARCH_FILES))
    39  
    40  # Load architecture-dependent settings
    41  include $(ARCH_FILE)
    42  
    43  PROJECT_TYPE = kata
    44  PROJECT_NAME = Kata Containers
    45  PROJECT_TAG = kata-containers
    46  PROJECT_ORG = $(PROJECT_TAG)
    47  PROJECT_URL = https://github.com/$(PROJECT_ORG)
    48  PROJECT_BUG_URL = $(PROJECT_URL)/kata-containers/issues/new
    49  
    50  # list of scripts to install
    51  SCRIPTS :=
    52  
    53  # list of binaries to install
    54  BINLIST :=
    55  BINLIBEXECLIST :=
    56  
    57  BIN_PREFIX = $(PROJECT_TYPE)
    58  PROJECT_DIR = $(PROJECT_TAG)
    59  IMAGENAME = $(PROJECT_TAG).img
    60  INITRDNAME = $(PROJECT_TAG)-initrd.img
    61  
    62  TARGET = $(BIN_PREFIX)-runtime
    63  TARGET_OUTPUT = $(CURDIR)/$(TARGET)
    64  BINLIST += $(TARGET)
    65  
    66  NETMON_DIR = netmon
    67  NETMON_TARGET = $(PROJECT_TYPE)-netmon
    68  NETMON_TARGET_OUTPUT = $(CURDIR)/$(NETMON_TARGET)
    69  BINLIBEXECLIST += $(NETMON_TARGET)
    70  
    71  DESTDIR := /
    72  
    73  ifeq ($(PREFIX),)
    74  PREFIX        := /usr
    75  EXEC_PREFIX   := $(PREFIX)/local
    76  else
    77  EXEC_PREFIX   := $(PREFIX)
    78  endif
    79  # Prefix where depedencies are installed
    80  PREFIXDEPS    := $(PREFIX)
    81  BINDIR        := $(EXEC_PREFIX)/bin
    82  QEMUBINDIR    := $(PREFIXDEPS)/bin
    83  CLHBINDIR    := $(PREFIXDEPS)/bin
    84  FCBINDIR      := $(PREFIXDEPS)/bin
    85  ACRNBINDIR    := $(PREFIXDEPS)/bin
    86  VIRTIOFSDBINDIR := $(PREFIXDEPS)/bin
    87  SYSCONFDIR    := /etc
    88  LOCALSTATEDIR := /var
    89  
    90  LIBEXECDIR := $(PREFIXDEPS)/libexec
    91  SHAREDIR := $(PREFIX)/share
    92  DEFAULTSDIR := $(SHAREDIR)/defaults
    93  
    94  COLLECT_SCRIPT = data/kata-collect-data.sh
    95  COLLECT_SCRIPT_SRC = $(COLLECT_SCRIPT).in
    96  
    97  # @RUNTIME_NAME@ should be replaced with the target in generated files
    98  RUNTIME_NAME = $(TARGET)
    99  
   100  GENERATED_FILES += $(COLLECT_SCRIPT)
   101  SCRIPTS += $(COLLECT_SCRIPT)
   102  SCRIPTS_DIR := $(BINDIR)
   103  
   104  BASH_COMPLETIONS := data/completions/bash/kata-runtime
   105  BASH_COMPLETIONSDIR := $(SHAREDIR)/bash-completion/completions
   106  
   107  PKGDATADIR := $(PREFIXDEPS)/share/$(PROJECT_DIR)
   108  PKGLIBDIR := $(LOCALSTATEDIR)/lib/$(PROJECT_DIR)
   109  PKGRUNDIR := $(LOCALSTATEDIR)/run/$(PROJECT_DIR)
   110  PKGLIBEXECDIR := $(LIBEXECDIR)/$(PROJECT_DIR)
   111  
   112  KERNELDIR := $(PKGDATADIR)
   113  
   114  INITRDPATH := $(PKGDATADIR)/$(INITRDNAME)
   115  IMAGEPATH := $(PKGDATADIR)/$(IMAGENAME)
   116  FIRMWAREPATH :=
   117  
   118  # Name of default configuration file the runtime will use.
   119  CONFIG_FILE = configuration.toml
   120  
   121  HYPERVISOR_ACRN = acrn
   122  HYPERVISOR_FC = firecracker
   123  JAILER_FC = jailer
   124  HYPERVISOR_QEMU = qemu
   125  HYPERVISOR_CLH = cloud-hypervisor
   126  HYPERVISOR_QEMU_VIRTIOFS = qemu-virtiofs
   127  
   128  # Determines which hypervisor is specified in $(CONFIG_FILE).
   129  DEFAULT_HYPERVISOR ?= $(HYPERVISOR_QEMU)
   130  
   131  # List of hypervisors this build system can generate configuration for.
   132  HYPERVISORS := $(HYPERVISOR_ACRN) $(HYPERVISOR_FC) $(HYPERVISOR_QEMU) $(HYPERVISOR_QEMU_VIRTIOFS) $(HYPERVISOR_CLH)
   133  
   134  QEMUPATH := $(QEMUBINDIR)/$(QEMUCMD)
   135  QEMUVALIDHYPERVISORPATHS := [\"$(QEMUPATH)\"]
   136  
   137  QEMUVIRTIOFSPATH := $(QEMUBINDIR)/$(QEMUVIRTIOFSCMD)
   138  QEMUVALIDVIRTIOFSPATHS := [\"$(QEMUVIRTIOFSPATH)\"]
   139  
   140  CLHPATH := $(CLHBINDIR)/$(CLHCMD)
   141  CLHVALIDHYPERVISORPATHS := [\"$(CLHBINDIR)/$(CLHCMD)\"]
   142  
   143  FCPATH = $(FCBINDIR)/$(FCCMD)
   144  FCVALIDHYPERVISORPATHS = [\"$(FCPATH)\"]
   145  FCJAILERPATH = $(FCBINDIR)/$(FCJAILERCMD)
   146  FCVALIDJAILERPATHS = [\"$(FCJAILERPATH)\"]
   147  
   148  ACRNPATH := $(ACRNBINDIR)/$(ACRNCMD)
   149  ACRNVALIDHYPERVISORPATHS := [\"$(ACRNPATH)\"]
   150  ACRNCTLPATH := $(ACRNBINDIR)/$(ACRNCTLCMD)
   151  ACRNVALIDCTLPATHS := [\"$(ACRNCTLPATH)\"]
   152  
   153  SHIMCMD := $(BIN_PREFIX)-shim
   154  SHIMPATH := $(PKGLIBEXECDIR)/$(SHIMCMD)
   155  
   156  PROXYCMD := $(BIN_PREFIX)-proxy
   157  PROXYPATH := $(PKGLIBEXECDIR)/$(PROXYCMD)
   158  
   159  NETMONCMD := $(BIN_PREFIX)-netmon
   160  NETMONPATH := $(PKGLIBEXECDIR)/$(NETMONCMD)
   161  
   162  # Default number of vCPUs
   163  DEFVCPUS := 1
   164  # Default maximum number of vCPUs
   165  DEFMAXVCPUS := 0
   166  # Default memory size in MiB
   167  DEFMEMSZ := 2048
   168  # Default memory slots
   169  # Cases to consider :
   170  # - nvdimm rootfs image
   171  # - preallocated memory
   172  # - vm template memory
   173  # - hugepage memory
   174  DEFMEMSLOTS := 10
   175  #Default number of bridges
   176  DEFBRIDGES := 1
   177  DEFENABLEANNOTATIONS := [\".*\"]
   178  DEFDISABLEGUESTSECCOMP := true
   179  #Default experimental features enabled
   180  DEFAULTEXPFEATURES := []
   181  
   182  #Default entropy source
   183  DEFENTROPYSOURCE := /dev/urandom
   184  
   185  DEFDISABLEBLOCK := false
   186  DEFSHAREDFS := virtio-9p
   187  DEFSHAREDFS_QEMU_VIRTIOFS := virtio-fs
   188  DEFVIRTIOFSDAEMON := $(VIRTIOFSDBINDIR)/virtiofsd
   189  DEFVALIDVIRTIOFSDAEMONPATHS := [\"$(DEFVIRTIOFSDAEMON)\"]
   190  # Default DAX mapping cache size in MiB
   191  #if value is 0, DAX is not enabled
   192  DEFVIRTIOFSCACHESIZE := 0
   193  DEFVIRTIOFSCACHE ?= auto
   194  # Format example:
   195  #   [\"-o\", \"arg1=xxx,arg2\", \"-o\", \"hello world\", \"--arg3=yyy\"]
   196  #
   197  # see `virtiofsd -h` for possible options.
   198  # Make sure you quote args.
   199  DEFVIRTIOFSEXTRAARGS ?= []
   200  DEFENABLEIOTHREADS := false
   201  DEFENABLEMEMPREALLOC := false
   202  DEFENABLEHUGEPAGES := false
   203  DEFENABLEVHOSTUSERSTORE := false
   204  DEFVHOSTUSERSTOREPATH := $(PKGRUNDIR)/vhost-user
   205  DEFVALIDVHOSTUSERSTOREPATHS := [\"$(DEFVHOSTUSERSTOREPATH)\"]
   206  DEFFILEMEMBACKEND := ""
   207  DEFVALIDFILEMEMBACKENDS := [\"$(DEFFILEMEMBACKEND)\"]
   208  DEFENABLESWAP := false
   209  DEFENABLEDEBUG := false
   210  DEFDISABLENESTINGCHECKS := false
   211  DEFMSIZE9P := 8192
   212  DEFHOTPLUGVFIOONROOTBUS := false
   213  DEFPCIEROOTPORT := 0
   214  
   215  # Default cgroup model
   216  DEFSANDBOXCGROUPONLY ?= false
   217  
   218  # Features
   219  FEATURE_SELINUX ?= check
   220  
   221  SED = sed
   222  
   223  CLI_DIR = cli
   224  SHIMV2 = containerd-shim-kata-v2
   225  SHIMV2_OUTPUT = $(CURDIR)/$(SHIMV2)
   226  SHIMV2_DIR = $(CLI_DIR)/$(SHIMV2)
   227  
   228  SOURCES := $(shell find . 2>&1 | grep -E '.*\.(c|h|go)$$')
   229  VERSION := ${shell cat ./VERSION}
   230  
   231  # List of configuration files to build and install
   232  CONFIGS =
   233  CONFIG_PATHS =
   234  SYSCONFIG_PATHS =
   235  
   236  # List of hypervisors known for the current architecture
   237  KNOWN_HYPERVISORS =
   238  
   239  ifneq (,$(QEMUCMD))
   240      KNOWN_HYPERVISORS += $(HYPERVISOR_QEMU)
   241  
   242      CONFIG_FILE_QEMU = configuration-qemu.toml
   243      CONFIG_QEMU = $(CLI_DIR)/config/$(CONFIG_FILE_QEMU)
   244      CONFIG_QEMU_IN = $(CONFIG_QEMU).in
   245  
   246      CONFIG_PATH_QEMU = $(abspath $(CONFDIR)/$(CONFIG_FILE_QEMU))
   247      CONFIG_PATHS += $(CONFIG_PATH_QEMU)
   248  
   249      SYSCONFIG_QEMU = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_QEMU))
   250      SYSCONFIG_PATHS += $(SYSCONFIG_QEMU)
   251  
   252      CONFIGS += $(CONFIG_QEMU)
   253  
   254      # qemu-specific options (all should be suffixed by "_QEMU")
   255      DEFBLOCKSTORAGEDRIVER_QEMU := virtio-scsi
   256      DEFNETWORKMODEL_QEMU := tcfilter
   257      KERNELNAME = $(call MAKE_KERNEL_NAME,$(KERNELTYPE))
   258      KERNELPATH = $(KERNELDIR)/$(KERNELNAME)
   259  endif
   260  
   261  ifneq (,$(QEMUVIRTIOFSCMD))
   262      KNOWN_HYPERVISORS += $(HYPERVISOR_QEMU_VIRTIOFS)
   263  
   264      CONFIG_FILE_QEMU_VIRTIOFS = configuration-qemu-virtiofs.toml
   265      CONFIG_QEMU_VIRTIOFS = $(CLI_DIR)/config/$(CONFIG_FILE_QEMU_VIRTIOFS)
   266      CONFIG_QEMU_VIRTIOFS_IN = $(CONFIG_QEMU_VIRTIOFS).in
   267  
   268      CONFIG_PATH_QEMU_VIRTIOFS = $(abspath $(CONFDIR)/$(CONFIG_FILE_QEMU_VIRTIOFS))
   269      CONFIG_PATHS += $(CONFIG_PATH_QEMU_VIRTIOFS)
   270  
   271      SYSCONFIG_QEMU_VIRTIOFS = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_QEMU_VIRTIOFS))
   272      SYSCONFIG_PATHS += $(SYSCONFIG_QEMU_VIRTIOFS)
   273  
   274      CONFIGS += $(CONFIG_QEMU_VIRTIOFS)
   275  
   276      # qemu-specific options (all should be suffixed by "_QEMU")
   277      DEFBLOCKSTORAGEDRIVER_QEMU_VIRTIOFS := virtio-fs
   278      DEFNETWORKMODEL_QEMU := tcfilter
   279      KERNELNAMEVIRTIOFS = $(call MAKE_KERNEL_NAME,$(KERNELTYPE))
   280      KERNELVIRTIOFSPATH = $(KERNELDIR)/$(KERNELNAMEVIRTIOFS)
   281  endif
   282  
   283  ifneq (,$(CLHCMD))
   284      KNOWN_HYPERVISORS += $(HYPERVISOR_CLH)
   285  
   286      CONFIG_FILE_CLH = configuration-clh.toml
   287      CONFIG_CLH = $(CLI_DIR)/config/$(CONFIG_FILE_CLH)
   288      CONFIG_CLH_IN = $(CONFIG_CLH).in
   289  
   290      CONFIG_PATH_CLH = $(abspath $(CONFDIR)/$(CONFIG_FILE_CLH))
   291      CONFIG_PATHS += $(CONFIG_PATH_CLH)
   292  
   293      SYSCONFIG_CLH = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_CLH))
   294      SYSCONFIG_PATHS += $(SYSCONFIG_CLH)
   295  
   296      CONFIGS += $(CONFIG_CLH)
   297  
   298      # CLH-specific options (all should be suffixed by "_CLH")
   299      # currently, huge pages are required for virtiofsd support
   300      DEFENABLEHUGEPAGES_CLH := true
   301      DEFNETWORKMODEL_CLH := tcfilter
   302      KERNELTYPE_CLH = uncompressed
   303      KERNEL_NAME_CLH = $(call MAKE_KERNEL_NAME,$(KERNELTYPE_CLH))
   304      KERNELPATH_CLH = $(KERNELDIR)/$(KERNEL_NAME_CLH)
   305  endif
   306  
   307  ifneq (,$(FCCMD))
   308      KNOWN_HYPERVISORS += $(HYPERVISOR_FC)
   309  
   310      CONFIG_FILE_FC = configuration-fc.toml
   311      CONFIG_FC = $(CLI_DIR)/config/$(CONFIG_FILE_FC)
   312      CONFIG_FC_IN = $(CONFIG_FC).in
   313  
   314      CONFIG_PATH_FC = $(abspath $(CONFDIR)/$(CONFIG_FILE_FC))
   315      CONFIG_PATHS += $(CONFIG_PATH_FC)
   316  
   317      SYSCONFIG_FC = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_FC))
   318      SYSCONFIG_PATHS += $(SYSCONFIG_FC)
   319  
   320      CONFIGS += $(CONFIG_FC)
   321  
   322      # firecracker-specific options (all should be suffixed by "_FC")
   323      DEFBLOCKSTORAGEDRIVER_FC := virtio-mmio
   324      DEFNETWORKMODEL_FC := tcfilter
   325      KERNELTYPE_FC = uncompressed
   326      KERNEL_NAME_FC = $(call MAKE_KERNEL_NAME,$(KERNELTYPE_FC))
   327      KERNELPATH_FC = $(KERNELDIR)/$(KERNEL_NAME_FC)
   328  endif
   329  
   330  ifneq (,$(ACRNCMD))
   331      KNOWN_HYPERVISORS += $(HYPERVISOR_ACRN)
   332  
   333      CONFIG_FILE_ACRN = configuration-acrn.toml
   334      CONFIG_ACRN = $(CLI_DIR)/config/$(CONFIG_FILE_ACRN)
   335      CONFIG_ACRN_IN = $(CONFIG_ACRN).in
   336  
   337      CONFIG_PATH_ACRN = $(abspath $(CONFDIR)/$(CONFIG_FILE_ACRN))
   338      CONFIG_PATHS += $(CONFIG_PATH_ACRN)
   339  
   340      SYSCONFIG_ACRN = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_ACRN))
   341      SYSCONFIG_PATHS += $(SYSCONFIG_ACRN)
   342  
   343      CONFIGS += $(CONFIG_ACRN)
   344  
   345      # acrn-specific options (all should be suffixed by "_ACRN")
   346      DEFMAXVCPUS_ACRN := 1
   347      DEFBLOCKSTORAGEDRIVER_ACRN := virtio-blk
   348      DEFNETWORKMODEL_ACRN := macvtap
   349      KERNEL_NAME_ACRN = $(call MAKE_KERNEL_NAME,$(KERNELTYPE))
   350      KERNELPATH_ACRN = $(KERNELDIR)/$(KERNEL_NAME_ACRN)
   351  endif
   352  
   353  ifeq (,$(KNOWN_HYPERVISORS))
   354      $(error "ERROR: No hypervisors known for architecture $(ARCH) (looked for: $(HYPERVISORS))")
   355  endif
   356  
   357  ifeq (,$(findstring $(DEFAULT_HYPERVISOR),$(HYPERVISORS)))
   358      $(error "ERROR: Invalid default hypervisor: '$(DEFAULT_HYPERVISOR)'")
   359  endif
   360  
   361  ifeq (,$(findstring $(DEFAULT_HYPERVISOR),$(KNOWN_HYPERVISORS)))
   362      $(error "ERROR: Default hypervisor '$(DEFAULT_HYPERVISOR)' not known for architecture $(ARCH)")
   363  endif
   364  
   365  ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_QEMU))
   366      DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_QEMU)
   367  endif
   368  
   369  ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_QEMU_VIRTIOFS))
   370      DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_QEMU_VIRTIOFS)
   371  endif
   372  
   373  ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_FC))
   374      DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_FC)
   375  endif
   376  
   377  ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_ACRN))
   378      DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_ACRN)
   379  endif
   380  
   381  ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_CLH))
   382      DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_CLH)
   383  endif
   384  
   385  CONFDIR := $(DEFAULTSDIR)/$(PROJECT_DIR)
   386  SYSCONFDIR := $(SYSCONFDIR)/$(PROJECT_DIR)
   387  
   388  # Main configuration file location for stateless systems
   389  CONFIG_PATH := $(abspath $(CONFDIR)/$(CONFIG_FILE))
   390  
   391  # Secondary configuration file location. Note that this takes precedence
   392  # over CONFIG_PATH.
   393  SYSCONFIG := $(abspath $(SYSCONFDIR)/$(CONFIG_FILE))
   394  
   395  SHAREDIR := $(SHAREDIR)
   396  
   397  # list of variables the user may wish to override
   398  USER_VARS += ARCH
   399  USER_VARS += BINDIR
   400  USER_VARS += CONFIG_ACRN_IN
   401  USER_VARS += CONFIG_CLH_IN
   402  USER_VARS += CONFIG_FC_IN
   403  USER_VARS += CONFIG_PATH
   404  USER_VARS += CONFIG_QEMU_IN
   405  USER_VARS += CONFIG_QEMU_VIRTIOFS_IN
   406  USER_VARS += DESTDIR
   407  USER_VARS += DEFAULT_HYPERVISOR
   408  USER_VARS += DEFENABLEMSWAP
   409  USER_VARS += ACRNCMD
   410  USER_VARS += ACRNCTLCMD
   411  USER_VARS += ACRNPATH
   412  USER_VARS += ACRNVALIDHYPERVISORPATHS
   413  USER_VARS += ACRNCTLPATH
   414  USER_VARS += ACRNVALIDCTLPATHS
   415  USER_VARS += CLHPATH
   416  USER_VARS += CLHVALIDHYPERVISORPATHS
   417  USER_VARS += FIRMWAREPATH_CLH
   418  USER_VARS += FCCMD
   419  USER_VARS += FCPATH
   420  USER_VARS += FCVALIDHYPERVISORPATHS
   421  USER_VARS += FCJAILERPATH
   422  USER_VARS += FCVALIDJAILERPATHS
   423  USER_VARS += SYSCONFIG
   424  USER_VARS += IMAGENAME
   425  USER_VARS += IMAGEPATH
   426  USER_VARS += INITRDNAME
   427  USER_VARS += INITRDPATH
   428  USER_VARS += MACHINETYPE
   429  USER_VARS += KERNELDIR
   430  USER_VARS += KERNELTYPE
   431  USER_VARS += KERNELTYPE_FC
   432  USER_VARS += KERNELTYPE_ACRN
   433  USER_VARS += KERNELTYPE_CLH
   434  USER_VARS += KERNELPATH_ACRN
   435  USER_VARS += KERNELPATH
   436  USER_VARS += KERNELPATH_CLH
   437  USER_VARS += KERNELPATH_FC
   438  USER_VARS += KERNELVIRTIOFSPATH
   439  USER_VARS += FIRMWAREPATH
   440  USER_VARS += MACHINEACCELERATORS
   441  USER_VARS += CPUFEATURES
   442  USER_VARS += DEFMACHINETYPE_CLH
   443  USER_VARS += KERNELPARAMS
   444  USER_VARS += LIBEXECDIR
   445  USER_VARS += LOCALSTATEDIR
   446  USER_VARS += PKGDATADIR
   447  USER_VARS += PKGLIBDIR
   448  USER_VARS += PKGLIBEXECDIR
   449  USER_VARS += PKGRUNDIR
   450  USER_VARS += PREFIX
   451  USER_VARS += PROJECT_BUG_URL
   452  USER_VARS += PROJECT_NAME
   453  USER_VARS += PROJECT_ORG
   454  USER_VARS += PROJECT_PREFIX
   455  USER_VARS += PROJECT_TAG
   456  USER_VARS += PROJECT_TYPE
   457  USER_VARS += PROJECT_URL
   458  USER_VARS += PROXYPATH
   459  USER_VARS += NETMONPATH
   460  USER_VARS += QEMUBINDIR
   461  USER_VARS += QEMUCMD
   462  USER_VARS += QEMUPATH
   463  USER_VARS += QEMUVALIDHYPERVISORPATHS
   464  USER_VARS += QEMUVIRTIOFSCMD
   465  USER_VARS += QEMUVIRTIOFSPATH
   466  USER_VARS += QEMUVALIDVIRTIOFSPATHS
   467  USER_VARS += RUNTIME_NAME
   468  USER_VARS += SHAREDIR
   469  USER_VARS += SHIMPATH
   470  USER_VARS += SYSCONFDIR
   471  USER_VARS += DEFVCPUS
   472  USER_VARS += DEFMAXVCPUS
   473  USER_VARS += DEFMAXVCPUS_ACRN
   474  USER_VARS += DEFMEMSZ
   475  USER_VARS += DEFMEMSLOTS
   476  USER_VARS += DEFBRIDGES
   477  USER_VARS += DEFNETWORKMODEL_ACRN
   478  USER_VARS += DEFNETWORKMODEL_CLH
   479  USER_VARS += DEFNETWORKMODEL_FC
   480  USER_VARS += DEFNETWORKMODEL_QEMU
   481  USER_VARS += DEFDISABLEGUESTSECCOMP
   482  USER_VARS += DEFAULTEXPFEATURES
   483  USER_VARS += DEFDISABLEBLOCK
   484  USER_VARS += DEFBLOCKSTORAGEDRIVER_ACRN
   485  USER_VARS += DEFBLOCKSTORAGEDRIVER_FC
   486  USER_VARS += DEFBLOCKSTORAGEDRIVER_QEMU
   487  USER_VARS += DEFBLOCKSTORAGEDRIVER_QEMU_VIRTIOFS
   488  USER_VARS += DEFSHAREDFS
   489  USER_VARS += DEFSHAREDFS_QEMU_VIRTIOFS
   490  USER_VARS += DEFVIRTIOFSDAEMON
   491  USER_VARS += DEFVALIDVIRTIOFSDAEMONPATHS
   492  USER_VARS += DEFVIRTIOFSCACHESIZE
   493  USER_VARS += DEFVIRTIOFSCACHE
   494  USER_VARS += DEFVIRTIOFSEXTRAARGS
   495  USER_VARS += DEFENABLEANNOTATIONS
   496  USER_VARS += DEFENABLEIOTHREADS
   497  USER_VARS += DEFENABLEMEMPREALLOC
   498  USER_VARS += DEFENABLEHUGEPAGES
   499  USER_VARS += DEFENABLEVHOSTUSERSTORE
   500  USER_VARS += DEFVHOSTUSERSTOREPATH
   501  USER_VARS += DEFVALIDVHOSTUSERSTOREPATHS
   502  USER_VARS += DEFFILEMEMBACKEND
   503  USER_VARS += DEFVALIDFILEMEMBACKENDS
   504  USER_VARS += DEFENABLESWAP
   505  USER_VARS += DEFENABLEDEBUG
   506  USER_VARS += DEFDISABLENESTINGCHECKS
   507  USER_VARS += DEFMSIZE9P
   508  USER_VARS += DEFHOTPLUGVFIOONROOTBUS
   509  USER_VARS += DEFPCIEROOTPORT
   510  USER_VARS += DEFENTROPYSOURCE
   511  USER_VARS += DEFSANDBOXCGROUPONLY
   512  USER_VARS += FEATURE_SELINUX
   513  USER_VARS += BUILDFLAGS
   514  
   515  
   516  V              = @
   517  Q              = $(V:1=)
   518  QUIET_BUILD    = $(Q:@=@echo    '     BUILD    '$@;)
   519  QUIET_CHECK    = $(Q:@=@echo    '     CHECK    '$@;)
   520  QUIET_CLEAN    = $(Q:@=@echo    '     CLEAN    '$@;)
   521  QUIET_GENERATE = $(Q:@=@echo    '     GENERATE '$@;)
   522  QUIET_INST     = $(Q:@=@echo    '     INSTALL  '$@;)
   523  QUIET_TEST     = $(Q:@=@echo    '     TEST     '$@;)
   524  
   525  BUILDTAGS :=
   526  
   527  ifneq ($(FEATURE_SELINUX),no)
   528      SELINUXTAG := $(shell ./hack/selinux_tag.sh)
   529  
   530      ifneq ($(SELINUXTAG),)
   531          override FEATURE_SELINUX = yes
   532          BUILDTAGS += --tags "$(SELINUXTAG)"
   533      else
   534          ifeq ($(FEATURE_SELINUX),yes)
   535              $(error "ERROR: SELinux support requested, but libselinux is not available")
   536          endif
   537  
   538          override FEATURE_SELINUX = no
   539      endif
   540  endif
   541  
   542  # go build common flags
   543  BUILDFLAGS := -buildmode=pie ${BUILDTAGS}
   544  
   545  # whether stipping the binary
   546  ifeq ($(STRIP),yes)
   547         KATA_LDFLAGS := -ldflags "-w -s"
   548  endif
   549  
   550  # Return non-empty string if specified directory exists
   551  define DIR_EXISTS
   552  $(shell test -d $(1) && echo "$(1)")
   553  endef
   554  
   555  # $1: name of architecture to display
   556  define SHOW_ARCH
   557    $(shell printf "\\t%s%s\\\n" "$(1)" $(if $(filter $(ARCH),$(1))," (default)",""))
   558  endef
   559  
   560  all: runtime containerd-shim-v2 netmon
   561  
   562  # Targets that depend on .git-commit can use $(shell cat .git-commit) to get a
   563  # git revision string.  They will only be rebuilt if the revision string
   564  # actually changes.
   565  .PHONY: .git-commit.tmp
   566  .git-commit: .git-commit.tmp
   567  	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
   568  .git-commit.tmp:
   569  	@echo -n "$$(git rev-parse HEAD 2>/dev/null)" >$@
   570  	@test -n "$$(git status --porcelain --untracked-files=no)" && echo -n "-dirty" >>$@ || true
   571  
   572  containerd-shim-v2: $(SHIMV2_OUTPUT)
   573  
   574  netmon: $(NETMON_TARGET_OUTPUT)
   575  
   576  $(NETMON_TARGET_OUTPUT): $(SOURCES) VERSION
   577  	$(QUIET_BUILD)(cd $(NETMON_DIR) && go build $(BUILDFLAGS) -o $@ -ldflags "-X main.version=$(VERSION)" $(KATA_LDFLAGS))
   578  
   579  runtime: $(TARGET_OUTPUT) $(CONFIGS)
   580  .DEFAULT: default
   581  
   582  build: default
   583  
   584  #Install an executable file
   585  # params:
   586  # $1 : file to install
   587  # $2 : directory path where file will be installed
   588  define INSTALL_EXEC
   589  	install -D $1 $(DESTDIR)$2/$(notdir $1);
   590  endef
   591  
   592  # Install a configuration file
   593  # params:
   594  # $1 : file to install
   595  # $2 : directory path where file will be installed
   596  define INSTALL_CONFIG
   597  	install --mode 0644 -D $1 $(DESTDIR)$2/$(notdir $1);
   598  endef
   599  
   600  # Returns the name of the kernel file to use based on the provided KERNELTYPE.
   601  # $1 : KERNELTYPE (compressed or uncompressed)
   602  define MAKE_KERNEL_NAME
   603  $(if $(findstring uncompressed,$1),vmlinux.container,vmlinuz.container)
   604  endef
   605  
   606  define MAKE_KERNEL_VIRTIOFS_NAME
   607  $(if $(findstring uncompressed,$1),vmlinux-virtiofs.container,vmlinuz-virtiofs.container)
   608  endef
   609  
   610  GENERATED_CONFIG = $(abspath $(CLI_DIR)/config-generated.go)
   611  
   612  GENERATED_FILES += $(GENERATED_CONFIG)
   613  GENERATED_FILES += pkg/katautils/config-settings.go
   614  
   615  $(TARGET_OUTPUT): $(SOURCES) $(GENERATED_FILES) $(MAKEFILE_LIST) | show-summary
   616  	$(QUIET_BUILD)(cd $(CLI_DIR) && go build $(KATA_LDFLAGS) $(BUILDFLAGS) -o $@ .)
   617  
   618  $(SHIMV2_OUTPUT): $(SOURCES) $(GENERATED_FILES) $(MAKEFILE_LIST)
   619  	$(QUIET_BUILD)(cd $(SHIMV2_DIR)/ && ln -fs $(GENERATED_CONFIG))
   620  	$(QUIET_BUILD)(cd $(SHIMV2_DIR)/ && go build $(KATA_LDFLAGS) $(BUILDTAGS) -i -o $@ .)
   621  
   622  .PHONY: \
   623  	check \
   624  	check-go-static \
   625  	check-go-test \
   626  	coverage \
   627  	default \
   628  	install \
   629  	show-header \
   630  	show-summary \
   631  	show-variables
   632  
   633  $(TARGET).coverage: $(SOURCES) $(GENERATED_FILES) $(MAKEFILE_LIST)
   634  	$(QUIET_TEST)go test -o $@ -covermode count
   635  
   636  GENERATED_FILES += $(CONFIGS)
   637  GENERATED_VARS = \
   638  		VERSION \
   639  		CONFIG_ACRN_IN \
   640  		CONFIG_QEMU_IN \
   641  		CONFIG_QEMU_VIRTIOFS_IN \
   642  		CONFIG_CLH_IN \
   643  		CONFIG_FC_IN \
   644  		$(USER_VARS)
   645  
   646  $(GENERATED_FILES): %: %.in $(MAKEFILE_LIST) VERSION .git-commit
   647  	$(QUIET_GENERATE)$(SED) \
   648  		-e "s|@COMMIT@|$(shell cat .git-commit)|g" \
   649  		$(foreach v,$(GENERATED_VARS),-e "s|@$v@|$($v)|g") \
   650  		$< > $@
   651  
   652  generate-config: $(CONFIGS)
   653  
   654  check: check-go-static
   655  
   656  test: go-test
   657  
   658  go-test: $(GENERATED_FILES)
   659  	$(QUIET_TEST).ci/go-test.sh
   660  
   661  check-go-static:
   662  	$(QUIET_CHECK).ci/static-checks.sh
   663  	$(QUIET_CHECK).ci/go-no-os-exit.sh ./cli
   664  	$(QUIET_CHECK).ci/go-no-os-exit.sh ./virtcontainers
   665  
   666  coverage:
   667  	$(QUIET_TEST).ci/go-test.sh html-coverage
   668  
   669  install: default install-runtime install-containerd-shim-v2 install-netmon
   670  
   671  install-bin: $(BINLIST)
   672  	$(QUIET_INST)$(foreach f,$(BINLIST),$(call INSTALL_EXEC,$f,$(BINDIR)))
   673  
   674  install-runtime: runtime install-scripts install-completions install-configs install-bin
   675  
   676  install-netmon: install-bin-libexec
   677  
   678  install-containerd-shim-v2: $(SHIMV2)
   679  	$(QUIET_INST)$(call INSTALL_EXEC,$<,$(BINDIR))
   680  
   681  install-bin-libexec: $(BINLIBEXECLIST)
   682  	$(QUIET_INST)$(foreach f,$(BINLIBEXECLIST),$(call INSTALL_EXEC,$f,$(PKGLIBEXECDIR)))
   683  
   684  install-configs: $(CONFIGS)
   685  	$(QUIET_INST)$(foreach f,$(CONFIGS),$(call INSTALL_CONFIG,$f,$(dir $(CONFIG_PATH))))
   686  	$(QUIET_INST)ln -sf $(DEFAULT_HYPERVISOR_CONFIG) $(DESTDIR)/$(CONFIG_PATH)
   687  
   688  install-scripts: $(SCRIPTS)
   689  	$(QUIET_INST)$(foreach f,$(SCRIPTS),$(call INSTALL_EXEC,$f,$(SCRIPTS_DIR)))
   690  
   691  install-completions:
   692  	$(QUIET_INST)install --mode 0644 -D  $(BASH_COMPLETIONS) $(DESTDIR)/$(BASH_COMPLETIONSDIR)/$(notdir $(BASH_COMPLETIONS));
   693  
   694  clean:
   695  	$(QUIET_CLEAN)rm -f \
   696  		$(CONFIGS) \
   697  		$(GENERATED_FILES) \
   698  		$(NETMON_TARGET) \
   699  		$(SHIMV2) \
   700  		$(SHIMV2_DIR)/$(notdir $(GENERATED_CONFIG)) \
   701  		$(TARGET) \
   702  		.git-commit .git-commit.tmp
   703  
   704  show-usage: show-header
   705  	@printf "• Overview:\n"
   706  	@printf "\n"
   707  	@printf "\tTo build $(TARGET), just run, \"make\".\n"
   708  	@printf "\n"
   709  	@printf "\tFor a verbose build, run \"make V=1\".\n"
   710  	@printf "\n"
   711  	@printf "• Additional targets:\n"
   712  	@printf "\n"
   713  	@printf "\tbuild                      : standard build (build everything).\n"
   714  	@printf "\tcheck                      : run tests.\n"
   715  	@printf "\tclean                      : remove built files.\n"
   716  	@printf "\tcontainerd-shim-v2         : only build containerd shim v2.\n"
   717  	@printf "\tcoverage                   : run coverage tests.\n"
   718  	@printf "\tdefault                    : same as 'make build' (or just 'make').\n"
   719  	@printf "\tgenerate-config            : create configuration file.\n"
   720  	@printf "\tinstall                    : install everything.\n"
   721  	@printf "\tinstall-containerd-shim-v2 : only install containerd shim v2 files.\n"
   722  	@printf "\tinstall-netmon             : only install netmon files.\n"
   723  	@printf "\tinstall-runtime            : only install runtime files.\n"
   724  	@printf "\tnetmon                     : only build netmon.\n"
   725  	@printf "\truntime                    : only build runtime.\n"
   726  	@printf "\tshow-arches                : show supported architectures (ARCH variable values).\n"
   727  	@printf "\tshow-summary               : show install locations.\n"
   728  	@printf "\n"
   729  
   730  handle_help: show-usage show-summary show-variables show-footer
   731  
   732  usage: handle_help
   733  help: handle_help
   734  
   735  show-variables:
   736  	@printf "• Variables affecting the build:\n\n"
   737  	@printf \
   738            "$(foreach v,$(sort $(USER_VARS)),$(shell printf "\\t$(v)='$($(v))'\\\n"))"
   739  	@printf "\n"
   740  
   741  show-header: .git-commit
   742  	@printf "%s - version %s (commit %s)\n\n" $(TARGET) $(VERSION) $(shell cat .git-commit)
   743  
   744  show-arches: show-header
   745  	@printf "Supported architectures (possible values for ARCH variable):\n\n"
   746  	@printf \
   747  		"$(foreach v,$(ALL_ARCHES),$(call SHOW_ARCH,$(v)))\n"
   748  
   749  show-footer:
   750  	@printf "• Project:\n"
   751  	@printf "\tHome: $(PROJECT_URL)\n"
   752  	@printf "\tBugs: $(PROJECT_BUG_URL)\n\n"
   753  
   754  show-summary: show-header
   755  ifneq (,$(golang_version_raw))
   756  	@printf "• architecture:\n"
   757  	@printf "\tHost: $(HOST_ARCH)\n"
   758  	@printf "\tgolang: $(GOARCH)\n"
   759  	@printf "\tBuild: $(ARCH)\n"
   760  	@printf "\n"
   761  	@printf "• golang:\n"
   762  	@printf "\t"
   763  	@go version
   764  else
   765  	@printf "• No GO command or GOPATH not set:\n"
   766  	@printf "\tCan only install prebuilt binaries\n"
   767  endif
   768  	@printf "\n"
   769  	@printf "• hypervisors:\n"
   770  	@printf "\tKnown: $(sort $(HYPERVISORS))\n"
   771  	@printf "\tAvailable for this architecture: $(sort $(KNOWN_HYPERVISORS))\n"
   772  	@printf "\n"
   773  	@printf "• Features:\n"
   774  	@printf "\tSELinux (FEATURE_SELINUX): $(FEATURE_SELINUX)\n"
   775  	@printf "\n"
   776  	@printf "• Summary:\n"
   777  	@printf "\n"
   778  	@printf "\tdestination install path (DESTDIR) : %s\n" $(abspath $(DESTDIR))
   779  	@printf "\tbinary installation path (BINDIR) : %s\n" $(abspath $(BINDIR))
   780  	@printf "\tbinaries to install :\n"
   781  	@printf \
   782            "$(foreach b,$(sort $(BINLIST)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(BINDIR)/$(b))\\\n"))"
   783  	@printf \
   784            "$(foreach b,$(sort $(SHIMV2)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(BINDIR)/$(b))\\\n"))"
   785  	@printf \
   786            "$(foreach b,$(sort $(BINLIBEXECLIST)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(PKGLIBEXECDIR)/$(b))\\\n"))"
   787  	@printf \
   788            "$(foreach s,$(sort $(SCRIPTS)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(BINDIR)/$(s))\\\n"))"
   789  	@printf "\tconfigs to install (CONFIGS) :\n"
   790  	@printf \
   791  	  "$(foreach c,$(sort $(CONFIGS)),$(shell printf "\\t - $(c)\\\n"))"
   792  	@printf "\tinstall paths (CONFIG_PATHS) :\n"
   793  	@printf \
   794  	  "$(foreach c,$(sort $(CONFIG_PATHS)),$(shell printf "\\t - $(c)\\\n"))"
   795  	@printf "\talternate config paths (SYSCONFIG_PATHS) : %s\n"
   796  	@printf \
   797  	  "$(foreach c,$(sort $(SYSCONFIG_PATHS)),$(shell printf "\\t - $(c)\\\n"))"
   798  
   799  	@printf "\tdefault install path for $(DEFAULT_HYPERVISOR) (CONFIG_PATH) : %s\n" $(abspath $(CONFIG_PATH))
   800  	@printf "\tdefault alternate config path (SYSCONFIG) : %s\n" $(abspath $(SYSCONFIG))
   801  ifneq (,$(findstring $(HYPERVISOR_QEMU),$(KNOWN_HYPERVISORS)))
   802  	@printf "\t$(HYPERVISOR_QEMU) hypervisor path (QEMUPATH) : %s\n" $(abspath $(QEMUPATH))
   803  endif
   804  ifneq (,$(findstring $(HYPERVISOR_QEMU_VIRTIOFS),$(KNOWN_HYPERVISORS)))
   805  	@printf "\t$(HYPERVISOR_QEMU_VIRTIOFS) hypervisor path (QEMUVIRTIOFSPATH) : %s\n" $(abspath $(QEMUVIRTIOFSPATH))
   806  endif
   807  ifneq (,$(findstring $(HYPERVISOR_CLH),$(KNOWN_HYPERVISORS)))
   808  	@printf "\t$(HYPERVISOR_CLH) hypervisor path (CLHPATH) : %s\n" $(abspath $(CLHPATH))
   809  endif
   810  ifneq (,$(findstring $(HYPERVISOR_FC),$(KNOWN_HYPERVISORS)))
   811  	@printf "\t$(HYPERVISOR_FC) hypervisor path (FCPATH) : %s\n" $(abspath $(FCPATH))
   812  endif
   813  ifneq (,$(findstring $(HYPERVISOR_ACRN),$(KNOWN_HYPERVISORS)))
   814  	@printf "\t$(HYPERVISOR_ACRN) hypervisor path (ACRNPATH) : %s\n" $(abspath $(ACRNPATH))
   815  endif
   816  	@printf "\tassets path (PKGDATADIR) : %s\n" $(abspath $(PKGDATADIR))
   817  	@printf "\tproxy+shim path (PKGLIBEXECDIR) : %s\n" $(abspath $(PKGLIBEXECDIR))
   818  	@printf "\n"