#!/bin/bash set -eux binary="build/testlinkage" basedir=$(dirname "$0") . "${basedir}"/check-dpdk-supported-arch.sh cat > testlinkage.c << EOF #include #include int main(void) { printf("Hello rte_exit %p\n", rte_exit); return 0; } EOF cat > Makefile-testlinkage << 'EOF' # Based on examples/helloworld/Makefile ifeq ($(RTE_SDK),) $(error "Please define RTE_SDK environment variable") endif # Default target, can be overridden by command line or environment RTE_TARGET ?= x86_64-native-linuxapp-gcc include $(RTE_SDK)/mk/rte.vars.mk # binary name APP = testlinkage # all source are stored in SRCS-y SRCS-y := testlinkage.c CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) include $(RTE_SDK)/mk/rte.extapp.mk EOF printf "\n\nSet up DPDK'ish build environment\n" . /usr/share/dpdk/dpdk-sdk-env.sh export CFLAGS=$(pkg-config --libs --cflags libdpdk) # -ldpdk actually refers to a linker script now, not a real .so # with broken linkage this will fail with undefined symbols printf "\n\nChecking compile with link against DPDK\n" make V=1 -f Makefile-testlinkage echo "OK" printf "\n\nLinkage info\n" lddtree ${binary} printf "\n\nChecking for expected internal libraries\n" # a few of the sublibs that it should use lddtree ${binary} | grep '^ librte_eal.so' echo "OK" printf "\n\nChecking for expected secondary library dependencies\n" lddtree ${binary} | grep '^ librt.so' echo "OK" printf "\n\nChecking for expected feature dependent library dependencies\n" # features only used by the lib that we enabled ldd /usr/lib/*/librte_pmd_pcap.so | grep libpcap echo "OK" printf "\n\nChecking test execution\n" # It doesn't do much, but it should work - so calling it is a minor extra test. # It is known to fail without SSE3 in e.g. some adt environments, in that # case check at least that we get the correct error message (this will trigger # a test fail if it neither finds the success nor the expected error message) (./${binary} 2>&1 || /bin/true ) | \ grep -E 'ERROR: This system does not support "SSSE3".|Hello rte_exit 0x' echo "OK"