Fix detection of AVX512 capable compilers in getarch
authorMichael Lass <michael.lass@uni-paderborn.de>
Fri, 3 May 2019 19:07:14 +0000 (21:07 +0200)
committerMichael Lass <michael.lass@uni-paderborn.de>
Wed, 5 Jun 2019 15:30:56 +0000 (17:30 +0200)
21eda8b5 introduced a check in getarch.c to test if the compiler is capable of
AVX512. This check currently fails, since the used __AVX2__ macro is only
defined if getarch itself was compiled with AVX2/AVX512 support. Make sure this
is the case by building getarch with -march=native on x86_64. It is only
supposed to run on the build host anyway.

Makefile.system
cmake/system.cmake

index f574edf..eb57cbb 100644 (file)
@@ -9,6 +9,11 @@ ifndef TOPDIR
 TOPDIR = .
 endif
 
+# If ARCH is not set, we use the host system's architecture.
+ifndef ARCH
+ARCH := $(shell uname -m)
+endif
+
 # Catch conflicting usage of ARCH in some BSD environments
 ifeq ($(ARCH), amd64)
 override ARCH=x86_64
@@ -137,6 +142,10 @@ endif
 endif
 
 
+# On x86_64 build getarch with march=native. This is required to detect AVX512 support in getarch.
+ifeq ($(ARCH), x86_64)
+GETARCH_FLAGS += -march=native
+endif
 
 
 ifdef INTERFACE64
index adedd32..7f36962 100644 (file)
@@ -65,6 +65,11 @@ if (DEFINED TARGET)
   set(GETARCH_FLAGS "-DFORCE_${TARGET}")
 endif ()
 
+# On x86_64 build getarch with march=native. This is required to detect AVX512 support in getarch.
+if (X86_64)
+  set(GETARCH_FLAGS "${GETARCH_FLAGS} -march=native")
+endif ()
+
 if (INTERFACE64)
   message(STATUS "Using 64-bit integers.")
   set(GETARCH_FLAGS    "${GETARCH_FLAGS} -DUSE64BITINT")