[dpdk-dev] mk: Work around Debian/Ubuntu-specific 'gcc -dumpversion' output

Message ID 7529e243896615deb7d93e6080dfd2aced92bf86.1424774816.git.pmatilai@redhat.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Panu Matilainen Feb. 24, 2015, 10:46 a.m. UTC
  Commit 71f0ab1849b4fc3ca928deb566df12ca725ed150 broke compilation
on some versions of Debian and Ubuntu where gcc has been modified
to only emit MAJOR.MINOR part of the version from 'gcc -dumpversion'.
Drop the micro-version from gcc version comparisons to work around
this, it wasn't being used for anything anyway.

Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
---
 lib/librte_pmd_fm10k/Makefile            |  2 +-
 lib/librte_pmd_i40e/Makefile             |  2 +-
 lib/librte_pmd_ixgbe/Makefile            |  6 +++---
 lib/librte_pmd_vmxnet3/Makefile          |  2 +-
 mk/toolchain/gcc/rte.toolchain-compat.mk | 16 ++++++++--------
 5 files changed, 14 insertions(+), 14 deletions(-)
  

Comments

David Marchand Feb. 24, 2015, 10:59 a.m. UTC | #1
Panu,

ack (and works with my debian gcc).
  
Olivier Matz Feb. 24, 2015, 11:14 a.m. UTC | #2
Hi Panu, David,

On 02/24/2015 11:59 AM, David Marchand wrote:
>> >Commit 71f0ab1849b4fc3ca928deb566df12ca725ed150 broke compilation
>> >on some versions of Debian and Ubuntu where gcc has been modified
>> >to only emit MAJOR.MINOR part of the version from 'gcc -dumpversion'.
>> >Drop the micro-version from gcc version comparisons to work around
>> >this, it wasn't being used for anything anyway.
>> >
>> >Signed-off-by: Panu Matilainen<pmatilai@redhat.com>
>
> ack (and works with my debian gcc).
>

One question: will it work with a version like with 2 digits
for major or minor like 4.10.0 or 10.0.0?
(or maybe it cannot happen with gcc naming conventions?)

Thanks,
Olivier
  
Panu Matilainen Feb. 24, 2015, 11:21 a.m. UTC | #3
On 02/24/2015 01:14 PM, Olivier MATZ wrote:
> Hi Panu, David,
>
> On 02/24/2015 11:59 AM, David Marchand wrote:
>>> >Commit 71f0ab1849b4fc3ca928deb566df12ca725ed150 broke compilation
>>> >on some versions of Debian and Ubuntu where gcc has been modified
>>> >to only emit MAJOR.MINOR part of the version from 'gcc -dumpversion'.
>>> >Drop the micro-version from gcc version comparisons to work around
>>> >this, it wasn't being used for anything anyway.
>>> >
>>> >Signed-off-by: Panu Matilainen<pmatilai@redhat.com>
>>
>> ack (and works with my debian gcc).
>>
>
> One question: will it work with a version like with 2 digits
> for major or minor like 4.10.0 or 10.0.0?
> (or maybe it cannot happen with gcc naming conventions?)

The original change mentions this:

     This [...] scheme would run into trouble if gcc ever went to
     two-digit version segments, but that hasn't happened in the last 10+
     years so it seems like a safe assumption.

...but that's not entirely accurate, 4.10.0 would be a problem but 
10.0.0 not.

	- Panu -
  
Thomas Monjalon Feb. 24, 2015, 11:32 a.m. UTC | #4
2015-02-24 11:59, David Marchand:
> Panu,
> 
> ack (and works with my debian gcc).
> 
> > Commit 71f0ab1849b4fc3ca928deb566df12ca725ed150 broke compilation
> > on some versions of Debian and Ubuntu where gcc has been modified
> > to only emit MAJOR.MINOR part of the version from 'gcc -dumpversion'.
> > Drop the micro-version from gcc version comparisons to work around
> > this, it wasn't being used for anything anyway.
> >
> > Signed-off-by: Panu Matilainen <pmatilai@redhat.com>

Applied, thanks
  
John McNamara Feb. 24, 2015, 1:34 p.m. UTC | #5
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Panu Matilainen
> Sent: Tuesday, February 24, 2015 10:47 AM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] mk: Work around Debian/Ubuntu-specific 'gcc -
> dumpversion' output
> 
> Commit 71f0ab1849b4fc3ca928deb566df12ca725ed150 broke compilation on some
> versions of Debian and Ubuntu where gcc has been modified to only emit
> MAJOR.MINOR part of the version from 'gcc -dumpversion'.
> Drop the micro-version from gcc version comparisons to work around this,
> it wasn't being used for anything anyway.
> 
> -ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
> +ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)

