+endif
+
+.PHONY: install
+install:
+ifeq ($(DESTDIR)$(if $T,,+),)
+ @echo Installation cannot run with T defined and DESTDIR undefined
+else
+ @echo ================== Installing $(DESTDIR)$(prefix)/
+ $(Q)$(MAKE) O=$(RTE_OUTPUT) T= install-runtime
+ $(Q)$(MAKE) O=$(RTE_OUTPUT) T= install-kmod
+ $(Q)$(MAKE) O=$(RTE_OUTPUT) T= install-sdk
+ $(Q)$(MAKE) O=$(RTE_OUTPUT) T= install-doc
+ @echo Installation in $(DESTDIR)$(prefix)/ complete
+endif
+
+install-runtime:
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(libdir))
+ $(Q)cp -a $O/lib/* $(DESTDIR)$(libdir)
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(bindir))
+ $(Q)tar -cf - -C $O app --exclude 'app/*.map' \
+ --exclude 'app/cmdline*' --exclude app/test \
+ --exclude app/testacl --exclude app/testpipeline | \
+ tar -xf - -C $(DESTDIR)$(bindir) --strip-components=1 \
+ --keep-newer-files --warning=no-ignore-newer
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(datadir))
+ $(Q)cp -a $(RTE_SDK)/tools $(DESTDIR)$(datadir)
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(sbindir))
+ $(Q)$(call rte_symlink, $(DESTDIR)$(datadir)/tools/dpdk_nic_bind.py, \
+ $(DESTDIR)$(sbindir)/dpdk_nic_bind)
+
+install-kmod:
+ifneq ($(wildcard $O/kmod/*),)
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(kerneldir))
+ $(Q)cp -a $O/kmod/* $(DESTDIR)$(kerneldir)
+endif
+
+install-sdk:
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(includedir))
+ $(Q)tar -chf - -C $O include | \
+ tar -xf - -C $(DESTDIR)$(includedir) --strip-components=1 \
+ --keep-newer-files --warning=no-ignore-newer
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(sdkdir))
+ $(Q)cp -a $(RTE_SDK)/mk $(DESTDIR)$(sdkdir)
+ $(Q)cp -a $(RTE_SDK)/scripts $(DESTDIR)$(sdkdir)
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(targetdir))
+ $(Q)cp -a $O/.config $(DESTDIR)$(targetdir)
+ $(Q)$(call rte_symlink, $(DESTDIR)$(includedir), $(DESTDIR)$(targetdir)/include)
+ $(Q)$(call rte_symlink, $(DESTDIR)$(libdir), $(DESTDIR)$(targetdir)/lib)
+
+install-doc:
+ifneq ($(wildcard $O/doc),)
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(docdir))
+ $(Q)tar -cf - -C $O/doc html --exclude 'html/guides/.*' | \
+ tar -xf - -C $(DESTDIR)$(docdir) --strip-components=1 \
+ --keep-newer-files --warning=no-ignore-newer
+endif
+ifneq ($(wildcard $O/doc/*/*/*pdf),)
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(docdir)/guides)
+ $(Q)cp -a $O/doc/*/*/*pdf $(DESTDIR)$(docdir)/guides
+endif
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(datadir))
+ $(Q)cp -a $(RTE_SDK)/examples $(DESTDIR)$(datadir)