From patchwork Wed Dec 2 03:57:49 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 9233 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 4017B8E64; Wed, 2 Dec 2015 04:59:23 +0100 (CET) Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) by dpdk.org (Postfix) with ESMTP id BAA428E5B for ; Wed, 2 Dec 2015 04:59:21 +0100 (CET) Received: by wmuu63 with SMTP id u63so198571347wmu.0 for ; Tue, 01 Dec 2015 19:59:21 -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=a2csLXJr4ZKlJcRjp7d6k4YIUIQUq4L+88I1m2uwxsc=; b=Z77O7IP1c8AB5HSilMuNt8+C+ypxj2jTzbGeqC/ESACbT5jweRvb5YOSJ7947UiQ5j 8aAHJ0/TWbbXUp2xwK9t7FvOAGHqwyz2mrG9c16kmyYX9+wt1FCA8jhlq8MKbce1TRme mjQyCy9HjDQJVud3Mh9cv7G/YGA7bqqnPrIaelNWTkg3HRHlkSv3BAFci91vuxWme2yh j4TqW476869Uj2ZKqAsnNQ/yHAEJ1AzVRqchJIbzx30AsNGTDSyvFwVAnfd3/CnYo+Yc RdCVgywSkzdPI3zrYeMQbaHfpNzjKrnxrCXhCRSy35svdl50i+A091TFQJ8CXPzT+Fhx R4Qg== 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=a2csLXJr4ZKlJcRjp7d6k4YIUIQUq4L+88I1m2uwxsc=; b=l1zssZN4FzxpYOnssAeOTpMYhRCYuz+bv2+JOZ9ngxaI4wphSjbH7XVfZwl22OzKtW Ib7IdlKzQYgTkvJcv4zqBmP+OT5xAn4JYjjrUBydMR5Fd37N1aaQnUjH1ZoS09CGS/eL bwAvBmCQN3rlHUMZFgIdRWzbvz6FqV3Y1Hh2D1kvQEU0zaGLGzNbX23k8YKNJMMPnHUV XZ71y9EnKu4lese22/2NRlVi8W0+nWheG+PjHwnuaXGbueGNx6gjDoVaKoApLVBKC1CR nWH9w7cSlyOi9F3f/aMpAzEII3Y1g2s2uSQourt4wFnc/FXGzWvzDjXuGGg+eZztAgHi LRMg== X-Gm-Message-State: ALoCoQkULwYBZC4caXbvAxHhSU4LvNkEzOOHw/Z7Cxa/GK7vrcOm+Q6Q7PXcBpSYtCX/7uExp6k8 X-Received: by 10.194.71.202 with SMTP id x10mr1635178wju.169.1449028761528; Tue, 01 Dec 2015 19:59:21 -0800 (PST) Received: from XPS13.ibrowse.com ([93.158.52.3]) by smtp.gmail.com with ESMTPSA id h5sm783942wjz.21.2015.12.01.19.59.19 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 01 Dec 2015 19:59:21 -0800 (PST) From: Thomas Monjalon To: dev@dpdk.org Date: Wed, 2 Dec 2015 04:57:49 +0100 Message-Id: <1449028676-19232-4-git-send-email-thomas.monjalon@6wind.com> X-Mailer: git-send-email 2.5.2 In-Reply-To: <1449028676-19232-1-git-send-email-thomas.monjalon@6wind.com> References: <1449028676-19232-1-git-send-email-thomas.monjalon@6wind.com> Subject: [dpdk-dev] [PATCH 03/10] 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: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html https://www.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. The old installed tree was static and always had .config, includes and libs in a RTE_TARGET subdirectory. There is no such directory anymore in an installed SDK. So the top directory is checked. But RTE_TARGET can still be used, especially to build an app with a compiled but not installed SDK. That's why both cases are looked for RTE_SDK_BIN. The default prefix /usr/local is empty in the T= case which is used only for a local install. 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 + mk/internal/rte.extvars.mk | 8 +++++++ mk/rte.sdkinstall.mk | 59 ++++++++++++++++++++++++++++++++++++---------- mk/rte.vars.mk | 7 ------ 4 files changed, 55 insertions(+), 20 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/mk/internal/rte.extvars.mk b/mk/internal/rte.extvars.mk index e248d19..dfba2f2 100644 --- a/mk/internal/rte.extvars.mk +++ b/mk/internal/rte.extvars.mk @@ -51,7 +51,15 @@ 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),) +# RTE_TARGET is empty when using a default SDK installation. +RTE_SDK_BIN := $(RTE_SDK) +ifeq ($(wildcard $(RTE_SDK_BIN)/.config),) +$(error Cannot find .config in $(RTE_SDK)) +endif +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 ed3ed86..91273be 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 @@ -32,10 +33,30 @@ # Build directory is given with O= O ?= . +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) + +# The install directories may be staged in DESTDIR + # Configuration, compilation and installation can be done at once # with make install T= # The build directory is T and may be prepended with O BUILD_DIR := $O/$T +# Default usage of T= will install an almost flat staging tree +export prefix = + +# 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: @@ -58,16 +79,28 @@ 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 $(BUILD_DIR)/.config $(DESTDIR)$(sdkdir) + $(Q)cp -a $(RTE_SDK)/{mk,scripts} $(DESTDIR)$(sdkdir) + $(Q)$(call rte_symlink, $(DESTDIR)$(includedir), $(DESTDIR)$(sdkdir)/include) + $(Q)$(call rte_symlink, $(DESTDIR)$(libdir), $(DESTDIR)$(sdkdir)/lib) + @echo Installation in $(DESTDIR)$(prefix)/ complete +endif diff --git a/mk/rte.vars.mk b/mk/rte.vars.mk index f87cf4b..e26d193 100644 --- a/mk/rte.vars.mk +++ b/mk/rte.vars.mk @@ -67,13 +67,6 @@ endif RTE_LIBNAME := dpdk -# 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 - ifeq ($(BUILDING_RTE_SDK),) # if we are building an external app/lib, include internal/rte.extvars.mk that will # define RTE_OUTPUT, RTE_SRCDIR, RTE_EXTMK, RTE_SDK_BIN, (etc ...)