d/rules support DEB_BUILD_OPTIONS parallel
[deb_dpdk.git] / debian / rules
index 064ffc3..f21cf76 100755 (executable)
@@ -62,6 +62,13 @@ 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
@@ -129,6 +136,7 @@ ifeq (,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
                -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))
@@ -138,7 +146,7 @@ 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:
@@ -148,7 +156,7 @@ override_dh_auto_install-indep:
                DESTDIR=debian/dpdk-doc install-doc
 
 override_dh_auto_build-arch:
-       $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) RTE_KERNELDIR=$(KSRC) 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).
@@ -161,7 +169,7 @@ override_dh_auto_build-arch:
        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:
@@ -206,9 +214,19 @@ 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