mk: fix detection of SSE4.2 on FreeBSD
authorBruce Richardson <bruce.richardson@intel.com>
Mon, 7 Jul 2014 23:36:56 +0000 (00:36 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 18 Jul 2014 23:54:20 +0000 (01:54 +0200)
Add a special case to the native target makefile, where we check if
-march=native shows SSE4.2 support. If it does not, then not everything may
build, so we check if the hardware supports SSE4.2, and use a corei7 target
explicitly to get the SSE4.2 support.

Then ACL library, which requires SSE4.2, can be re-enabled for FreeBSD.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Tested-by: Zhaochen Zhan <zhaochen.zhan@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
config/defconfig_x86_64-native-bsdapp-gcc
mk/machine/native/rte.vars.mk

index 2234193..e91738b 100644 (file)
@@ -69,8 +69,3 @@ CONFIG_RTE_ARCH_X86_64=y
 #
 CONFIG_RTE_TOOLCHAIN="gcc"
 CONFIG_RTE_TOOLCHAIN_GCC=y
-
-#
-# GCC doesn't detect SSE4.x support correctly on BSD, so disable ACL lib
-#
-CONFIG_RTE_LIBRTE_ACL=n
index da9aa71..6ce0c72 100644 (file)
 # CPU_ASFLAGS =
 
 MACHINE_CFLAGS = -march=native
+
+# On FreeBSD systems, sometimes the correct CPU type is not picked up.
+# To get everything to compile, we need SSE4.2 support, so check if that is
+# reported by compiler. If not, check if the CPU actually supports it, and if
+# so, set the compilation target to be a corei7, minimum target with SSE4.2.
+SSE42_SUPPORT=$(shell $(CC) -march=native -dM -E - </dev/null | grep SSE4_2)
+ifeq ($(SSE42_SUPPORT),)
+  CPU_SSE42_SUPPORT = $(shell grep SSE4\.2 /var/run/dmesg.boot 2>/dev/null)
+  ifneq ($(CPU_SSE42_SUPPORT),)
+    MACHINE_CFLAGS = -march=corei7
+  endif
+endif