build: add option to build only for native CPU 30/36030/3
authorDamjan Marion <damarion@cisco.com>
Mon, 25 Apr 2022 10:38:40 +0000 (12:38 +0200)
committerDamjan Marion <damarion@cisco.com>
Mon, 25 Apr 2022 11:49:37 +0000 (13:49 +0200)
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>
configure
src/CMakeLists.txt
src/cmake/cpu.cmake

index d1a356e..29f7dbd 100755 (executable)
--- a/configure
+++ b/configure
@@ -11,6 +11,7 @@ build_type=release
 src_dir="$(dirname "$(readlink -f "$0")")"
 host_arch=$(uname -m)
 arch=${host_arch}
+native_only=no
 wipe=no
 args=()
 
@@ -27,6 +28,7 @@ OPTIONS:
   --build-dir, -b         Build directory
   --install-dir, -i       Install directory
   --build-type, -t        Build type (release, debug, ...)
+  --native-only, -n       Only compile for Native CPU (no multiarch)
   --wipe, -w              Wipe whole repo (except startup.* files)
 __EOF__
 }
@@ -73,6 +75,10 @@ while (( "$#" )); do
         exit 1
       fi
       ;;
+    -n|--native-only)
+      native_only=yes
+      shift 1
+      ;;
     -w|--wipe)
       wipe=yes
       shift 1
@@ -105,6 +111,7 @@ args+=("-DCMAKE_PREFIX_PATH=/opt/vpp/external/${arch}")
 args+=("-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON")
 args+=("-DCMAKE_INSTALL_PREFIX=${install_dir}")
 args+=("-DCMAKE_BUILD_TYPE:STRING=${build_type}")
+[ "${native_only}" == "yes" ] && args+=("-DVPP_BUILD_NATIVE_ONLY:BOOL=ON")
 
 [ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*
 
index de0c241..2fb0703 100644 (file)
@@ -299,3 +299,4 @@ pr("Target processor" ${CMAKE_SYSTEM_PROCESSOR})
 pr("Prefix path" ${CMAKE_PREFIX_PATH})
 pr("Install prefix" ${CMAKE_INSTALL_PREFIX})
 pr("Library dir" ${VPP_LIBRARY_DIR})
+pr("Multiarch variants" ${MARCH_VARIANTS_NAMES})
index dbe0f17..7fb7b59 100644 (file)
@@ -56,6 +56,16 @@ endif()
 ##############################################################################
 # 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 @@ macro(add_vpp_march_variant v)
       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 @@ macro(add_vpp_march_variant v)
   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