Hi,

I see this has been applied already but to me this version is less clear than the previous patch version.

And are we sure we won't need the micro-version. If we do, to account for something broken in a point release of gcc, we will have to redo this patch again.

John
  
Panu Matilainen Feb. 24, 2015, 2:13 p.m. UTC | #6
On 02/24/2015 03:34 PM, Mcnamara, John wrote:
>> -----Original Message-----
>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Panu Matilainen
>> Sent: Tuesday, February 24, 2015 10:47 AM
>> To: dev@dpdk.org
>> Subject: [dpdk-dev] [PATCH] mk: Work around Debian/Ubuntu-specific 'gcc -
>> dumpversion' output
>>
>> Commit 71f0ab1849b4fc3ca928deb566df12ca725ed150 broke compilation on some
>> versions of Debian and Ubuntu where gcc has been modified to only emit
>> MAJOR.MINOR part of the version from 'gcc -dumpversion'.
>> Drop the micro-version from gcc version comparisons to work around this,
>> it wasn't being used for anything anyway.
>>
>> -ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
>> +ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
>
> Hi,
>
> I see this has been applied already but to me this version is less clear than the previous patch version.
>
> And are we sure we won't need the micro-version. If we do, to account for something broken in a point release of gcc, we will have to redo this patch again.

Sure? I'm not enough of a fool to say yes to a question like that. I 
just know it hasn't been needed before, and it seems unlikely it will be 
needed later on either, gcc micro-version updates tend to be conservative.

My only interest here was to fix the version comparisons in a way that 
makes gcc 5 naturally supported, and I dont really give a damn whether 
there's a micro-version involved or not :) If you feel strongly about 
it, send a patch. I'm not going to object.

	- Panu -
  

Patch

diff --git a/lib/librte_pmd_fm10k/Makefile b/lib/librte_pmd_fm10k/Makefile
index 2730b81..998bf23 100644
--- a/lib/librte_pmd_fm10k/Makefile
+++ b/lib/librte_pmd_fm10k/Makefile
@@ -62,7 +62,7 @@  else
 #
 # CFLAGS for gcc
 #
-ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
+ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
 CFLAGS     += -Wno-deprecated
 endif
 CFLAGS_BASE_DRIVER = -Wno-unused-parameter -Wno-unused-value
diff --git a/lib/librte_pmd_i40e/Makefile b/lib/librte_pmd_i40e/Makefile
index 484379a..64bab16 100644
--- a/lib/librte_pmd_i40e/Makefile
+++ b/lib/librte_pmd_i40e/Makefile
@@ -69,7 +69,7 @@  CFLAGS_BASE_DRIVER += -Wno-pointer-to-int-cast
 CFLAGS_BASE_DRIVER += -Wno-format-nonliteral
 CFLAGS_BASE_DRIVER += -Wno-format-security
 
-ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
+ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
 CFLAGS_BASE_DRIVER += -Wno-unused-but-set-variable
 endif
 
diff --git a/lib/librte_pmd_ixgbe/Makefile b/lib/librte_pmd_ixgbe/Makefile
index ab56cbf..43870f7 100644
--- a/lib/librte_pmd_ixgbe/Makefile
+++ b/lib/librte_pmd_ixgbe/Makefile
@@ -60,18 +60,18 @@  else
 #
 # CFLAGS for gcc
 #
-ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
+ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
 CFLAGS     += -Wno-deprecated
 endif
 CFLAGS_BASE_DRIVER = -Wno-unused-parameter -Wno-unused-value
 CFLAGS_BASE_DRIVER += -Wno-strict-aliasing -Wno-format-extra-args
 
-ifeq ($(shell test $(GCC_VERSION) -ge 460 && echo 1), 1)
+ifeq ($(shell test $(GCC_VERSION) -ge 46 && echo 1), 1)
 CFLAGS_ixgbe_common.o += -Wno-unused-but-set-variable
 CFLAGS_ixgbe_x550.o += -Wno-unused-but-set-variable -Wno-maybe-uninitialized
 endif
 
-ifeq ($(shell test $(GCC_VERSION) -le 460 && echo 1), 1)
+ifeq ($(shell test $(GCC_VERSION) -le 46 && echo 1), 1)
 CFLAGS_ixgbe_x550.o += -Wno-uninitialized
 CFLAGS_ixgbe_phy.o += -Wno-uninitialized
 endif
