From patchwork Fri Jul 21 11:51:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 129682 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C550F42ED9; Fri, 21 Jul 2023 13:51:33 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4C17D40DDC; Fri, 21 Jul 2023 13:51:33 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id F015340DD8 for ; Fri, 21 Jul 2023 13:51:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689940292; x=1721476292; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=glc9XLtkP8ixk6qro+/7GfLLPIxxd896GzhdjECfBUY=; b=bP+FV9PUtQ+mdqMke18M/FGTVNridko+OX+TzANpykW+OC5EXW7lJ1Pr tcopmH+VQ8Jw3MxNcgCq0GidFu3fq6jk1+zAs3GHvTmgH/0LMwQ2y5U5O A6wNeDX8IugBcY0iSBi+jEKtHOf0/2yCnXB2s+Niv+Ny1uuTvFoejgfi7 lvIHXduyLkzLAgkuR+d0Uc+stRH/1Z221xAGdzQ9rQ89FeynvcBZMD+Zp aOewfPO+/CnVjEenjF+sSciQjVp5cxcib3iMN7pP/rlOCYQYb8TkWPSVN cekFvBCrjdzMklZpb5EMDa9nvamLThqiWB+mkq05zWDo1qlCPdkht1pFs g==; X-IronPort-AV: E=McAfee;i="6600,9927,10777"; a="346599144" X-IronPort-AV: E=Sophos;i="6.01,220,1684825200"; d="scan'208";a="346599144" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jul 2023 04:51:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10777"; a="971420487" X-IronPort-AV: E=Sophos;i="6.01,220,1684825200"; d="scan'208";a="971420487" Received: from silpixa00401385.ir.intel.com ([10.237.214.156]) by fmsmga006.fm.intel.com with ESMTP; 21 Jul 2023 04:51:29 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: Bruce Richardson Subject: [RFC PATCH 0/5] replace build code for unit tests Date: Fri, 21 Jul 2023 12:51:20 +0100 Message-Id: <20230721115125.55137-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org While working on series such as [1] to make DPDK builds more configurable, the majority of the complexity involved centered on the unit tests, and ensuring that the individual files were added/removed from the build as the components were enabled/disabled. This complexity was exacerbated by: * C files having multiple dependencies, specifically, * Some libraries having one set of independent tests, while other library tests requiring additional components * Having to maintain lists of tests in various suites which also needed to be updated, depending on component availability. * Everything having to be checked via if-else clauses, since this was not data-driven This RFC attempts to address these issues by doing the following: * Creating a per-file dependency list for the autotests, allowing easy checks of when a file could be built * Tagging the various fast-tests/perf-tests/drivers-tests suites via macros in the C code. Then scan the C-files we are building to construct the test suites based on what is available This RFC is just an early prototype, and probably needs cleanup and validation of the dependency lists. Windows support is probably also broken, given the fact that our current build file maintains custom lists there. However, I would hope it should not be too big a job to enable the unit tests for the windows components that are already available. (Tests for any components not being build on windows are already removed via the dependency lists). Another (hopefully less-impactful) side-effect of this change is that the "test" binary has moved in the build folder. It is now put along-side the other binaries in "build/app" rather than being in the subdirectory "build/app/test". Future work could also be done to scan the C files that are not being build for tests. Those tests could then be stubbed out in an auto-genereated file to always return "SKIPPED", meaning that all test commands are always valid, irrespective of what components are present or not. [1] http://patches.dpdk.org/project/dpdk/list/?series=28628&state=10 Bruce Richardson (5): app/test: add new macros for various test types app/test: tag tests with the test type app/test: build using per-file dependency matrix app/test: define unit tests suites based on test macros app/test: add fast test suite to new build infrastructure app/meson.build | 15 +- app/test/meson.build | 796 +++++------------- app/test/suites/meson.build | 75 ++ app/test/test.h | 9 +- app/test/test_acl.c | 2 +- app/test/test_atomic.c | 2 +- app/test/test_barrier.c | 2 +- app/test/test_bitmap.c | 2 +- app/test/test_bitops.c | 2 +- app/test/test_bpf.c | 4 +- app/test/test_byteorder.c | 2 +- app/test/test_cksum.c | 2 +- app/test/test_cmdline.c | 2 +- app/test/test_common.c | 2 +- app/test/test_cpuflags.c | 2 +- app/test/test_crc.c | 2 +- app/test/test_cryptodev.c | 38 +- app/test/test_cryptodev_asym.c | 2 +- app/test/test_cycles.c | 2 +- app/test/test_debug.c | 2 +- app/test/test_devargs.c | 2 +- app/test/test_distributor.c | 2 +- app/test/test_distributor_perf.c | 2 +- app/test/test_dmadev.c | 2 +- app/test/test_eal_flags.c | 24 +- app/test/test_eal_fs.c | 2 +- app/test/test_efd.c | 2 +- app/test/test_efd_perf.c | 2 +- app/test/test_errno.c | 2 +- app/test/test_ethdev_link.c | 2 +- app/test/test_event_ring.c | 2 +- app/test/test_eventdev.c | 2 +- app/test/test_fbarray.c | 2 +- app/test/test_fib.c | 4 +- app/test/test_fib6.c | 4 +- app/test/test_fib6_perf.c | 2 +- app/test/test_fib_perf.c | 2 +- app/test/test_func_reentrancy.c | 2 +- app/test/test_hash.c | 2 +- app/test/test_hash_functions.c | 2 +- app/test/test_hash_multiwriter.c | 2 +- app/test/test_hash_perf.c | 2 +- app/test/test_hash_readwrite.c | 4 +- app/test/test_hash_readwrite_lf_perf.c | 2 +- app/test/test_interrupts.c | 2 +- app/test/test_ipfrag.c | 2 +- app/test/test_ipsec.c | 2 +- app/test/test_ipsec_perf.c | 2 +- app/test/test_kni.c | 2 +- app/test/test_kvargs.c | 2 +- app/test/test_lcores.c | 2 +- app/test/test_logs.c | 2 +- app/test/test_lpm.c | 2 +- app/test/test_lpm6.c | 2 +- app/test/test_lpm6_perf.c | 2 +- app/test/test_lpm_perf.c | 2 +- app/test/test_malloc.c | 2 +- app/test/test_malloc_perf.c | 2 +- app/test/test_mbuf.c | 2 +- app/test/test_mcslock.c | 2 +- app/test/test_member.c | 2 +- app/test/test_member_perf.c | 2 +- app/test/test_memcpy.c | 2 +- app/test/test_memcpy_perf.c | 2 +- app/test/test_memory.c | 2 +- app/test/test_mempool.c | 2 +- app/test/test_mempool_perf.c | 2 +- app/test/test_memzone.c | 2 +- app/test/test_meter.c | 2 +- app/test/test_mp_secondary.c | 2 +- app/test/test_per_lcore.c | 2 +- app/test/test_pflock.c | 2 +- app/test/test_pie.c | 6 +- app/test/test_pmd_perf.c | 2 +- app/test/test_power.c | 2 +- app/test/test_power_cpufreq.c | 2 +- app/test/test_power_intel_uncore.c | 2 +- app/test/test_power_kvm_vm.c | 2 +- app/test/test_prefetch.c | 2 +- app/test/test_rand_perf.c | 2 +- app/test/test_rcu_qsbr.c | 2 +- app/test/test_rcu_qsbr_perf.c | 2 +- app/test/test_reassembly_perf.c | 2 +- app/test/test_reciprocal_division.c | 2 +- app/test/test_reciprocal_division_perf.c | 2 +- app/test/test_red.c | 4 +- app/test/test_reorder.c | 2 +- app/test/test_rib.c | 4 +- app/test/test_rib6.c | 4 +- app/test/test_ring.c | 2 +- app/test/test_ring_perf.c | 2 +- app/test/test_rwlock.c | 8 +- app/test/test_sched.c | 2 +- app/test/test_security.c | 2 +- app/test/test_seqlock.c | 2 +- app/test/test_service_cores.c | 4 +- app/test/test_spinlock.c | 2 +- app/test/test_stack.c | 4 +- app/test/test_stack_perf.c | 4 +- app/test/test_string_fns.c | 2 +- app/test/test_tailq.c | 2 +- app/test/test_thash.c | 2 +- app/test/test_thash_perf.c | 2 +- app/test/test_threads.c | 2 +- app/test/test_ticketlock.c | 2 +- app/test/test_timer.c | 2 +- app/test/test_timer_perf.c | 2 +- app/test/test_timer_racecond.c | 2 +- app/test/test_trace.c | 2 +- app/test/test_trace_perf.c | 2 +- app/test/test_version.c | 2 +- buildtools/get-test-suites.py | 33 + .../has-hugepages.py | 0 buildtools/meson.build | 2 + 114 files changed, 478 insertions(+), 754 deletions(-) create mode 100644 app/test/suites/meson.build create mode 100644 buildtools/get-test-suites.py rename app/test/has_hugepage.py => buildtools/has-hugepages.py (100%) --- 2.39.2