# HOST_CC build system does not add -Wl ...
export EXTRA_HOST_LDFLAGS=$(LDFLAGS)
+export RTE_DEVEL_BUILD=n
+
# People rebuilding this package can overwrite DPDK_CONFIG, RTE_MACHINE and
-# RTE_TARGET via environment variables if they like
+# RTE_TARGET via DEB_BUILD_OPTIONS if they like
+ifneq (,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
+ DPDK_CONFIG ?= $(patsubst dpdk_config=%,%,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
+endif
+ifneq (,$(filter rte_machine=%,$(DEB_BUILD_OPTIONS)))
+ RTE_MACHINE ?= $(patsubst rte_machine=%,%,$(filter rte_machine=%,$(DEB_BUILD_OPTIONS)))
+endif
+ifneq (,$(filter rte_target=%,$(DEB_BUILD_OPTIONS)))
+ RTE_TARGET ?= $(patsubst rte_target=%,%,$(filter rte_target=%,$(DEB_BUILD_OPTIONS)))
+endif
+
ifneq (,$(filter $(DEB_HOST_ARCH), arm64))
-DPDK_CONFIG := "arm64-armv8a-linuxapp-gcc"
-RTE_MACHINE := "armv8a"
-RTE_TARGET := "arm64-armv8a-linuxapp-gcc"
+DPDK_CONFIG ?= "arm64-armv8a-linuxapp-gcc"
+RTE_MACHINE ?= "armv8a"
+RTE_TARGET ?= "arm64-armv8a-linuxapp-gcc"
+else
+ifneq (,$(filter $(DEB_HOST_ARCH), ppc64el))
+DPDK_CONFIG ?= "ppc_64-power8-linuxapp-gcc"
+RTE_MACHINE ?= "power8"
+RTE_TARGET ?= "ppc_64-power8-linuxapp-gcc"
else
-DPDK_CONFIG := "$(DEB_HOST_GNU_CPU)-native-linuxapp-gcc"
-RTE_MACHINE := "default"
-RTE_TARGET := "$(DEB_HOST_GNU_CPU)-default-linuxapp-gcc"
+DPDK_CONFIG ?= "$(DEB_HOST_GNU_CPU)-native-linuxapp-gcc"
+RTE_MACHINE ?= "default"
+RTE_TARGET ?= "$(DEB_HOST_GNU_CPU)-default-linuxapp-gcc"
+endif
endif
DPDK_STATIC_DIR = "debian/build/static-root"
DPDK_SHARED_DIR = "debian/build/shared-root"
+# now stable with parallel comilation, so support -j
+ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+ PAR := $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+else
+ PAR := "1"
+endif
+
# kernel_modules can be passed via DEB_BUILD_OPTIONS to enable building the
# optional binary kernel modules package. By default it will be built against
# the current kernel, or ksrc can be passed with a path to the target kernel
exit 1; \
fi
sh debian/prep-modules $(KSRC)
- test -f debian/control.orig || cp -v debian/control debian/control.orig
- cat debian/control.orig debian/control.modules > debian/control
+ cat debian/control.modules >> debian/control
dh $@ --with python2,dkms
endif
override_dh_auto_clean:
rm -rf debian/build debian/tmp debian/dpdk-modules-* \
debian/control.modules debian/VERSION
- mv debian/control.orig debian/control || true
+ sed -i '/Package: dpdk-modules-/,/`tail -n1 debian/control.modules.in`/d' debian/control
+ test -L config/defconfig_$(DPDK_CONFIG) && rm -f config/defconfig_$(DPDK_CONFIG) || true
override_dh_auto_configure:
+ # Add support for a custom defconfig file in the debian directory.
+ifneq (,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
+ test -e config/defconfig_$(DPDK_CONFIG) || ln -fs ../debian/defconfig_$(DPDK_CONFIG) config/defconfig_$(DPDK_CONFIG)
+endif
# report dpkg-buildflags status to build log
dpkg-buildflags --status
echo EXTRA_CFLAGS $$EXTRA_CFLAGS
echo EXTRA_LDFLAGS: $$EXTRA_LDFLAGS
$(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) T=$(DPDK_CONFIG) config
+ifeq (,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
sed -ri -e 's,(RTE_MACHINE=).*,\1$(RTE_MACHINE),' \
-e 's,(RTE_NEXT_ABI=).*,\1n,' \
-e 's,(CONFIG_RTE_EAL_IGB_UIO=).*,\1$(DPDK_CONFIG_BUILD_KMOD),' \
-e 's,(CONFIG_RTE_KNI_KMOD=).*,\1$(DPDK_CONFIG_BUILD_KMOD),' \
-e 's,(LIBRTE_PMD_PCAP=).*,\1y,' \
-e 's,(LIBRTE_PMD_XENVIRT=).*,\1y,' \
+ -e 's,(CONFIG_RTE_EAL_PMD_PATH=).*,\1"/usr/lib/$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)/dpdk-pmds/",' \
$(DPDK_STATIC_DIR)/.config
+ # xen not available on ppc64el
+ifneq (,$(filter $(DEB_HOST_ARCH), ppc64el))
+ sed -ri -e 's,(LIBRTE_PMD_XENVIRT=).*,\1n,' $(DPDK_STATIC_DIR)/.config
+endif
+endif
dh_auto_configure
override_dh_auto_build-indep:
- $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) doc-api-html doc-guides-html
+ $(MAKE) -j $(PAR) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) doc-api-html doc-guides-html \
+ doc-guides-man
override_dh_auto_install-indep:
# Package: dpdk-doc
DESTDIR=debian/dpdk-doc install-doc
override_dh_auto_build-arch:
- $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) build
+ $(MAKE) -j $(PAR) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) RTE_KERNELDIR=$(KSRC) build
# Unfortunately the decision about having static or shared libraries is
# made for the whole build, which then produces only .a or .so files
# (but not both).
cp -a $(DPDK_STATIC_DIR) $(DPDK_SHARED_DIR)
sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' \
$(DPDK_SHARED_DIR)/.config
- $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_SHARED_DIR) RTE_KERNELDIR=$(KSRC) build
+ $(MAKE) -j $(PAR) V=$(DH_VERBOSE) O=$(DPDK_SHARED_DIR) RTE_KERNELDIR=$(KSRC) build
override_dh_auto_install-arch: LIBDIR=usr/lib/$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
override_dh_auto_install-arch:
else \
PKG=$${LN}$${VER}; \
fi; \
+ LIBF="$$(basename $${lib})"; \
+ LIBD="debian/$${PKG}/$(LIBDIR)"; \
echo "moving $${lib} for library $${PKG}"; \
- mkdir -p debian/$${PKG}/$(LIBDIR); \
- mv $${lib} debian/$${PKG}/$(LIBDIR); \
+ mkdir -p $${LIBD}; \
+ mv $${lib} $${LIBD}; \
+ if [ "$${LIBF#librte_pmd_}x" != "$${LIBF}x" ]; then \
+ mkdir -p $${LIBD}/dpdk-pmds; \
+ echo "PMD: linking $${LIBF} into RTE_EAL_PMD_PATH at $${LIBD}/dpdk-pmds/"; \
+ ln -s --relative --target-directory=$${LIBD}/dpdk-pmds/ $${LIBD}/$${LIBF}; \
+ fi; \
+ if [ "$${LIBF#librte_eal}x" != "$${LIBF}x" ]; then \
+ mkdir -p $${LIBD}/dpdk-pmds; \
+ fi; \
done
# pkg-config
mkdir -p debian/libdpdk-dev/$(LIBDIR)/pkgconfig