[dpdk-dev] [PATCH] config: make libarchive optional
Jan Viktorin
viktorin at rehivetech.com
Tue Jun 14 11:33:43 CEST 2016
Hello Thomas,
On Tue, 14 Jun 2016 10:59:49 +0200
Thomas Monjalon <thomas.monjalon at 6wind.com> wrote:
> The commit 66819e6 has introduced a dependency on libarchive to be able
> to use some tar resources in the unit tests.
> It is now an optional dependency because some systems do not have it
> installed.
I am surprised how big deal is this. So, let's live with this fact.
Thank you, Thomas, for proposing a solution.
>
> If CONFIG_RTE_APP_TEST_RESOURCE_TAR is disabled, the PCI test will not
> be run. When a "configure" script will be integrated, the libarchive
> availability could be checked to automatically enable the option.
>
> Signed-off-by: Thomas Monjalon <thomas.monjalon at 6wind.com>
> ---
> app/test/Makefile | 11 +++++++----
> app/test/resource.c | 8 ++++++--
> app/test/test_mp_secondary.c | 4 ++++
> app/test/test_resource.c | 5 +++++
> config/common_base | 1 +
> doc/guides/linux_gsg/sys_reqs.rst | 3 +++
> scripts/test-build.sh | 4 ++++
> 7 files changed, 30 insertions(+), 6 deletions(-)
>
> diff --git a/app/test/Makefile b/app/test/Makefile
> index 7e4d484..5ca5c0b 100644
> --- a/app/test/Makefile
> +++ b/app/test/Makefile
> @@ -71,9 +71,6 @@ SRCS-y += test.c
> SRCS-y += resource.c
> SRCS-y += test_resource.c
> $(eval $(call linked_resource,test_resource_c,resource.c))
> -$(eval $(call linked_tar_resource,test_resource_tar,test_resource.c))
> -SRCS-y += test_pci.c
> -$(eval $(call linked_tar_resource,test_pci_sysfs,test_pci_sysfs))
> SRCS-y += test_prefetch.c
> SRCS-y += test_byteorder.c
> SRCS-y += test_per_lcore.c
> @@ -88,6 +85,13 @@ SRCS-y += test_ring.c
> SRCS-y += test_ring_perf.c
> SRCS-y += test_pmd_perf.c
>
> +ifeq ($(CONFIG_RTE_APP_TEST_RESOURCE_TAR),y)
> +$(eval $(call linked_tar_resource,test_resource_tar,test_resource.c))
> +SRCS-y += test_pci.c
> +$(eval $(call linked_tar_resource,test_pci_sysfs,test_pci_sysfs))
> +LDLIBS += -larchive
> +endif
> +
I don't like this very much. I think, the linked_tar_resource can be
disabled at the place of its definition. What about:
ifeq ($(CONFIG_RTE_APP_TEST_RESOURCE_TAR),y)
define linked_tar_resource
...
endef
else
linked_tar_resource =
endif
...
SRCS-$(CONFIG_RTE_APP_TEST_RESOURCE_TAR) += test_pci.c
...
ifeq ($(CONFIG_RTE_APP_TEST_RESOURCE_TAR),y)
LDLIBS += -larchive
endif
> ifeq ($(CONFIG_RTE_LIBRTE_TABLE),y)
> SRCS-y += test_table.c
> SRCS-$(CONFIG_RTE_LIBRTE_PIPELINE) += test_table_pipeline.c
> @@ -194,7 +198,6 @@ CFLAGS += $(WERROR_FLAGS)
> CFLAGS += -D_GNU_SOURCE
>
> LDLIBS += -lm
> -LDLIBS += -larchive
>
> # Disable VTA for memcpy test
> ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
> diff --git a/app/test/resource.c b/app/test/resource.c
> index 8c42eea..0e2b62c 100644
> --- a/app/test/resource.c
> +++ b/app/test/resource.c
> @@ -33,8 +33,6 @@
>
> #include <stdio.h>
> #include <string.h>
> -#include <archive.h>
> -#include <archive_entry.h>
> #include <errno.h>
> #include <sys/queue.h>
>
> @@ -97,6 +95,10 @@ int resource_fwrite_file(const struct resource *r, const char *fname)
> return ret;
> }
>
> +#ifdef RTE_APP_TEST_RESOURCE_TAR
> +#include <archive.h>
> +#include <archive_entry.h>
> +
> static int do_copy(struct archive *r, struct archive *w)
> {
> const void *buf;
> @@ -295,6 +297,8 @@ fail:
> return -1;
> }
>
> +#endif /* RTE_APP_TEST_RESOURCE_TAR */
> +
This looks OK.
> void resource_register(struct resource *r)
> {
> TAILQ_INSERT_TAIL(&resource_list, r, next);
> diff --git a/app/test/test_mp_secondary.c b/app/test/test_mp_secondary.c
> index 4dfe418..f66b68f 100644
> --- a/app/test/test_mp_secondary.c
> +++ b/app/test/test_mp_secondary.c
> @@ -245,6 +245,7 @@ run_object_creation_tests(void)
> printf("# Checked rte_lpm_create() OK\n");
> #endif
>
> +#ifdef RTE_APP_TEST_RESOURCE_TAR
> /* Run a test_pci call */
> if (test_pci() != 0) {
> printf("PCI scan failed in secondary\n");
> @@ -252,6 +253,7 @@ run_object_creation_tests(void)
> return -1;
> } else
> printf("PCI scan succeeded in secondary\n");
> +#endif
Is it right to call a test from another test? I think this is
wrong... A user should first test the PCI and then the mp_seconday...
Or?
>
> return 0;
> }
> @@ -266,9 +268,11 @@ test_mp_secondary(void)
> {
> if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
> if (!test_pci_run) {
> +#ifdef RTE_APP_TEST_RESOURCE_TAR
> printf("=== Running pre-requisite test of test_pci\n");
> test_pci();
> printf("=== Requisite test done\n");
> +#endif
Similar here.
> }
> return run_secondary_instances();
> }
> diff --git a/app/test/test_resource.c b/app/test/test_resource.c
> index 1e85040..39a6468 100644
> --- a/app/test/test_resource.c
> +++ b/app/test/test_resource.c
> @@ -85,6 +85,7 @@ static int test_resource_c(void)
> return 0;
> }
>
> +#ifdef RTE_APP_TEST_RESOURCE_TAR
> REGISTER_LINKED_RESOURCE(test_resource_tar);
>
> static int test_resource_tar(void)
> @@ -111,6 +112,8 @@ static int test_resource_tar(void)
> return 0;
> }
>
> +#endif /* RTE_APP_TEST_RESOURCE_TAR */
> +
This looks OK.
> static int test_resource(void)
> {
> if (test_resource_dpdk())
> @@ -119,8 +122,10 @@ static int test_resource(void)
> if (test_resource_c())
> return -1;
>
> +#ifdef RTE_APP_TEST_RESOURCE_TAR
> if (test_resource_tar())
> return -1;
> +#endif /* RTE_APP_TEST_RESOURCE_TAR */
This looks OK.
>
> return 0;
> }
> diff --git a/config/common_base b/config/common_base
> index 47c26f6..b9ba405 100644
> --- a/config/common_base
> +++ b/config/common_base
> @@ -546,6 +546,7 @@ CONFIG_RTE_INSECURE_FUNCTION_WARNING=n
> # Compile the test application
> #
> CONFIG_RTE_APP_TEST=y
> +CONFIG_RTE_APP_TEST_RESOURCE_TAR=n
>
> #
> # Compile the PMD test application
> diff --git a/doc/guides/linux_gsg/sys_reqs.rst b/doc/guides/linux_gsg/sys_reqs.rst
> index 959709e..b321544 100644
> --- a/doc/guides/linux_gsg/sys_reqs.rst
> +++ b/doc/guides/linux_gsg/sys_reqs.rst
> @@ -101,6 +101,9 @@ Compilation of the DPDK
> * libpcap headers and libraries (libpcap-devel) to compile and use the libpcap-based poll-mode driver.
> This driver is disabled by default and can be enabled by setting ``CONFIG_RTE_LIBRTE_PMD_PCAP=y`` in the build time config file.
>
> +* libarchive headers and library are needed for some unit tests using tar to get their resources.
> +
> +
> Running DPDK Applications
> -------------------------
>
> diff --git a/scripts/test-build.sh b/scripts/test-build.sh
> index 48539c1..9a11f94 100755
> --- a/scripts/test-build.sh
> +++ b/scripts/test-build.sh
> @@ -35,6 +35,7 @@ default_path=$PATH
> # Load config options:
> # - AESNI_MULTI_BUFFER_LIB_PATH
> # - DPDK_BUILD_TEST_CONFIGS (defconfig1+option1+option2 defconfig2)
> +# - DPDK_DEP_ARCHIVE
> # - DPDK_DEP_CFLAGS
> # - DPDK_DEP_LDFLAGS
> # - DPDK_DEP_MOFED (y/[n])
> @@ -111,6 +112,7 @@ reset_env ()
> {
> export PATH=$default_path
> unset CROSS
> + unset DPDK_DEP_ARCHIVE
> unset DPDK_DEP_CFLAGS
> unset DPDK_DEP_LDFLAGS
> unset DPDK_DEP_MOFED
> @@ -149,6 +151,8 @@ config () # <directory> <target> <options>
> sed -ri 's,(PCI_CONFIG=)n,\1y,' $1/.config
> sed -ri 's,(LIBRTE_IEEE1588=)n,\1y,' $1/.config
> sed -ri 's,(BYPASS=)n,\1y,' $1/.config
> + test "$DPDK_DEP_ARCHIVE" != y || \
> + sed -ri 's,(RESOURCE_TAR=)n,\1y,' $1/.config
> test "$DPDK_DEP_MOFED" != y || \
> sed -ri 's,(MLX._PMD=)n,\1y,' $1/.config
> test "$DPDK_DEP_SZE" != y || \
This look OK.
Regards
Jan
More information about the dev
mailing list