The rule "install" follows these conventions: http://gnu.org/prep/standards/html_node/Directory-Variables.html http://gnu.org/prep/standards/html_node/DESTDIR.html
The variable sdkdir has been added to the more standards ones, to configure the directory used with RTE_SDK when using the DPDK makefiles to build an application. It is still possible to build DPDK with the "install T=" rule without specifying any DESTDIR. In such case there is no install, as before. The old usage of an installed SDK is: make -C examples/helloworld RTE_SDK=$(readlink -m $DESTDIR) \ RTE_TARGET=x86_64-native-linuxapp-gcc RTE_TARGET can be specified but is useless now with an installed SDK. The RTE_SDK directory must now point to a different path depending of the installation. Signed-off-by: Thomas Monjalon <thomas.monjalon at 6wind.com> Acked-by: Panu Matilainen <pmatilai at redhat.com> --- doc/build-sdk-quick.txt | 1 + doc/guides/prog_guide/dev_kit_root_make_help.rst | 6 ++- mk/internal/rte.extvars.mk | 4 ++ mk/rte.sdkinstall.mk | 59 ++++++++++++++++++------ mk/rte.vars.mk | 10 +--- 5 files changed, 58 insertions(+), 22 deletions(-) diff --git a/doc/build-sdk-quick.txt b/doc/build-sdk-quick.txt index b5f752e..662ef63 100644 --- a/doc/build-sdk-quick.txt +++ b/doc/build-sdk-quick.txt @@ -19,6 +19,7 @@ Build variables D debug dependencies O build directory (default: build/ - install default: ./) DESTDIR second-stage install directory + prefix root install directory T target template - used with config or install format: <arch-machine-execenv-toolchain> templates in config/defconfig_* diff --git a/doc/guides/prog_guide/dev_kit_root_make_help.rst b/doc/guides/prog_guide/dev_kit_root_make_help.rst index 458fc91..b0429d8 100644 --- a/doc/guides/prog_guide/dev_kit_root_make_help.rst +++ b/doc/guides/prog_guide/dev_kit_root_make_help.rst @@ -111,11 +111,15 @@ Install Targets The name of the target to install is specified using T=mytarget. The list of available targets are in $(RTE_SDK)/config (remove the defconfig\_ prefix). + The GNU standards variables may be used: + http://gnu.org/prep/standards/html_node/Directory-Variables.html and + http://gnu.org/prep/standards/html_node/DESTDIR.html + Example: .. code-block:: console - make install T=x86_64-native-linuxapp-gcc + make install T=x86_64-native-linuxapp-gcc prefix=/usr Test Targets ------------ diff --git a/mk/internal/rte.extvars.mk b/mk/internal/rte.extvars.mk index e248d19..040d39f 100644 --- a/mk/internal/rte.extvars.mk +++ b/mk/internal/rte.extvars.mk @@ -51,7 +51,11 @@ endif RTE_EXTMK ?= $(RTE_SRCDIR)/Makefile export RTE_EXTMK +# RTE_SDK_BIN must point to .config, include/ and lib/. RTE_SDK_BIN := $(RTE_SDK)/$(RTE_TARGET) +ifeq ($(wildcard $(RTE_SDK_BIN)/.config),) +$(error Cannot find .config in $(RTE_SDK)) +endif # # Output files wil go in a separate directory: default output is diff --git a/mk/rte.sdkinstall.mk b/mk/rte.sdkinstall.mk index c5d0881..3201b5b 100644 --- a/mk/rte.sdkinstall.mk +++ b/mk/rte.sdkinstall.mk @@ -1,6 +1,7 @@ # BSD LICENSE # # Copyright(c) 2010-2014 Intel Corporation. All rights reserved. +# Copyright 2015 6WIND S.A. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -36,6 +37,25 @@ O ?= . RTE_OUTPUT := $O/$T +prefix ?= /usr/local +exec_prefix ?= $(prefix) +bindir ?= $(exec_prefix)/bin +libdir ?= $(exec_prefix)/lib +includedir ?= $(prefix)/include/dpdk +datarootdir ?= $(prefix)/share +datadir ?= $(datarootdir)/dpdk +sdkdir ?= $(datadir) +targetdir ?= $(datadir)/$(RTE_TARGET) + +# The install directories may be staged in DESTDIR + +# Create the directory $1 if not exists +rte_mkdir = test -d $1 || mkdir -p $1 + +# Create the relative symbolic link $2 -> $1 +# May be replaced with --relative option of ln from coreutils-8.16 +rte_symlink = ln -snf $$($(RTE_SDK)/scripts/relpath.sh $1 $(dir $2)) $2 + .PHONY: pre_install pre_install: $(Q)if [ ! -f $(RTE_OUTPUT)/.config ]; then \ @@ -57,16 +77,29 @@ pre_install: .PHONY: install install: - @echo ================== Installing $(DESTDIR) - $(Q)mkdir -p $(DESTDIR) - $(Q)tar -C $(RTE_SDK) -cf - mk scripts/*.sh | tar -C $(DESTDIR) -x \ - --keep-newer-files --warning=no-ignore-newer -f - - $(Q)mkdir -p $(DESTDIR)/$T - $(Q)tar -C $(RTE_OUTPUT) -chf - \ - --exclude app --exclude hostapp --exclude build \ - --exclude Makefile --exclude .depdirs . | \ - tar -C $(DESTDIR)/$T -x --keep-newer-files \ - --warning=no-ignore-newer -f - - $(Q)install -D $(RTE_OUTPUT)/app/testpmd \ - $(DESTDIR)/$T/app/testpmd - @echo Installation in $(DESTDIR) complete +ifeq ($(DESTDIR)$(if $T,,+),) + @echo Installation cannot run with T defined and DESTDIR undefined +else + @echo ================== Installing $(DESTDIR)$(prefix)/ + $(Q)$(call rte_mkdir, $(DESTDIR)$(libdir)) + $(Q)cp -a $(RTE_OUTPUT)/lib/* $(DESTDIR)$(libdir) + $(Q)$(call rte_mkdir, $(DESTDIR)$(bindir)) + $(Q)tar -cf - -C $(RTE_OUTPUT) 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)$(includedir)) + $(Q)tar -chf - -C $(RTE_OUTPUT) 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,scripts} $(DESTDIR)$(sdkdir) + $(Q)$(call rte_mkdir, $(DESTDIR)$(targetdir)) + $(Q)cp -a $(RTE_OUTPUT)/.config $(DESTDIR)$(targetdir) + $(Q)$(call rte_symlink, $(DESTDIR)$(includedir), $(DESTDIR)$(targetdir)/include) + $(Q)$(call rte_symlink, $(DESTDIR)$(libdir), $(DESTDIR)$(targetdir)/lib) + @echo Installation in $(DESTDIR)$(prefix)/ complete +endif diff --git a/mk/rte.vars.mk b/mk/rte.vars.mk index f87cf4b..7e7ee14 100644 --- a/mk/rte.vars.mk +++ b/mk/rte.vars.mk @@ -61,18 +61,12 @@ ifneq ($(BUILDING_RTE_SDK),) RTE_MACHINE := $(CONFIG_RTE_MACHINE:"%"=%) RTE_EXEC_ENV := $(CONFIG_RTE_EXEC_ENV:"%"=%) RTE_TOOLCHAIN := $(CONFIG_RTE_TOOLCHAIN:"%"=%) - RTE_TARGET := $(RTE_ARCH)-$(RTE_MACHINE)-$(RTE_EXEC_ENV)-$(RTE_TOOLCHAIN) RTE_SDK_BIN := $(RTE_OUTPUT) endif -RTE_LIBNAME := dpdk +RTE_TARGET ?= $(RTE_ARCH)-$(RTE_MACHINE)-$(RTE_EXEC_ENV)-$(RTE_TOOLCHAIN) -# RTE_TARGET is deducted from config when we are building the SDK. -# Else, when building an external app, RTE_TARGET must be specified -# by the user. -ifeq ($(RTE_TARGET),) -$(error RTE_TARGET is not defined) -endif +RTE_LIBNAME := dpdk ifeq ($(BUILDING_RTE_SDK),) # if we are building an external app/lib, include internal/rte.extvars.mk that will -- 2.5.2