From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by dpdk.org (Postfix) with ESMTP id A0DAD8E78 for ; Thu, 3 Dec 2015 14:47:02 +0100 (CET) Received: by wmww144 with SMTP id w144so22801170wmw.0 for ; Thu, 03 Dec 2015 05:47:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=B/Jj6U0YB0bLWiH79bHvl/bSstE+P26KC75qrFoboYw=; b=gIJHDPmtN+2C2j6/zDqr+UGTFmuq+oKp/TV4WF39Ai6XE0IKTxTNH3+q9WHWajgY52 MZjIf7RZIOupSyKY+Rn/KmlkfeG60NZ3nEOB66d5WMXdG3KJIadq/SJMRKuotpjINjlq zVDGHXaayzCc0KJhpeQAR6+Q4dP/8D9bf0OMaemLfhTvpaeJQcIaplCTC0cS2jLolXb2 wY5yMbm7Lh5M9NzNXwB7Y5OLuBCfj4Wue1wsd32D/vi4UA086fs3uJ1ChWlACO4Md7bi Ficr9WI38r/XkdAEIvESMEiR2mJvJ6q9pyJgz3mRQUag2vpBKZYDj1uFDFr0BdvpnKmI q5EA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=B/Jj6U0YB0bLWiH79bHvl/bSstE+P26KC75qrFoboYw=; b=iDfIzb1SjLnS4uQ3GHM/hc4VqH7ZdcjBxjFdqf87WKX+m5QCrZyXDav+f0teR68Dh6 17wHCYHv0p/doDjJoK1nlkyY0qYlsO+3c8cQoIwkSXbat085p+8OOR7TpVE/21Jhl96e SBOoGo++fpwP8mweu1Do8wjYB121CzLWFEcbEdTfanV82OaPqKCOQNnHPVWmhy12ndT4 VzLqVvbUbtnuLMaC9k4CIYXPhvurG8NNxrz95zzZi767nzv8/ug3h6jDYqCWak6prVJM bxjbVRkYtAr+ZXFzr1BK0VXbcob9cf/RgaI3i19gLxGSAeL41kuOLQ4fPk9TNcWpPDdH YY+Q== X-Gm-Message-State: ALoCoQn5Mtwtxqrk5TnoYUJeVWdet5RE0g0TA1SQKROfB6cjjRZlp+P00j6ka0vkuJyGJqbbUJZM X-Received: by 10.194.117.68 with SMTP id kc4mr11215838wjb.77.1449150422438; Thu, 03 Dec 2015 05:47:02 -0800 (PST) Received: from XPS13.dev.6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by smtp.gmail.com with ESMTPSA id k133sm8063912wmg.18.2015.12.03.05.47.01 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 03 Dec 2015 05:47:01 -0800 (PST) From: Thomas Monjalon To: dev@dpdk.org Date: Thu, 3 Dec 2015 14:45:31 +0100 Message-Id: <1449150340-21984-5-git-send-email-thomas.monjalon@6wind.com> X-Mailer: git-send-email 2.5.2 In-Reply-To: <1449150340-21984-1-git-send-email-thomas.monjalon@6wind.com> References: <1449118929-19962-1-git-send-email-thomas.monjalon@6wind.com> <1449150340-21984-1-git-send-email-thomas.monjalon@6wind.com> Subject: [dpdk-dev] [PATCH v3 04/13] mk: install a standard cutomizable tree X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Dec 2015 13:47:02 -0000 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 Acked-by: Panu Matilainen --- 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: 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