From 45e05396399b7ead25d87e79a806f0c03b78965b Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Mon, 25 Apr 2022 12:38:40 +0200 Subject: 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 --- configure | 7 +++++++ src/CMakeLists.txt | 1 + src/cmake/cpu.cmake | 16 +++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) 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 -- cgit 1.2.3-korg