build: add option to build only for native CPU

Significantly reduces compilation time for uses who are interested
to run binaries only on the build machine.

Type: make
Change-Id: I431f6f7374b6dfa8b3f7c72dc69f3d5cafd1f6bb
Signed-off-by: Damjan Marion <damarion@cisco.com>
diff --git a/src/cmake/cpu.cmake b/src/cmake/cpu.cmake
index dbe0f17..7fb7b59 100644
--- a/src/cmake/cpu.cmake
+++ b/src/cmake/cpu.cmake
@@ -56,6 +56,16 @@
 ##############################################################################
 # CPU optimizations and multiarch support
 ##############################################################################
+
+option(VPP_BUILD_NATIVE_ONLY "Build only for native CPU." OFF)
+
+if(VPP_BUILD_NATIVE_ONLY)
+  check_c_compiler_flag("-march=native" compiler_flag_march_native)
+  if(NOT compiler_flag_march_native)
+    message(FATAL_ERROR "Native-only build not supported by compiler")
+  endif()
+endif()
+
 macro(add_vpp_march_variant v)
   cmake_parse_arguments(ARG
     "OFF"
@@ -93,6 +103,7 @@
       endif()
       if (VPP_MARCH_VARIANT_${uv})
         list(APPEND MARCH_VARIANTS "${v}\;${fs}")
+        list(APPEND MARCH_VARIANTS_NAMES "${v}")
       else()
         list(APPEND MARCH_VARIANTS_DISABLED "${v}\;${fs}")
       endif()
@@ -100,7 +111,10 @@
   endif()
 endmacro()
 
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
+if(VPP_BUILD_NATIVE_ONLY)
+  set(VPP_DEFAULT_MARCH_FLAGS -march=native)
+  set(MARCH_VARIANTS_NAMES "native-only")
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
   set(VPP_DEFAULT_MARCH_FLAGS -march=corei7 -mtune=corei7-avx)
 
   add_vpp_march_variant(hsw