From patchwork Wed Jul 8 14:55:23 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 6197 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 F14AD5A6F; Wed, 8 Jul 2015 16:56:44 +0200 (CEST) Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) by dpdk.org (Postfix) with ESMTP id 8BB4E5A63 for ; Wed, 8 Jul 2015 16:56:41 +0200 (CEST) Received: by wibdq8 with SMTP id dq8so215436412wib.1 for ; Wed, 08 Jul 2015 07:56:41 -0700 (PDT) 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=cFbOINQJjWtFG8T6Z5qypdQ1rDO6UgYMGDerSXjK6Ww=; b=GxYEcC4DbcPFU8QlXTicFeOjPqbB5qyTs5JfQ8L+WfHJIuyzj64iNQGicrgU4oEJ4S STOmX75l5r6c1SDeFgL33xztB3pt/OIcfDoxiCA7jfGL5r+KQkAXlBi0ozZSqMmywDR5 yHFbscukEmrxWfHiBDD1DfhjuNwkKe93wqz9E4BCYA6VBJJir4qISoGuaIkMG/khrSQu jx2yubLKh6GDM1yfkDSZU0fIfjs5xzSePTHR98zihsF0WftdEQ3VUobZQ4oIFiGQ8ZRU RZw68vJDbF5j38xbUgn+paCiL0gVZnIMlrLnz0mCZ7EqB3TYu8F5g8u4RKd8ZtwfSztZ nezw== X-Gm-Message-State: ALoCoQl19Y+rHs+dp/OOXebGZ3CNloMcPVcXX5N7Pxc+OKSouvjWGVlBMWLUsCP+i3ry9y3bibhC X-Received: by 10.194.109.229 with SMTP id hv5mr21590537wjb.119.1436367401387; Wed, 08 Jul 2015 07:56:41 -0700 (PDT) Received: from localhost.localdomain (136-92-190-109.dsl.ovh.fr. [109.190.92.136]) by smtp.gmail.com with ESMTPSA id lj14sm3332162wic.18.2015.07.08.07.56.39 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 Jul 2015 07:56:40 -0700 (PDT) From: Thomas Monjalon To: nhorman@tuxdriver.com Date: Wed, 8 Jul 2015 16:55:23 +0200 Message-Id: <1436367323-19968-3-git-send-email-thomas.monjalon@6wind.com> X-Mailer: git-send-email 2.4.2 In-Reply-To: <1436367323-19968-1-git-send-email-thomas.monjalon@6wind.com> References: <1435874746-32095-1-git-send-email-thomas.monjalon@6wind.com> <1436367323-19968-1-git-send-email-thomas.monjalon@6wind.com> Cc: dev@dpdk.org Subject: [dpdk-dev] [PATCH v2 2/2] mk: enable next abi preview 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" When a change makes really hard to keep ABI compatibility, instead of waiting next release to break the ABI, it is smoother to introduce the new code as a preview and disable it when packaging. The flag RTE_NEXT_ABI must be used to "ifdef" the new code. When the release is out, a dynamically linked application can use the new shared libraries with the old ABI while developpers can prepare their application for the next ABI by reading the deprecation notice and easily testing the new code. When starting the next release cycle, the "ifdefs" will be removed and the ABI break will be marked by incrementing LIBABIVER. The map files will also be updated. The default value is enabled to be developer compliant. The packagers must disable it as done in pkg/dpdk.spec. When enabled, all shared library numbers are incremented by appending a minor .1 to the old ABI number. In the next release, only impacted libraries will have a major +1 increment. The impacted libraries must provide an alternative map file to use with this option. The ABI policy is updated. Signed-off-by: Thomas Monjalon --- config/common_bsdapp | 5 +++++ config/common_linuxapp | 5 +++++ doc/guides/guidelines/versioning.rst | 12 +++++++++--- mk/rte.lib.mk | 6 ++++-- pkg/dpdk.spec | 1 + scripts/validate-abi.sh | 2 ++ 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/config/common_bsdapp b/config/common_bsdapp index 78754b2..a4e3262 100644 --- a/config/common_bsdapp +++ b/config/common_bsdapp @@ -90,6 +90,11 @@ CONFIG_RTE_BUILD_COMBINE_LIBS=n CONFIG_RTE_LIBNAME=intel_dpdk # +# Use newest code breaking previous ABI +# +CONFIG_RTE_NEXT_ABI=y + +# # Compile Environment Abstraction Layer # CONFIG_RTE_LIBRTE_EAL=y diff --git a/config/common_linuxapp b/config/common_linuxapp index f5646e0..050bf35 100644 --- a/config/common_linuxapp +++ b/config/common_linuxapp @@ -90,6 +90,11 @@ CONFIG_RTE_BUILD_COMBINE_LIBS=n CONFIG_RTE_LIBNAME="intel_dpdk" # +# Use newest code breaking previous ABI +# +CONFIG_RTE_NEXT_ABI=y + +# # Compile Environment Abstraction Layer # CONFIG_RTE_LIBRTE_EAL=y diff --git a/doc/guides/guidelines/versioning.rst b/doc/guides/guidelines/versioning.rst index ea789cb..8a739dd 100644 --- a/doc/guides/guidelines/versioning.rst +++ b/doc/guides/guidelines/versioning.rst @@ -55,12 +55,18 @@ being provided. The requirements for doing so are: #. At least 3 acknowledgments of the need to do so must be made on the dpdk.org mailing list. +#. The changes (including an alternative map file) must be gated with + the ``RTE_NEXT_ABI`` option, and provided with a deprecation notice at the + same time. + It will become the default ABI in the next release. + #. A full deprecation cycle, as explained above, must be made to offer downstream consumers sufficient warning of the change. -#. The ``LIBABIVER`` variable in the makefile(s) where the ABI changes are - incorporated must be incremented in parallel with the ABI changes - themselves. +#. At the beginning of the next release cycle, every ``RTE_NEXT_ABI`` + conditions will be removed, the ``LIBABIVER`` variable in the makefile(s) + where the ABI is changed will be incremented, and the map files will + be updated. Note that the above process for ABI deprecation should not be undertaken lightly. ABI stability is extremely important for downstream consumers of the diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk index fff62a7..0ad32cb 100644 --- a/mk/rte.lib.mk +++ b/mk/rte.lib.mk @@ -37,11 +37,13 @@ include $(RTE_SDK)/mk/internal/rte.depdirs-pre.mk # VPATH contains at least SRCDIR VPATH += $(SRCDIR) -ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) +ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB)) +ifeq ($(CONFIG_RTE_NEXT_ABI),y) +LIB := $(LIB).1 +endif CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP) - endif diff --git a/pkg/dpdk.spec b/pkg/dpdk.spec index 5f6ec6a..fb71ccc 100644 --- a/pkg/dpdk.spec +++ b/pkg/dpdk.spec @@ -82,6 +82,7 @@ make O=%{target} T=%{target} config sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' %{target}/.config +sed -ri 's,(RTE_NEXT_ABI=).*,\1n,' %{target}/.config sed -ri 's,(LIBRTE_VHOST=).*,\1y,' %{target}/.config sed -ri 's,(LIBRTE_PMD_PCAP=).*,\1y,' %{target}/.config sed -ri 's,(LIBRTE_PMD_XENVIRT=).*,\1y,' %{target}/.config diff --git a/scripts/validate-abi.sh b/scripts/validate-abi.sh index 1747b8b..4476433 100755 --- a/scripts/validate-abi.sh +++ b/scripts/validate-abi.sh @@ -157,6 +157,7 @@ git checkout $TAG1 # Make sure we configure SHARED libraries # Also turn off IGB and KNI as those require kernel headers to build sed -i -e"$ a\CONFIG_RTE_BUILD_SHARED_LIB=y" config/defconfig_$TARGET +sed -i -e"$ a\CONFIG_RTE_NEXT_ABI=n" config/defconfig_$TARGET sed -i -e"$ a\CONFIG_RTE_EAL_IGB_UIO=n" config/defconfig_$TARGET sed -i -e"$ a\CONFIG_RTE_LIBRTE_KNI=n" config/defconfig_$TARGET @@ -198,6 +199,7 @@ git checkout $TAG2 # Make sure we configure SHARED libraries # Also turn off IGB and KNI as those require kernel headers to build sed -i -e"$ a\CONFIG_RTE_BUILD_SHARED_LIB=y" config/defconfig_$TARGET +sed -i -e"$ a\CONFIG_RTE_NEXT_ABI=n" config/defconfig_$TARGET sed -i -e"$ a\CONFIG_RTE_EAL_IGB_UIO=n" config/defconfig_$TARGET sed -i -e"$ a\CONFIG_RTE_LIBRTE_KNI=n" config/defconfig_$TARGET