mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 01:51:26 +00:00
It should generally be possible to build OVS with mostly c99 standard and without GNU extensions. It's not a pure c99 build, because some non-standard features from POSIX variants are always enabled if available via AC_USE_SYSTEM_EXTENSIONS. Without them we'll not have some essentials like RW locks, for example. '-std=c99' doesn't disable all the GNU extensions, only some of them. It's technically possible to use '-fgnuc-version=0' with clang to fully disable all the extensions, but it is causing build assertions with the version of clang provided in Ubuntu 20.04 in GHA (some issue with packed structures not being correctly packed). We may use this option in the future after the base image upgrade. Acked-by: Eelco Chaudron <echaudro@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
129 lines
3.4 KiB
Bash
Executable File
129 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -o errexit
|
|
set -x
|
|
|
|
CFLAGS_FOR_OVS="-g -O2"
|
|
SPARSE_FLAGS=""
|
|
EXTRA_OPTS="--enable-Werror"
|
|
|
|
function install_dpdk()
|
|
{
|
|
local VERSION_FILE="dpdk-dir/cached-version"
|
|
local DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
|
|
|
|
if [ "$DPDK_SHARED" ]; then
|
|
EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=shared"
|
|
export LD_LIBRARY_PATH=$DPDK_LIB/:$LD_LIBRARY_PATH
|
|
else
|
|
EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=static"
|
|
fi
|
|
|
|
# Export the following path for pkg-config to find the .pc file.
|
|
export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
|
|
|
|
if [ ! -f "${VERSION_FILE}" ]; then
|
|
echo "Could not find DPDK in $(pwd)/dpdk-dir"
|
|
return 1
|
|
fi
|
|
|
|
# Update the library paths.
|
|
sudo ldconfig
|
|
echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $(pwd)/dpdk-dir"
|
|
}
|
|
|
|
function configure_ovs()
|
|
{
|
|
./boot.sh
|
|
./configure CFLAGS="${CFLAGS_FOR_OVS}" $*
|
|
}
|
|
|
|
function build_ovs()
|
|
{
|
|
configure_ovs $OPTS
|
|
make selinux-policy
|
|
|
|
make -j4
|
|
}
|
|
|
|
if [ "$DEB_PACKAGE" ]; then
|
|
./boot.sh && ./configure --with-dpdk=$DPDK && make debian
|
|
mk-build-deps --install --root-cmd sudo --remove debian/control
|
|
dpkg-checkbuilddeps
|
|
make debian-deb
|
|
packages=$(ls $(pwd)/../*.deb)
|
|
deps=""
|
|
for pkg in $packages; do
|
|
_ifs=$IFS
|
|
IFS=","
|
|
for dep in $(dpkg-deb -f $pkg Depends); do
|
|
dep_name=$(echo "$dep"|awk '{print$1}')
|
|
# Don't install internal package inter-dependencies from apt
|
|
echo $dep_name | grep -q openvswitch && continue
|
|
deps+=" $dep_name"
|
|
done
|
|
IFS=$_ifs
|
|
done
|
|
# install package dependencies from apt
|
|
echo $deps | xargs sudo apt -y install
|
|
# install the locally built openvswitch packages
|
|
sudo dpkg -i $packages
|
|
|
|
# Check that python C extension is built correctly.
|
|
python3 -c "
|
|
from ovs import _json
|
|
import ovs.json
|
|
assert ovs.json.from_string('{\"a\": 42}') == {'a': 42}"
|
|
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then
|
|
install_dpdk
|
|
fi
|
|
|
|
if [ "$STD" ]; then
|
|
CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -std=$STD"
|
|
fi
|
|
|
|
if [ "$CC" = "clang" ]; then
|
|
CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-error=unused-command-line-argument"
|
|
elif [ "$M32" ]; then
|
|
# Not using sparse for 32bit builds on 64bit machine.
|
|
# Adding m32 flag directly to CC to avoid any posiible issues with API/ABI
|
|
# difference on 'configure' and 'make' stages.
|
|
export CC="$CC -m32"
|
|
else
|
|
EXTRA_OPTS="$EXTRA_OPTS --enable-sparse"
|
|
CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} ${SPARSE_FLAGS}"
|
|
fi
|
|
|
|
if [ "$ASAN" ]; then
|
|
# This will override default option configured in tests/atlocal.in.
|
|
export ASAN_OPTIONS='detect_leaks=1'
|
|
CFLAGS_ASAN="-fno-omit-frame-pointer -fno-common -fsanitize=address"
|
|
CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} ${CFLAGS_ASAN}"
|
|
fi
|
|
|
|
if [ "$UBSAN" ]; then
|
|
# Use the default options configured in tests/atlocal.in, in UBSAN_OPTIONS.
|
|
CFLAGS_UBSAN="-fno-omit-frame-pointer -fno-common -fsanitize=undefined"
|
|
CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} ${CFLAGS_UBSAN}"
|
|
fi
|
|
|
|
OPTS="${EXTRA_OPTS} ${OPTS} $*"
|
|
|
|
if [ "$TESTSUITE" ]; then
|
|
# 'distcheck' will reconfigure with required options.
|
|
# Now we only need to prepare the Makefile without sparse-wrapped CC.
|
|
configure_ovs
|
|
|
|
export DISTCHECK_CONFIGURE_FLAGS="$OPTS"
|
|
make distcheck -j4 CFLAGS="${CFLAGS_FOR_OVS}" \
|
|
TESTSUITEFLAGS=-j4 RECHECK=yes
|
|
else
|
|
build_ovs
|
|
fi
|
|
|
|
exit 0
|