From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A584843052; Tue, 15 Aug 2023 17:23:01 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A9D3E4328E; Tue, 15 Aug 2023 17:22:57 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id CFAA843265; Tue, 15 Aug 2023 17:22:51 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1692112972; x=1723648972; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=30S8V47qNzcODZ3D/d1ETyhaRHwmEngkt19O4pgfzL8=; b=IO0Eb+1GTwINssyMrwxYao6PzpzSJ+7/DgVHFvyhAi/OqDsvp/FdhLDf oyBKi3QvsjBRAQo04Eac84+FcVmnHEdTdaETmqlGFLHHIVRXhwDTo3bVi PhaH8lpPoV3w0+LoXWIPpiXQvwJWw0DtEJf04TdIX9lVkjUGJS+I5ZyIn OeDyPAdqBLgZpYN+074ypo0CqQDvZed2wlqd2c/DGrW2edNo0n2Oa2VYM sKJQ6WenFhKTpxnJ6jfFa5QlmSSZFNOpoFMVOnVtuSZh7+BkO1yN/0BFQ iydcr1DLutGk7wao3MwP93kk/5G9DyVGkCqksNkpP6FwN1irM8zCy4l+r g==; X-IronPort-AV: E=McAfee;i="6600,9927,10803"; a="357271533" X-IronPort-AV: E=Sophos;i="6.01,174,1684825200"; d="scan'208";a="357271533" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Aug 2023 08:11:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10803"; a="803843815" X-IronPort-AV: E=Sophos;i="6.01,174,1684825200"; d="scan'208";a="803843815" Received: from silpixa00401385.ir.intel.com ([10.237.214.14]) by fmsmga004.fm.intel.com with ESMTP; 15 Aug 2023 08:11:02 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: ci@dpdk.org, Bruce Richardson , =?UTF-8?q?Morten=20Br=C3=B8rup?= Subject: [PATCH v5 04/10] app/test: build using per-file dependency matrix Date: Tue, 15 Aug 2023 16:10:48 +0100 Message-Id: <20230815151053.996469-5-bruce.richardson@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230815151053.996469-1-bruce.richardson@intel.com> References: <20230721115125.55137-1-bruce.richardson@intel.com> <20230815151053.996469-1-bruce.richardson@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: ci@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK CI discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ci-bounces@dpdk.org Rather than using if-else constructs to selectively add or remove files from the UT build, switch to a table-based approach where each file lists out what libs or drivers it depends upon. Initial version of this table was generated via analysis of the header files included in each C file. The basic dependencies of the test binary [cmdline, ring, mempool and mbuf] were then removed from the per-file lists, as there is no point in checking them as the whole app will be disabled if they are not present. With the file list, the dependencies for the "utility" C-files are kept separate, so that other tests which depend on the functions provided by those files can have that dependency recorded properly. The basic cryptodev tests also fall into this category as functions from the main cryptodev test file are used by other crypto tests. As well as the main table for internal dependencies, some test files have separate external components too. A second, much smaller table lists these dependencies. Signed-off-by: Bruce Richardson Acked-by: Morten Brørup --- app/meson.build | 8 +- app/test/meson.build | 823 ++++++++++++------------------------------- 2 files changed, 238 insertions(+), 593 deletions(-) diff --git a/app/meson.build b/app/meson.build index 4fc1a83eba..0d8b618e7f 100644 --- a/app/meson.build +++ b/app/meson.build @@ -32,6 +32,11 @@ apps = [ 'test-security-perf', ] +if get_option('tests') +# build the auto test app if enabled. + apps += 'test' +endif + default_cflags = machine_args + ['-DALLOW_EXPERIMENTAL_API'] default_ldflags = [] if get_option('default_library') == 'static' and not is_windows @@ -106,6 +111,3 @@ foreach app:apps install_rpath: join_paths(get_option('prefix'), driver_install_path), install: true) endforeach - -# special case the autotests -subdir('test') diff --git a/app/test/meson.build b/app/test/meson.build index 66897c14a3..2b885ae273 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -1,446 +1,230 @@ # SPDX-License-Identifier: BSD-3-Clause -# Copyright(c) 2017 Intel Corporation - -if not get_option('tests') - subdir_done() -endif - -test_sources = files( - 'commands.c', - 'packet_burst_generator.c', - 'test.c', - 'test_acl.c', - 'test_alarm.c', - 'test_atomic.c', - 'test_barrier.c', - 'test_bitops.c', - 'test_bitmap.c', - 'test_bpf.c', - 'test_byteorder.c', - 'test_cksum.c', - 'test_cksum_perf.c', - 'test_cmdline.c', - 'test_cmdline_cirbuf.c', - 'test_cmdline_etheraddr.c', - 'test_cmdline_ipaddr.c', - 'test_cmdline_lib.c', - 'test_cmdline_num.c', - 'test_cmdline_portlist.c', - 'test_cmdline_string.c', - 'test_common.c', - 'test_cpuflags.c', - 'test_crc.c', - 'test_cryptodev.c', - 'test_cryptodev_asym.c', - 'test_cryptodev_blockcipher.c', - 'test_cryptodev_crosscheck.c', - 'test_cryptodev_security_ipsec.c', - 'test_cryptodev_security_pdcp.c', - 'test_cycles.c', - 'test_debug.c', - 'test_devargs.c', - 'test_distributor.c', - 'test_distributor_perf.c', - 'test_dmadev.c', - 'test_dmadev_api.c', - 'test_eal_flags.c', - 'test_eal_fs.c', - 'test_efd.c', - 'test_efd_perf.c', - 'test_errno.c', - 'test_ethdev_link.c', - 'test_event_crypto_adapter.c', - 'test_event_eth_rx_adapter.c', - 'test_event_ring.c', - 'test_event_timer_adapter.c', - 'test_eventdev.c', - 'test_external_mem.c', - 'test_fbarray.c', - 'test_fib.c', - 'test_fib_perf.c', - 'test_fib6.c', - 'test_fib6_perf.c', - 'test_func_reentrancy.c', - 'test_hash.c', - 'test_hash_functions.c', - 'test_hash_multiwriter.c', - 'test_hash_readwrite.c', - 'test_hash_perf.c', - 'test_hash_readwrite_lf_perf.c', - 'test_interrupts.c', - 'test_ipfrag.c', - 'test_ipsec.c', - 'test_ipsec_sad.c', - 'test_ipsec_perf.c', - 'test_kvargs.c', - 'test_lcores.c', - 'test_logs.c', - 'test_lpm.c', - 'test_lpm6.c', - 'test_lpm6_perf.c', - 'test_lpm_perf.c', - 'test_malloc.c', - 'test_malloc_perf.c', - 'test_mbuf.c', - 'test_member.c', - 'test_member_perf.c', - 'test_memcpy.c', - 'test_memcpy_perf.c', - 'test_memory.c', - 'test_mempool.c', - 'test_mempool_perf.c', - 'test_memzone.c', - 'test_meter.c', - 'test_mcslock.c', - 'test_mp_secondary.c', - 'test_per_lcore.c', - 'test_pflock.c', - 'test_pmd_perf.c', - 'test_power.c', - 'test_power_cpufreq.c', - 'test_power_kvm_vm.c', - 'test_power_intel_uncore.c', - 'test_prefetch.c', - 'test_rand_perf.c', - 'test_rawdev.c', - 'test_rcu_qsbr.c', - 'test_rcu_qsbr_perf.c', - 'test_reassembly_perf.c', - 'test_reciprocal_division.c', - 'test_reciprocal_division_perf.c', - 'test_red.c', - 'test_pie.c', - 'test_reorder.c', - 'test_rib.c', - 'test_rib6.c', - 'test_ring.c', - 'test_ring_mpmc_stress.c', - 'test_ring_hts_stress.c', - 'test_ring_mt_peek_stress.c', - 'test_ring_mt_peek_stress_zc.c', - 'test_ring_perf.c', - 'test_ring_rts_stress.c', - 'test_ring_st_peek_stress.c', - 'test_ring_st_peek_stress_zc.c', - 'test_ring_stress.c', - 'test_rwlock.c', - 'test_sched.c', - 'test_security.c', - 'test_security_inline_macsec.c', - 'test_security_inline_proto.c', - 'test_seqlock.c', - 'test_service_cores.c', - 'test_spinlock.c', - 'test_stack.c', - 'test_stack_perf.c', - 'test_string_fns.c', - 'test_tailq.c', - 'test_thash.c', - 'test_thash_perf.c', - 'test_threads.c', - 'test_timer.c', - 'test_timer_perf.c', - 'test_timer_racecond.c', - 'test_timer_secondary.c', - 'test_ticketlock.c', - 'test_trace.c', - 'test_trace_register.c', - 'test_trace_perf.c', - 'test_version.c', - 'virtual_pmd.c', -) - -test_deps = dpdk_libs_enabled -# as well as libs, the pci and vdev bus drivers are needed for a lot of tests -test_deps += ['bus_pci', 'bus_vdev'] - -# Each test is marked with flags: -# - the first flag indicates whether the test can run in no-huge mode, -# - the second flag indicates whether the test can run with ASan enabled, -fast_tests = [ - ['acl_autotest', true, true], - ['atomic_autotest', false, true], - ['bitmap_autotest', true, true], - ['bpf_autotest', true, true], - ['bpf_convert_autotest', true, true], - ['bitops_autotest', true, true], - ['byteorder_autotest', true, true], - ['cksum_autotest', true, true], - ['cmdline_autotest', true, true], - ['common_autotest', true, true], - ['cpuflags_autotest', true, true], - ['debug_autotest', true, true], - ['devargs_autotest', true, true], - ['eal_flags_c_opt_autotest', false, false], - ['eal_flags_main_opt_autotest', false, false], - ['eal_flags_n_opt_autotest', false, false], - ['eal_flags_hpet_autotest', false, false], - ['eal_flags_no_huge_autotest', false, false], - ['eal_flags_a_opt_autotest', false, false], - ['eal_flags_b_opt_autotest', false, false], - ['eal_flags_vdev_opt_autotest', false, false], - ['eal_flags_r_opt_autotest', false, false], - ['eal_flags_mem_autotest', false, false], - ['eal_flags_file_prefix_autotest', false, false], - ['eal_flags_misc_autotest', false, false], - ['eal_fs_autotest', true, true], - ['errno_autotest', true, true], - ['ethdev_link_status', true, true], - ['event_ring_autotest', true, true], - ['fib_autotest', true, true], - ['fib6_autotest', true, true], - ['func_reentrancy_autotest', false, true], - ['hash_autotest', true, true], - ['interrupt_autotest', true, true], - ['ipfrag_autotest', false, true], - ['lcores_autotest', true, true], - ['logs_autotest', true, true], - ['lpm_autotest', true, true], - ['lpm6_autotest', true, true], - ['malloc_autotest', false, true], - ['mbuf_autotest', false, true], - ['mcslock_autotest', false, true], - ['memcpy_autotest', true, true], - ['memory_autotest', false, true], - ['mempool_autotest', false, true], - ['memzone_autotest', false, true], - ['meter_autotest', true, true], - ['multiprocess_autotest', false, false], - ['per_lcore_autotest', true, true], - ['pflock_autotest', true, true], - ['prefetch_autotest', true, true], - ['rcu_qsbr_autotest', true, true], - ['pie_autotest', true, true], - ['rib_autotest', true, true], - ['rib6_autotest', true, true], - ['ring_autotest', true, true], - ['rwlock_test1_autotest', true, true], - ['rwlock_rda_autotest', true, true], - ['rwlock_rds_wrm_autotest', true, true], - ['rwlock_rde_wro_autotest', true, true], - ['sched_autotest', true, true], - ['security_autotest', false, true], - ['seqlock_autotest', true, true], - ['spinlock_autotest', true, true], - ['stack_autotest', false, true], - ['stack_lf_autotest', false, true], - ['string_autotest', true, true], - ['tailq_autotest', true, true], - ['ticketlock_autotest', true, true], - ['timer_autotest', false, true], - ['user_delay_us', true, true], - ['version_autotest', true, true], - ['crc_autotest', true, true], - ['distributor_autotest', false, true], - ['eventdev_common_autotest', true, true], - ['fbarray_autotest', true, true], - ['hash_readwrite_func_autotest', false, true], - ['ipsec_autotest', true, true], - ['kvargs_autotest', true, true], - ['member_autotest', true, true], - ['power_cpufreq_autotest', false, true], - ['power_autotest', true, true], - ['power_kvm_vm_autotest', false, true], - ['power_intel_uncore_autotest', true, true], - ['reorder_autotest', true, true], - ['service_autotest', true, true], - ['thash_autotest', true, true], - ['threads_autotest', true, true], - ['trace_autotest', true, true], -] - -# Tests known to have issues or which don't belong in other tests lists. -extra_test_names = [ - 'alarm_autotest', # ee00af60170b ("test: remove strict timing requirements some tests") - 'red_autotest', # https://bugs.dpdk.org/show_bug.cgi?id=826 -] - -perf_test_names = [ - 'ring_perf_autotest', - 'malloc_perf_autotest', - 'mempool_perf_autotest', - 'memcpy_perf_autotest', - 'hash_perf_autotest', - 'timer_perf_autotest', - 'reciprocal_division', - 'reciprocal_division_perf', - 'lpm_perf_autotest', - 'rib_slow_autotest', - 'fib_slow_autotest', - 'fib_perf_autotest', - 'red_all', - 'pie_all', - 'barrier_autotest', - 'hash_multiwriter_autotest', - 'timer_racecond_autotest', - 'efd_autotest', - 'hash_functions_autotest', - 'member_perf_autotest', - 'efd_perf_autotest', - 'lpm6_perf_autotest', - 'rib6_slow_autotest', - 'fib6_slow_autotest', - 'fib6_perf_autotest', - 'rcu_qsbr_perf_autotest', - 'red_perf', - 'pie_perf', - 'distributor_perf_autotest', - 'pmd_perf_autotest', - 'service_perf_autotest', - 'stack_perf_autotest', - 'stack_lf_perf_autotest', - 'rand_perf_autotest', - 'hash_readwrite_perf_autotest', - 'hash_readwrite_lf_perf_autotest', - 'trace_perf_autotest', - 'ipsec_perf_autotest', - 'thash_perf_autotest', - 'reassembly_perf_autotest', -] - -driver_test_names = [ - 'cryptodev_aesni_gcm_autotest', - 'cryptodev_aesni_mb_autotest', - 'cryptodev_chacha_poly_mb_autotest', - 'cryptodev_cn10k_autotest', - 'cryptodev_cn9k_autotest', - 'cryptodev_cpu_aesni_mb_autotest', - 'cryptodev_cpu_aesni_gcm_autotest', - 'cryptodev_dpaa2_sec_autotest', - 'cryptodev_dpaa_sec_autotest', - 'cryptodev_null_autotest', - 'cryptodev_openssl_autotest', - 'cryptodev_qat_autotest', - 'cryptodev_qat_asym_autotest', - 'cryptodev_qat_raw_api_autotest', - 'cryptodev_sw_armv8_autotest', - 'cryptodev_sw_kasumi_autotest', - 'cryptodev_sw_mvsam_autotest', - 'cryptodev_sw_snow3g_autotest', - 'cryptodev_sw_zuc_autotest', - 'cryptodev_uadk_autotest', - 'dmadev_autotest', -] - -dump_test_names = [] - -if not is_windows - driver_test_names += [ - 'cryptodev_openssl_asym_autotest', - 'eventdev_selftest_octeontx', - 'eventdev_selftest_sw', - ] - - dump_test_names += [ - 'dump_struct_sizes', - 'dump_mempool', - 'dump_malloc_stats', - 'dump_devargs', - 'dump_log_types', - 'dump_ring', - 'dump_physmem', - 'dump_memzone', - ] -endif - -# The following linkages are an exception to allow running the -# unit tests without requiring that the developer install the -# DPDK libraries. Explicit linkage of drivers (plugin libraries) -# in applications should not be used. -if dpdk_conf.has('RTE_MEMPOOL_RING') - test_deps += 'mempool_ring' -endif -if dpdk_conf.has('RTE_MEMPOOL_STACK') - test_deps += 'mempool_stack' -endif -if dpdk_conf.has('RTE_EVENT_SKELETON') - test_deps += 'event_skeleton' -endif - -if dpdk_conf.has('RTE_LIB_GRAPH') - test_sources += 'test_graph.c' - fast_tests += [['graph_autotest', true, true]] - fast_tests += [['node_list_dump', true, true]] - test_sources += 'test_graph_perf.c' - perf_test_names += 'graph_perf_autotest' -endif -if dpdk_conf.has('RTE_LIB_METRICS') - test_sources += ['test_metrics.c'] - fast_tests += [['metrics_autotest', true, true]] -endif -if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY') - test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c'] - fast_tests += [['telemetry_json_autotest', true, true]] - fast_tests += [['telemetry_data_autotest', true, true]] -endif -if dpdk_conf.has('RTE_LIB_PIPELINE') -# pipeline lib depends on port and table libs, so those must be present -# if pipeline library is. - test_sources += [ - 'test_table.c', - 'test_table_acl.c', - 'test_table_combined.c', - 'test_table_pipeline.c', - 'test_table_ports.c', - 'test_table_tables.c', - ] - fast_tests += [['table_autotest', true, true]] -endif - -# The following linkages of drivers are required because -# they are used via a driver-specific API. -if dpdk_conf.has('RTE_NET_BOND') - test_deps += 'net_bond' - test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c'] - driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest'] - if dpdk_conf.has('RTE_NET_RING') - test_sources += 'test_link_bonding_mode4.c' - driver_test_names += 'link_bonding_mode4_autotest' - endif -endif -if dpdk_conf.has('RTE_LIB_EVENTDEV') and dpdk_conf.has('RTE_NET_RING') - test_deps += 'net_ring' - test_sources += 'test_pmd_ring_perf.c' - test_sources += 'test_pmd_ring.c' - test_sources += 'test_event_eth_tx_adapter.c' - test_sources += 'sample_packet_forward.c' - fast_tests += [['ring_pmd_autotest', true, true]] - perf_test_names += 'ring_pmd_perf_autotest' - fast_tests += [['event_eth_tx_adapter_autotest', false, true]] - if dpdk_conf.has('RTE_LIB_BITRATESTATS') - test_sources += 'test_bitratestats.c' - fast_tests += [['bitratestats_autotest', true, true]] - endif - if dpdk_conf.has('RTE_LIB_LATENCYSTATS') - test_sources += 'test_latencystats.c' - fast_tests += [['latencystats_autotest', true, true]] - endif - if dpdk_conf.has('RTE_LIB_PDUMP') - test_sources += 'test_pdump.c' - fast_tests += [['pdump_autotest', true, false]] - endif -endif -if dpdk_conf.has('RTE_NET_NULL') - test_deps += 'net_null' - test_sources += 'test_vdev.c' - fast_tests += [['vdev_autotest', true, true]] -endif -if dpdk_conf.has('RTE_RAW_SKELETON') - test_deps += 'raw_skeleton' - fast_tests += [['rawdev_autotest', true, true]] -endif - -if dpdk_conf.has('RTE_HAS_LIBPCAP') - ext_deps += pcap_dep - if dpdk_conf.has('RTE_LIB_PCAPNG') - test_sources += 'test_pcapng.c' +# Copyright(c) 2017-2023 Intel Corporation + +# the main test files [test.c and commands.c] relies on these libraries +deps += ['cmdline', 'ring', 'mempool', 'mbuf'] +sources += files('commands.c', 'test.c') + +# some other utility C files, providing functions used by various tests +# so we need to include these deps in the dependency list for the files using those fns. +packet_burst_generator_deps = ['net'] +sample_packet_forward_deps = ['net_ring', 'ethdev', 'bus_vdev'] +virtual_pmd_deps = ['ethdev', 'net', 'bus_pci'] +# test_cryptodev has material that other crypto tests need +test_cryptodev_deps = ['bus_vdev', 'net', 'cryptodev', 'crypto_scheduler', 'security'] + +source_file_deps = { + # The C files providing functionality to other test cases + 'packet_burst_generator.c': packet_burst_generator_deps, +# 'resource.c': [], # unused currently. + 'sample_packet_forward.c': sample_packet_forward_deps, + 'virtual_pmd.c': virtual_pmd_deps, + + # the various test_*.c files + 'test_acl.c': ['net', 'acl'], + 'test_alarm.c': [], + 'test_atomic.c': ['hash'], + 'test_barrier.c': [], + 'test_bitmap.c': [], + 'test_bitops.c': [], + 'test_bitratestats.c': ['metrics', 'bitratestats', 'ethdev'] + sample_packet_forward_deps, + 'test_bpf.c': ['bpf', 'net'], + 'test_byteorder.c': [], +# 'test_cfgfile.c': ['cfgfile'], + 'test_cksum.c': ['net'], + 'test_cksum_perf.c': ['net'], + 'test_cmdline.c': [], + 'test_cmdline_cirbuf.c': [], + 'test_cmdline_etheraddr.c': ['net'], + 'test_cmdline_ipaddr.c': [], + 'test_cmdline_lib.c': [], + 'test_cmdline_num.c': [], + 'test_cmdline_portlist.c': [], + 'test_cmdline_string.c': [], + 'test_common.c': [], + 'test_compressdev.c': ['compressdev'], + 'test_cpuflags.c': [], + 'test_crc.c': ['net'], + 'test_cryptodev.c': test_cryptodev_deps, + 'test_cryptodev_asym.c': ['bus_vdev'] + test_cryptodev_deps, + 'test_cryptodev_blockcipher.c': test_cryptodev_deps, + 'test_cryptodev_crosscheck.c': test_cryptodev_deps, + 'test_cryptodev_security_ipsec.c': test_cryptodev_deps, + 'test_cryptodev_security_pdcp.c': test_cryptodev_deps, + 'test_cycles.c': [], + 'test_debug.c': [], + 'test_devargs.c': ['kvargs'], + 'test_distributor.c': ['distributor'], + 'test_distributor_perf.c': ['distributor'], + 'test_dmadev.c': ['dmadev', 'bus_vdev'], + 'test_dmadev_api.c': ['dmadev'], + 'test_eal_flags.c': [], + 'test_eal_fs.c': [], + 'test_efd.c': ['efd', 'net'], + 'test_efd_perf.c': ['efd', 'hash'], + 'test_errno.c': [], + 'test_ethdev_link.c': ['ethdev'], + 'test_event_crypto_adapter.c': ['cryptodev', 'eventdev', 'bus_vdev'], + 'test_event_eth_rx_adapter.c': ['ethdev', 'eventdev', 'bus_vdev'], + 'test_event_eth_tx_adapter.c': ['bus_vdev', 'ethdev', 'net_ring', 'eventdev'], + 'test_event_ring.c': ['eventdev'], + 'test_event_timer_adapter.c': ['ethdev', 'eventdev', 'bus_vdev'], + 'test_eventdev.c': ['eventdev', 'bus_vdev'], + 'test_external_mem.c': [], + 'test_fbarray.c': [], + 'test_fib.c': ['net', 'fib'], + 'test_fib6.c': ['rib', 'fib'], + 'test_fib6_perf.c': ['fib'], + 'test_fib_perf.c': ['net', 'fib'], + 'test_flow_classify.c': ['net', 'acl', 'table', 'ethdev', 'flow_classify'], + 'test_func_reentrancy.c': ['hash', 'lpm'], + 'test_graph.c': ['graph'], + 'test_graph_perf.c': ['graph'], + 'test_hash.c': ['net', 'hash'], + 'test_hash_functions.c': ['hash'], + 'test_hash_multiwriter.c': ['hash'], + 'test_hash_perf.c': ['hash'], + 'test_hash_readwrite.c': ['hash'], + 'test_hash_readwrite_lf_perf.c': ['hash'], + 'test_interrupts.c': [], + 'test_ipfrag.c': ['net', 'ip_frag'], + 'test_ipsec.c': ['bus_vdev', 'net', 'cryptodev', 'ipsec', 'security'], + 'test_ipsec_perf.c': ['net', 'ipsec'], + 'test_ipsec_sad.c': ['ipsec'], + 'test_kvargs.c': ['kvargs'], + 'test_latencystats.c': ['ethdev', 'latencystats', 'metrics'] + sample_packet_forward_deps, + 'test_lcores.c': [], + 'test_link_bonding.c': ['ethdev', 'net_bond', + 'net'] + packet_burst_generator_deps + virtual_pmd_deps, + 'test_link_bonding_mode4.c': ['ethdev', 'net_ring', 'net_bond', + 'net'] + packet_burst_generator_deps, + 'test_link_bonding_rssconf.c': ['ethdev', 'bus_vdev', 'net_bond'], + 'test_logs.c': [], + 'test_lpm.c': ['net', 'lpm'], + 'test_lpm6.c': ['lpm'], + 'test_lpm6_perf.c': ['lpm'], + 'test_lpm_perf.c': ['net', 'lpm'], + 'test_malloc.c': [], + 'test_malloc_perf.c': [], + 'test_mbuf.c': ['net'], + 'test_mcslock.c': [], + 'test_member.c': ['member', 'net'], + 'test_member_perf.c': ['hash', 'member'], + 'test_memcpy.c': [], + 'test_memcpy_perf.c': [], + 'test_memory.c': [], + 'test_mempool.c': [], + 'test_mempool_perf.c': [], + 'test_memzone.c': [], + 'test_meter.c': ['meter'], + 'test_metrics.c': ['metrics'], + 'test_mp_secondary.c': ['hash', 'lpm'], + 'test_pcapng.c': ['ethdev', 'net', 'pcapng'], + 'test_pdcp.c': ['eventdev', 'pdcp', 'net', 'timer', 'security'], + 'test_pdump.c': ['pdump'] + sample_packet_forward_deps, + 'test_per_lcore.c': [], + 'test_pflock.c': [], + 'test_pie.c': ['sched'], + 'test_pmd_perf.c': ['ethdev', 'net'] + packet_burst_generator_deps, + 'test_pmd_ring.c': ['net_ring', 'ethdev', 'bus_vdev'], + 'test_pmd_ring_perf.c': ['ethdev', 'net_ring', 'bus_vdev'], + 'test_power.c': ['power'], + 'test_power_cpufreq.c': ['power'], + 'test_power_intel_uncore.c': ['power'], + 'test_power_kvm_vm.c': ['power'], + 'test_prefetch.c': [], + 'test_rand_perf.c': [], + 'test_rawdev.c': ['rawdev', 'bus_vdev'], + 'test_rcu_qsbr.c': ['rcu', 'hash'], + 'test_rcu_qsbr_perf.c': ['rcu', 'hash'], + 'test_reassembly_perf.c': ['net', 'ip_frag'], + 'test_reciprocal_division.c': [], + 'test_reciprocal_division_perf.c': [], + 'test_red.c': ['sched'], + 'test_reorder.c': ['reorder'], +# 'test_resource.c': [], + 'test_rib.c': ['net', 'rib'], + 'test_rib6.c': ['net', 'rib'], + 'test_ring.c': [], + 'test_ring_hts_stress.c': [], + 'test_ring_mpmc_stress.c': [], + 'test_ring_mt_peek_stress.c': [], + 'test_ring_mt_peek_stress_zc.c': [], + 'test_ring_perf.c': [], + 'test_ring_rts_stress.c': [], + 'test_ring_st_peek_stress.c': [], + 'test_ring_st_peek_stress_zc.c': [], + 'test_ring_stress.c': [], + 'test_rwlock.c': [], + 'test_sched.c': ['net', 'sched'], + 'test_security.c': ['net', 'security'], + 'test_security_inline_macsec.c': ['ethdev', 'security'], + 'test_security_inline_proto.c': ['ethdev', 'security', 'eventdev'] + test_cryptodev_deps, + 'test_seqlock.c': [], + 'test_service_cores.c': [], + 'test_spinlock.c': [], + 'test_stack.c': ['stack'], + 'test_stack_perf.c': ['stack'], + 'test_string_fns.c': [], + 'test_table.c': ['table', 'pipeline', 'port'], + 'test_table_acl.c': ['net', 'table', 'pipeline', 'port'], + 'test_table_combined.c': ['table', 'pipeline', 'port'], + 'test_table_pipeline.c': ['pipeline', 'table', 'port'], + 'test_table_ports.c': ['table', 'pipeline', 'port'], + 'test_table_tables.c': ['table', 'pipeline', 'port'], + 'test_tailq.c': [], + 'test_telemetry_data.c': ['telemetry'], + 'test_telemetry_json.c': ['telemetry'], + 'test_thash.c': ['net', 'hash'], + 'test_thash_perf.c': ['hash'], + 'test_threads.c': [], + 'test_ticketlock.c': [], + 'test_timer.c': ['timer'], + 'test_timer_perf.c': ['timer'], + 'test_timer_racecond.c': ['timer'], + 'test_timer_secondary.c': ['timer'], + 'test_trace.c': [], + 'test_trace_perf.c': [], + 'test_trace_register.c': [], + 'test_vdev.c': ['kvargs', 'bus_vdev'], + 'test_version.c': [], +} + +source_file_ext_deps = { + 'test_compressdev.c': ['zlib'], + 'test_pcapng.c': ['pcap'], +} + +def_lib = get_option('default_library') +foreach f, f_deps : source_file_deps + has_deps = true + foreach d : f_deps + if not is_variable(def_lib + '_rte_' + d) + has_deps = false + break + else + # technically we might not need this dep, but adding it is harmless + if d not in deps + deps += d + endif + endif + endforeach + # check for any external dependencies for this file + if source_file_ext_deps.has_key(f) + foreach d: source_file_ext_deps.get(f) + dep = dependency(d, required: false, method: 'pkg-config') + if not dep.found() + message('Skipping test file @0@ due to missing external dependency @1@'.format(f, d)) + has_deps = false + else + ext_deps += dep + endif + endforeach + endif + if has_deps + sources += files(f) endif -endif - -if dpdk_conf.has('RTE_LIB_PDCP') - test_sources += 'test_pdcp.c' - fast_tests += [['pdcp_autotest', false, true]] -endif +endforeach if cc.has_argument('-Wno-format-truncation') cflags += '-Wno-format-truncation' @@ -450,154 +234,13 @@ endif cflags += '-fno-strict-aliasing' # Enable using internal APIs in unit tests -cflags += ['-DALLOW_INTERNAL_API'] - -test_dep_objs = [] -if dpdk_conf.has('RTE_LIB_COMPRESSDEV') - compress_test_dep = dependency('zlib', required: false, method: 'pkg-config') - if compress_test_dep.found() - test_dep_objs += compress_test_dep - test_sources += 'test_compressdev.c' - fast_tests += [['compressdev_autotest', false, true]] - endif -endif - -if dpdk_conf.has('RTE_CRYPTO_SCHEDULER') - driver_test_names += 'cryptodev_scheduler_autotest' - test_deps += 'crypto_scheduler' -endif - -foreach d:test_deps - def_lib = get_option('default_library') - test_dep_objs += get_variable(def_lib + '_rte_' + d) -endforeach - -link_libs = [] -if get_option('default_library') == 'static' - link_libs = dpdk_static_libraries + dpdk_drivers -endif - -dpdk_test = executable('dpdk-test', - test_sources, - link_whole: link_libs, - dependencies: test_dep_objs + ext_deps, - c_args: cflags, - install_rpath: join_paths(get_option('prefix'), - driver_install_path), - install: true) - -has_hugepage = run_command(py3, files('has_hugepage.py'), check: true).stdout().strip() != '0' -message('hugepage availability: @0@'.format(has_hugepage)) - -# some perf tests (eg: memcpy perf autotest)take very long -# to complete, so timeout to 10 minutes -timeout_seconds = 600 -timeout_seconds_fast = 10 - -test_no_huge_args = ['--no-huge', '-m', '2048'] - -foreach arg : fast_tests - test_args = [] - run_test = true - if not has_hugepage - if arg[1] - test_args += test_no_huge_args - else - run_test = false - endif - endif - - if get_option('b_sanitize') == 'address' or get_option('b_sanitize') == 'address,undefined' - if not arg[2] - run_test = false - endif - endif - - if (get_option('default_library') == 'shared' and - arg[0] == 'event_eth_tx_adapter_autotest') - test_args += ['-d', dpdk_drivers_build_dir] - endif - if is_linux - test_args += ['--file-prefix=@0@'.format(arg[0])] - endif - - if run_test - test(arg[0], dpdk_test, - env : ['DPDK_TEST=' + arg[0]], - args : test_args, - timeout : timeout_seconds_fast, - is_parallel : false, - suite : 'fast-tests') - if not is_windows and arg[0] == 'trace_autotest' - test_args += ['--trace=.*'] - test_args += ['--trace-dir=@0@'.format(meson.current_build_dir())] - test(arg[0] + '_with_traces', dpdk_test, - env : ['DPDK_TEST=' + arg[0]], - args : test_args, - timeout : timeout_seconds_fast, - is_parallel : false, - suite : 'fast-tests') - endif - endif -endforeach +cflags += '-DALLOW_INTERNAL_API' -if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY') - test_args = [dpdk_test] - test_args += test_no_huge_args - if get_option('default_library') == 'shared' - test_args += ['-d', dpdk_drivers_build_dir] - endif - if dpdk_conf.has('RTE_CRYPTO_NULL') - test_args += ['--vdev=crypto_null0'] - endif - if dpdk_conf.has('RTE_DMA_SKELETON') - test_args += ['--vdev=dma_skeleton0'] - endif - if dpdk_conf.has('RTE_EVENT_SKELETON') - test_args += ['--vdev=event_skeleton0'] - endif - if dpdk_conf.has('RTE_NET_NULL') - test_args += ['--vdev=net_null0'] - endif - if dpdk_conf.has('RTE_RAW_SKELETON') - test_args += ['--vdev=rawdev_skeleton0'] - endif - test_args += ['-a', '0000:00:00.0'] - test('telemetry_all', find_program('test_telemetry.sh'), - args: test_args, - timeout : timeout_seconds_fast, - is_parallel : false, - suite : 'fast-tests') +# create a symlink in the app/test directory for the binary, for backward compatibility +if not is_windows + custom_target('test_symlink', + output: 'dpdk-test', + command: ['ln', '-sf', '../dpdk-test', '@OUTPUT@'], + build_by_default: true, + install: false) endif - -foreach arg : perf_test_names - test(arg, dpdk_test, - env : ['DPDK_TEST=' + arg], - timeout : timeout_seconds, - is_parallel : false, - suite : 'perf-tests') -endforeach - -foreach arg : driver_test_names - test(arg, dpdk_test, - env : ['DPDK_TEST=' + arg], - timeout : timeout_seconds, - is_parallel : false, - suite : 'driver-tests') -endforeach - -foreach arg : dump_test_names - test(arg, dpdk_test, - env : ['DPDK_TEST=' + arg], - timeout : timeout_seconds, - is_parallel : false, - suite : 'debug-tests') -endforeach - -foreach arg : extra_test_names - test(arg, dpdk_test, - env : ['DPDK_TEST=' + arg], - timeout : timeout_seconds, - is_parallel : false, - suite : 'extra-tests') -endforeach -- 2.39.2