diff options
author | Damjan Marion <damarion@cisco.com> | 2021-10-31 19:47:23 +0100 |
---|---|---|
committer | Damjan Marion <damarion@cisco.com> | 2022-04-05 12:33:48 +0200 |
commit | a117c01c2b4d6903154edbe52abba497ef2dd2b4 (patch) | |
tree | 0bc39a68b1b695c73435763470be4c9f7e2cb4d3 | |
parent | 8bea589cfe0fca1a6f560e16ca66a4cf199041a2 (diff) |
build: ./configure basic cross-compilation support
$ sudo dpkg --add-architecture arm64
[update APT sources.list]
$ sudo apt install qemu crossbuild-essential-arm64 libssl-dev:arm64 libuuid1:arm64 libnl-3-dev:arm64 libnl-route-3-dev:arm64
$ ./configure -w -a aarch64
$ ninja
$ uname -m
x86_64
$ bin/vpp unix interactive
_______ _ _ _____ ___
__/ __/ _ \ (_)__ | | / / _ \/ _ \
_/ _// // / / / _ \ | |/ / ___/ ___/
/_/ /____(_)_/\___/ |___/_/ /_/
vpp# show cpu
Model name: armv8
Microarch model (family): unknown (implementer 0x55 part 0x32c PASS 89.1519459600)
Flags: fp asimd aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve
Base frequency: .06 GHz
vpp#
Type: make
Change-Id: Ib8bf2c7e38f109db42225db2e3182ceb8871baaf
Signed-off-by: Damjan Marion <damarion@cisco.com>
-rwxr-xr-x | configure | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/configure b/configure index 978b71e5c61..d1a356e46a2 100755 --- a/configure +++ b/configure @@ -8,8 +8,11 @@ set -o pipefail -o errtrace -o nounset -o errexit build_dir=. install_dir=/usr/local build_type=release -prefix_path=/opt/vpp/external/$(uname -m)/ src_dir="$(dirname "$(readlink -f "$0")")" +host_arch=$(uname -m) +arch=${host_arch} +wipe=no +args=() help() { @@ -20,6 +23,7 @@ USAGE: ${0} [options] OPTIONS: --help, -h This help + --arch, -a Cross-compile for specified target architecture (aarch64, riscv64, i386, ...) --build-dir, -b Build directory --install-dir, -i Install directory --build-type, -t Build type (release, debug, ...) @@ -42,6 +46,15 @@ while (( "$#" )); do exit 1 fi ;; + -a|--arch) + if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then + arch=$2 + shift 2 + else + echo "Error: Argument for $1 is missing" >&2 + exit 1 + fi + ;; -i|--install-dir) if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then install_dir=$2 @@ -61,8 +74,8 @@ while (( "$#" )); do fi ;; -w|--wipe) - git clean -fdx --exclude=startup.\* - exit 1 + wipe=yes + shift 1 ;; -*|--*=) # unsupported flags echo "Error: Unsupported flag $1" >&2 @@ -75,16 +88,29 @@ while (( "$#" )); do esac done -cmake \ - -G Ninja \ - -S ${src_dir}/src \ - -B ${build_dir} \ - -DCMAKE_PREFIX_PATH=${prefix_path} \ - -DCMAKE_INSTALL_PREFIX=${install_dir} \ - -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON \ - -DCMAKE_BUILD_TYPE:STRING=${build_type} +if [ "${arch}" != "${host_arch}" ] ; then + args+=("-DCMAKE_SYSTEM_NAME=Linux") + args+=("-DCMAKE_SYSTEM_PROCESSOR=${arch}") + args+=("-DCMAKE_C_COMPILER=clang") + args+=("-DCMAKE_C_COMPILER_TARGET=${arch}-linux-gnu") + args+=("-DCMAKE_ASM_COMPILER_TARGET=${arch}-linux-gnu") + args+=("-DCMAKE_FIND_ROOT_PATH=/usr/${arch}-linux-gnu") + args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER") + args+=("-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH") + args+=("-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH") + args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY") +fi - cat << __EOF__ +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}") + +[ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\* + +cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir} + +cat << __EOF__ Useful build commands: |