diff --git a/lib/librte_pmd_vmxnet3/Makefile b/lib/librte_pmd_vmxnet3/Makefile
index 9dda0a7..fc616c4 100644
--- a/lib/librte_pmd_vmxnet3/Makefile
+++ b/lib/librte_pmd_vmxnet3/Makefile
@@ -56,7 +56,7 @@  else
 #
 # CFLAGS for gcc
 #
-ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
+ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
 CFLAGS     += -Wno-deprecated
 endif
 CFLAGS_BASE_DRIVER = -Wno-unused-parameter -Wno-unused-value
diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk
index a867559..05aa37f 100644
--- a/mk/toolchain/gcc/rte.toolchain-compat.mk
+++ b/mk/toolchain/gcc/rte.toolchain-compat.mk
@@ -38,10 +38,10 @@ 
 
 #find out GCC version
 
-GCC_VERSION = $(subst .,,$(shell $(CC) -dumpversion))
+GCC_VERSION = $(subst .,,$(shell $(CC) -dumpversion | cut -f1-2 -d.))
 
 # if GCC is older than 4.x
-ifeq ($(shell test $(GCC_VERSION) -lt 400 && echo 1), 1)
+ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1)
 	MACHINE_CFLAGS =
 $(warning You are using GCC < 4.x. This is neither supported, nor tested.)
 
@@ -55,18 +55,18 @@  else
 # GCC 4.6.x - added support for corei7, corei7-avx
 # GCC 4.7.x - added support for fsgsbase, rdrnd, f16c, core-avx-i, core-avx2
 
-	ifeq ($(shell test $(GCC_VERSION) -le 470 && echo 1), 1)
+	ifeq ($(shell test $(GCC_VERSION) -le 47 && echo 1), 1)
 		MACHINE_CFLAGS := $(patsubst -march=core-avx-i,-march=corei7-avx,$(MACHINE_CFLAGS))
 		MACHINE_CFLAGS := $(patsubst -march=core-avx2,-march=core-avx2,$(MACHINE_CFLAGS))
 	endif
-	ifeq ($(shell test $(GCC_VERSION) -lt 460 && echo 1), 1)
+	ifeq ($(shell test $(GCC_VERSION) -lt 46 && echo 1), 1)
 		MACHINE_CFLAGS := $(patsubst -march=corei7-avx,-march=core2 -maes -mpclmul -mavx,$(MACHINE_CFLAGS))
 		MACHINE_CFLAGS := $(patsubst -march=corei7,-march=core2 -maes -mpclmul,$(MACHINE_CFLAGS))
 	endif
-	ifeq ($(shell test $(GCC_VERSION) -lt 450 && echo 1), 1)
+	ifeq ($(shell test $(GCC_VERSION) -lt 45 && echo 1), 1)
 		MACHINE_CFLAGS := $(patsubst -march=atom,-march=core2 -mssse3,$(MACHINE_CFLAGS))
 	endif
-	ifeq ($(shell test $(GCC_VERSION) -lt 440 && echo 1), 1)
+	ifeq ($(shell test $(GCC_VERSION) -lt 44 && echo 1), 1)
 		MACHINE_CFLAGS := $(filter-out -mavx -mpclmul -maes,$(MACHINE_CFLAGS))
 		ifneq ($(findstring SSE4_2, $(CPUFLAGS)),)
 			MACHINE_CFLAGS += -msse4.2
@@ -75,12 +75,12 @@  else
 			MACHINE_CFLAGS += -msse4.1
 		endif
 	endif
-	ifeq ($(shell test $(GCC_VERSION) -lt 430 && echo 1), 1)
+	ifeq ($(shell test $(GCC_VERSION) -lt 43 && echo 1), 1)
 		MACHINE_CFLAGS := $(filter-out -msse% -mssse%,$(MACHINE_CFLAGS))
 		MACHINE_CFLAGS := $(patsubst -march=core2,-march=generic,$(MACHINE_CFLAGS))
 		MACHINE_CFLAGS += -msse3
 	endif
-	ifeq ($(shell test $(GCC_VERSION) -lt 420 && echo 1), 1)
+	ifeq ($(shell test $(GCC_VERSION) -lt 42 && echo 1), 1)
 		MACHINE_CFLAGS := $(filter-out -march% -mtune% -msse%,$(MACHINE_CFLAGS))
 	endif
 endif