From patchwork Thu Dec 3 05:02:01 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 9270 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 9A0A68E7F; Thu, 3 Dec 2015 06:03:33 +0100 (CET) Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by dpdk.org (Postfix) with ESMTP id C06428E79 for ; Thu, 3 Dec 2015 06:03:30 +0100 (CET) Received: by wmec201 with SMTP id c201so6452032wme.1 for ; Wed, 02 Dec 2015 21:03:30 -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=J3LusbunDVMJAUrC/u0XAOZko4kl+nvteZ04C4OHcYs=; b=1IgopU5eXySVktK/6tTzYHPlPFpLhYoJfGAJOiq2Tb6IGgA4Nmfrj6DwXc7rfFJUs5 OkbPWa8KORETjuMd1QWXagqYIqtWnUpryaCr819OPG6IW0sExfk7Fdru+VGPebjOT/0k ih8bHO3L39ouujHv1mQxkeszKRCfeZbMZ9nO/jS1IZbSTopTAEXc/NbsWHm5JCjb6QP6 0mqvakoWXCSapNUZnW3wHwwlaU9pU26gs8lXTNUx8ra10DMMPjWVzNtW7EVAeZ2dOJaF Y3hW+mCqUYu0R6GFo9RZUCtg1wkCEH44fNRgHZNoTomnSZhxfH+61mLkx4iFlclv74zK dOaQ== 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=J3LusbunDVMJAUrC/u0XAOZko4kl+nvteZ04C4OHcYs=; b=NUKmc+ZD9YmyoJK1qNDBU/08+6DHQrt8+A3GEXQVSc5+3ZsfyfpgAIn/L2L5h0LnJg /D5TAkOdfViiKFEp+lcqZXW4Im6+OPxuCkeUhviYcpRlgZBTeA5AmFMgRXsv1YitgLMh KTztIg9gEgRhDlaDxpHMS8Xn4KEeFgAoh2T9mMWtvVZTa6TXth+tmbL4U4yly+M7ccQw QMP3UmcY3uK953vHC2QflCVFsHu3SX/cMiHQINySgKY0Q0fVaKnI6N0thixQdaDnWXEG M5AoseYbrfVEpuboPmSOfg5T/WNTx0q+FkuiX7Snd494Aaid3mYeioMH9Fyu4Fcz3deS 1H/w== X-Gm-Message-State: ALoCoQkOf6kj8UCSeN0ayNAAXmNNC3+sglpV4hAQWh+wtn8lHMu6yuuxQXDvmgk1Ry3eUW4RPAS3 X-Received: by 10.194.192.198 with SMTP id hi6mr8640852wjc.141.1449119010671; Wed, 02 Dec 2015 21:03:30 -0800 (PST) Received: from XPS13.ibrowse.com ([93.158.46.55]) by smtp.gmail.com with ESMTPSA id gl4sm5720379wjd.17.2015.12.02.21.03.29 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 02 Dec 2015 21:03:30 -0800 (PST) From: Thomas Monjalon To: dev@dpdk.org Date: Thu, 3 Dec 2015 06:02:01 +0100 Message-Id: <1449118929-19962-5-git-send-email-thomas.monjalon@6wind.com> X-Mailer: git-send-email 2.5.2 In-Reply-To: <1449118929-19962-1-git-send-email-thomas.monjalon@6wind.com> References: <1449028676-19232-1-git-send-email-thomas.monjalon@6wind.com> <1449118929-19962-1-git-send-email-thomas.monjalon@6wind.com> Subject: [dpdk-dev] [PATCH v2 04/12] 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 --- 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 54ea501..4816998 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 ?= . BUILD_DIR := $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 $(BUILD_DIR)/.config ]; then \ @@ -57,16 +77,29 @@ pre_install: .PHONY: install install: pre_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 $(BUILD_DIR) -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 $(BUILD_DIR)/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 $(BUILD_DIR)/lib/* $(DESTDIR)$(libdir) + $(Q)$(call rte_mkdir, $(DESTDIR)$(bindir)) + $(Q)tar -cf - -C $(BUILD_DIR) 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 $(BUILD_DIR) 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 $(BUILD_DIR)/.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