summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2022-04-25 12:38:40 +0200
committerDamjan Marion <damarion@cisco.com>2022-04-25 13:49:37 +0200
commit45e05396399b7ead25d87e79a806f0c03b78965b (patch)
treebcd50ce7d197e2351d2f1d1816b9428111dd7825
parent4e6222d598d5ec9db1b1e06bb3a45aca76a37daa (diff)
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>
-rwxr-xr-xconfigure7
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/cmake/cpu.cmake16
3 files changed, 23 insertions, 1 deletions
diff --git a/configure b/configure
index d1a356e46a2..29f7dbd3258 100755
--- 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.\*
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index de0c24135d7..2fb0703e174 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -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})
diff --git a/src/cmake/cpu.cmake b/src/cmake/cpu.cmake
index dbe0f17b94f..7fb7b591851 100644
--- a/src/cmake/cpu.cmake
+++ b/src/cmake/cpu.cmake
@@ -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