I believe I've spotted an issue in the way inter-PMD dependencies are handled when building shared libraries. The depdirs_rule in mk/rte.subdir.mk relies on DEPDIRS-xyz containing the names of subdirectories that xyz depends on. In mk/rte.lib.mk, these DEPDIRS are converted into LDLIBS. This works when the subdirectory names match the library names (i.e. any of the libraries under lib/). However when the dependency is on a PMD, the subdirectory and library names don't match.
This is a problem, for example, in a patch for the net/octeontx PMD, which has a dependency on the event/octeontx PMD: http://dpdk.org/ml/archives/dev/2017-August/073983.html I've reproduced this with a contrived example, by making the failsafe PMD depend on the NULL PMD in drivers/net/Makefile: -DEPDIRS-failsafe = $(core-libs) +DEPDIRS-failsafe = $(core-libs) librte_pmd_null You can reproduce the build failure by running this command: ./devtools/test-build.sh x86_64-native-linuxapp-gcc+CONFIG_RTE_BUILD_SHARED_LIB I'm no expert on DPDK's dependency handling code, but one option is to modify rte.lib.mk like so: -LDLIBS += $(subst lib,-l,$(_LDDIRS)) +LDLIBS += $(subst lib,-l,$(filter lib%,$(_LDDIRS))) Then you could put the PMD's directory name in DEPDIRs, and specify the depended-on library in the PMD's LDLIBS (as is done in the aforementioned net/octeontx PMD). Thoughts? Thanks, Gage