mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
When installing libbpf headers into 'lib/libbpf/src/root/' then the git submodule for libbpf is marked dirty. This result in stgit complains under different operations. This patch fix the issue by installing libbpf outside submodule directory. Choose directory 'lib/libbpf-install/' to emphasize relation to 'lib/libbpf/'. V2: Don't install the library only the header files as before. Also installing the should be a separate commit. Patch still statically link with libbpf/src/libbpf.a. Signed-off-by: Jesper Dangaard Brouer <netoptimizer@brouer.com>
205 lines
5.5 KiB
Bash
Executable File
205 lines
5.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# This is not an autoconf generated configure
|
|
#
|
|
|
|
# Output file which is input to Makefile
|
|
CONFIG_FINAL=config.mk
|
|
CONFIG=".${CONFIG}.tmp"
|
|
|
|
# Make a temp directory in build tree.
|
|
TMPDIR=$(mktemp -d config.XXXXXX)
|
|
trap 'status=$?; rm -rf $TMPDIR; rm -f $CONFIG; exit $status' EXIT HUP INT QUIT TERM
|
|
|
|
check_toolchain()
|
|
{
|
|
local emacs_version
|
|
|
|
: ${PKG_CONFIG:=pkg-config}
|
|
: ${CC=gcc}
|
|
: ${CLANG=clang}
|
|
: ${LLC=llc}
|
|
: ${M4=m4}
|
|
: ${EMACS=emacs}
|
|
|
|
for TOOL in $PKG_CONFIG $CC $CLANG $LLC $M4; do
|
|
if [ ! $(command -v ${TOOL} 2>/dev/null) ]; then
|
|
echo "*** ERROR: Cannot find tool ${TOOL}" ;
|
|
exit 1;
|
|
fi;
|
|
done
|
|
|
|
if ! command -v $EMACS >/dev/null 2>&1; then
|
|
EMACS=""
|
|
else
|
|
emacs_version=$($EMACS --version 2>/dev/null | head -n 1)
|
|
if echo $emacs_version | grep -Eq 'GNU Emacs 2[67]'; then
|
|
echo "using emacs: $emacs_version"
|
|
else
|
|
echo "not using emacs: $emacs_version"
|
|
EMACS=""
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$EMACS" ] && [ "${FORCE_EMACS:-0}" -eq "1" ]; then
|
|
echo "FORCE_EMACS is set, but no usable emacs found on system"
|
|
rm -f "$CONFIG"
|
|
exit 1
|
|
fi
|
|
|
|
echo "PKG_CONFIG:=${PKG_CONFIG}" >>$CONFIG
|
|
echo "CC:=${CC}" >>$CONFIG
|
|
echo "CLANG:=${CLANG}" >>$CONFIG
|
|
echo "LLC:=${LLC}" >>$CONFIG
|
|
echo "M4:=${M4}" >>$CONFIG
|
|
echo "EMACS:=${EMACS}" >>$CONFIG
|
|
}
|
|
|
|
check_elf()
|
|
{
|
|
if ${PKG_CONFIG} libelf --exists; then
|
|
echo "HAVE_ELF:=y" >>$CONFIG
|
|
echo "yes"
|
|
|
|
echo 'CFLAGS += -DHAVE_ELF' `${PKG_CONFIG} libelf --cflags` >> $CONFIG
|
|
echo 'LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG
|
|
else
|
|
echo "missing - this is required"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_zlib()
|
|
{
|
|
if ${PKG_CONFIG} zlib --exists; then
|
|
echo "HAVE_ZLIB:=y" >>$CONFIG
|
|
echo "yes"
|
|
|
|
echo 'CFLAGS += -DHAVE_ZLIB' `${PKG_CONFIG} zlib --cflags` >> $CONFIG
|
|
echo 'LDLIBS += ' `${PKG_CONFIG} zlib --libs` >>$CONFIG
|
|
else
|
|
echo "missing - this is required"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_libbpf()
|
|
{
|
|
local libbpf_err
|
|
|
|
if [ "${FORCE_SUBMODULE_LIBBPF:-0}" -ne "1" ] && ${PKG_CONFIG} libbpf --exists || [ -n "$LIBBPF_DIR" ]; then
|
|
|
|
if [ -n "$LIBBPF_DIR" ]; then
|
|
LIBBPF_CFLAGS="-I${LIBBPF_DIR}/include -L${LIBBPF_DIR}/lib"
|
|
LIBBPF_LDLIBS="-lbpf"
|
|
else
|
|
LIBBPF_CFLAGS=$(${PKG_CONFIG} libbpf --cflags)
|
|
LIBBPF_LDLIBS=$(${PKG_CONFIG} libbpf --libs)
|
|
fi
|
|
|
|
cat >$TMPDIR/libbpftest.c <<EOF
|
|
#include <bpf/libbpf.h>
|
|
int main(int argc, char **argv) {
|
|
void *ptr;
|
|
DECLARE_LIBBPF_OPTS(bpf_object_open_opts, opts, .pin_root_path = "/path");
|
|
DECLARE_LIBBPF_OPTS(bpf_xdp_set_link_opts, lopts, .old_fd = -1);
|
|
(void) bpf_object__open_file("file", &opts);
|
|
(void) bpf_program__name(ptr);
|
|
(void) bpf_map__set_initial_value(ptr, ptr, 0);
|
|
(void) bpf_set_link_xdp_fd_opts(0, 0, 0, &lopts);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
libbpf_err=$($CC -o $TMPDIR/libbpftest $TMPDIR/libbpftest.c $LIBBPF_CFLAGS -lbpf 2>&1)
|
|
if [ "$?" -eq "0" ]; then
|
|
echo "SYSTEM_LIBBPF:=y" >>$CONFIG
|
|
echo 'CFLAGS += ' $LIBBPF_CFLAGS >> $CONFIG
|
|
echo 'LDLIBS += ' $LIBBPF_LDLIBS >>$CONFIG
|
|
echo 'OBJECT_LIBBPF = ' >>$CONFIG
|
|
echo system
|
|
|
|
return 0
|
|
fi
|
|
else
|
|
libbpf_err="${PKG_CONFIG} couldn't find libbpf"
|
|
fi
|
|
|
|
if [ "${FORCE_SYSTEM_LIBBPF:-0}" -eq "1" ]; then
|
|
echo "FORCE_SYSTEM_LIBBPF is set, but no usable libbpf found on system"
|
|
echo "error: $libbpf_err"
|
|
rm -f "$CONFIG"
|
|
exit 1
|
|
fi
|
|
|
|
echo submodule
|
|
echo "SYSTEM_LIBBPF:=n" >> $CONFIG
|
|
echo 'CFLAGS += -I$(LIB_DIR)/libbpf-install/usr/include' >>$CONFIG
|
|
echo 'BPF_CFLAGS += -I$(LIB_DIR)/libbpf-install/usr/include' >>$CONFIG
|
|
echo 'LDFLAGS += -L$(LIB_DIR)/libbpf/src' >>$CONFIG
|
|
echo 'LDLIBS += -l:libbpf.a' >>$CONFIG
|
|
echo 'OBJECT_LIBBPF = $(LIB_DIR)/libbpf/src/libbpf.a' >>$CONFIG
|
|
if ! [ -d "lib/libbpf/src" ] && [ -f ".gitmodules" ] && [ -e ".git" ]; then
|
|
git submodule init && git submodule update
|
|
fi
|
|
|
|
echo -n "ELF support: "
|
|
check_elf || exit 1
|
|
|
|
echo -n "zlib support: "
|
|
check_zlib || exit 1
|
|
|
|
# For the build submodule library we know it does support this API, so we
|
|
# hard code it. Also due to the fact it's hard to build a test app as
|
|
# libbpf.a has not been build at configure time.
|
|
echo "HAVE_LIBBPF_PERF_BUFFER__CONSUME:=y" >>"$CONFIG"
|
|
}
|
|
|
|
quiet_config()
|
|
{
|
|
cat <<EOF
|
|
# user can control verbosity similar to kernel builds (e.g., V=1)
|
|
ifeq ("\$(origin V)", "command line")
|
|
VERBOSE = \$(V)
|
|
endif
|
|
ifndef VERBOSE
|
|
VERBOSE = 0
|
|
endif
|
|
ifeq (\$(VERBOSE),1)
|
|
Q =
|
|
else
|
|
Q = @
|
|
endif
|
|
ifeq (\$(VERBOSE),0)
|
|
MAKEFLAGS += --no-print-directory
|
|
endif
|
|
|
|
|
|
ifeq (\$(VERBOSE), 0)
|
|
QUIET_CC = @echo ' CC '\$@;
|
|
QUIET_CLANG = @echo ' CLANG '\$@;
|
|
QUIET_LLC = @echo ' LLC '\$@;
|
|
QUIET_LINK = @echo ' LINK '\$@;
|
|
QUIET_INSTALL = @echo ' INSTALL '\$@;
|
|
QUIET_M4 = @echo ' M4 '\$@;
|
|
QUIET_GEN = @echo ' GEN '\$@;
|
|
endif
|
|
EOF
|
|
}
|
|
|
|
echo "# Generated config" >$CONFIG
|
|
quiet_config >> $CONFIG
|
|
|
|
check_toolchain
|
|
|
|
echo -n "libbpf support: "
|
|
check_libbpf
|
|
|
|
if [ -n "$KERNEL_HEADERS" ]; then
|
|
echo "kernel headers: $KERNEL_HEADERS"
|
|
echo "CFLAGS += -I$KERNEL_HEADERS" >>$CONFIG
|
|
echo "BPF_CFLAGS += -I$KERNEL_HEADERS" >>$CONFIG
|
|
fi
|
|
|
|
mv $CONFIG $CONFIG_FINAL
|