When we compile the dpdk with:
CONFIG_RTE_LIBRTE_EFD=y
CONFIG_RTE_LIBRTE_NFP_PMD=n
CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=n
CONFIG_RTE_LIBRTE_SCHED=n
CONFIG_RTE_LIBRTE_METER=n
The linker gives the following error:
lib/librte_efd.a(rte_efd.o): In function `rte_efd_create':
lib/librte_efd/rte_efd.c:560: undefined reference to `log2'
collect2: error: ld returned 1 exit status
This is because the '-lm' is missing in mk/rte.app.mk.
An alternative, which is proposed by this patch, is to use the compiler
builtin rte_bsf32() to process log2 instead of the libmath log2() that
requires to include math.h and link with -lm.
Fixes:
56b6ef874f80 ("efd: new Elastic Flow Distributor library")
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
# library name
LIB = librte_efd.a
-LDLIBS += -lm
-
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
#include <inttypes.h>
#include <errno.h>
#include <stdarg.h>
-#include <math.h>
#include <sys/queue.h>
#include <rte_log.h>
num_chunks = rte_align32pow2((max_num_rules /
EFD_TARGET_CHUNK_NUM_RULES) + 1);
- num_chunks_shift = log2(num_chunks);
+ num_chunks_shift = rte_bsf32(num_chunks);
rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);