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 03721459D7; Fri, 20 Sep 2024 12:57:15 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E5ED2427C9; Fri, 20 Sep 2024 12:57:14 +0200 (CEST) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2080.outbound.protection.outlook.com [40.107.105.80]) by mails.dpdk.org (Postfix) with ESMTP id 1D47A402AE for ; Fri, 20 Sep 2024 12:57:14 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Xta85xJLamPj9YieF9XI8BnW4WufZ8r+ENc8QhZmC8PfDNsKytL/Jvqd/i1OReWX0XyisdafG05aryUIFZ8SEtu9J01FODA1qiqJnU/Hufuf8j9YbXW8jupE7nnqEdpdib43d7JCntXuayOLCSWZQPkMcsu4giXiPmNVkiO5ll/3JKgnNZqhJt0C++ZfnTYFLi6aCIq3Wvi/tFfADs5Ymm6hfxhOJ87myYTz3Q5waRL7JFb4KIEacgxIm8ZaX/gAFkhnx59jv7E1v3A5kYc+2Yacpm15RKbv2YLXYnh09asgq+uxcyb/C0C3vxiXxzxHUS4mvPsaB5ebPUly/cV5Bg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ugO+dZXHboBDy0alX7tjERaUwQdQCrWdqNupd7dpxTM=; b=sY9qE73MrBVLQXugz4T/gCeb37v7P3cVsPYpAZkThTLaJIH7Y3mYnhh7F0YhBTHa8suic4y0Iu5oi3P4/VZXTVnpGyMdg1H7sfE1EuyO1ncYqj+nc0drha5UanlZWIVQ5iOPqrLFXKXIak7VsVHPRF71AuwkEJ904kWD+IwcQnqB1VZUJrxGtUBPJHUyZ7BsnUdZAz2ifcGGVXgXKmZ9SCGTIYQ6u4IHlveuUbTXOtz2m1ytZ7XV5FyPHRgtT28vZX+zF0Cd0thixV9UcrcqyumvX3cTHtbcvfFUx0rHIRz7lVrlVKWTJdzt99bqQa2g81dWXAIjzvd5ImrhoQBJ/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ugO+dZXHboBDy0alX7tjERaUwQdQCrWdqNupd7dpxTM=; b=hQr2gFSBRremjJj+V22iONInrlmMBCStiXSt4ihDJ5SAfLKXkqsUnhCuPREZmTYqBUVfKfZnRU0dCBGivP36ijHY5guYa1FykonlvCWzfKZ8U9X43tHqTCjAivWGAmzICAF2G5JPGY8pYGk44CIM0xt9gugF5ZaFjxBmZrYvvvUADPC5qJoc9f5qO1XPFXM/KXMW0DCXBsWfKyazdPNfHTZXsEnlaVaeU8XxpJ94DmURLn5gqn06LBsYwBVGVcdgZI4ARpViXnN84rbcxpy9udZx2KLx5Abq4GxJnpiNAfWBSysEd5MaUUjIqeQ5pHXvnNxd9S4EX56MjmB4Y4h9TQ== Received: from AS9PR06CA0017.eurprd06.prod.outlook.com (2603:10a6:20b:462::13) by PA4PR07MB7373.eurprd07.prod.outlook.com (2603:10a6:102:cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7982.22; Fri, 20 Sep 2024 10:57:11 +0000 Received: from AMS0EPF00000192.eurprd05.prod.outlook.com (2603:10a6:20b:462:cafe::50) by AS9PR06CA0017.outlook.office365.com (2603:10a6:20b:462::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.30 via Frontend Transport; Fri, 20 Sep 2024 10:57:11 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; pr=C Received: from oa.msg.ericsson.com (192.176.1.74) by AMS0EPF00000192.mail.protection.outlook.com (10.167.16.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Fri, 20 Sep 2024 10:57:11 +0000 Received: from seliicinfr00049.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.62) with Microsoft SMTP Server id 15.2.1544.11; Fri, 20 Sep 2024 12:57:10 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00049.seli.gic.ericsson.se (Postfix) with ESMTP id B8B4D38007A; Fri, 20 Sep 2024 12:57:10 +0200 (CEST) From: =?UTF-8?q?Mattias=20R=C3=B6nnblom?= To: CC: , Heng Wang , "Stephen Hemminger" , Tyler Retzlaff , =?UTF-8?q?Morten=20Br=C3=B8rup?= , Jack Bond-Preston , David Marchand , Chengwen Feng , =?UTF-8?q?Mattias=20R=C3=B6nnblom?= Subject: [PATCH v12 1/7] buildtools/chkincs: relax C linkage requirement Date: Fri, 20 Sep 2024 12:47:48 +0200 Message-ID: <20240920104754.739033-2-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240920104754.739033-1-mattias.ronnblom@ericsson.com> References: <20240920062437.738706-2-mattias.ronnblom@ericsson.com> <20240920104754.739033-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF00000192:EE_|PA4PR07MB7373:EE_ X-MS-Office365-Filtering-Correlation-Id: ab9bc747-fca6-4b30-fa17-08dcd962fa8d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700013|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RnpEeGFZRDNPY2cwVU9EaFFxRG8yZkJjNS9MSGljZy9UQnM3bWxaNlpza0Y2?= =?utf-8?B?QkV6NGs4bGI3S01GUll1bERyN0U2NDN6TUZ0Y2J4Y2dJckdCWVBtVWR3cDdH?= =?utf-8?B?c3UrUS83QlNLTlN5NFJ5eXBIVDlwTEtHNkphd1gvY0FoQ0Z2bTFlb21EaUdl?= =?utf-8?B?dGxqUU9hbFFyNjVRVHN4QnRjZWNJdk5UQ2RMM2JtUkxEMXpPbXczYVZ6MDh0?= =?utf-8?B?UTU5aW1RNTNCT2JPdkNRR01LVVA1QXJTbjl6Q3JhT1FqMU1jN2ZmTEhzRFVa?= =?utf-8?B?bDE1ZWp3ZkdHbG1YYmZXR2RHZFZiQUQ4cHNQNm1RRnpVbDBKN3JzWklhb1NS?= =?utf-8?B?VmdUMS8xTyttdkN1bWlJTXhxZFhzakZNL04ycW4zR0I4bXNRUk9pemsxWGsv?= =?utf-8?B?ZHdXTXBpZUs2eSs2Z05TSk8rdDgrM2RrWmVHNmJ4WnFSd1B6WEtDL1FWRWEv?= =?utf-8?B?OFdId0Yyck5GZmdHSC9FK21HeTZGZWRNY29tckY0Z0ZxS2ZWL1R2ZlJXdkVi?= =?utf-8?B?TklraUMrTk15d2VwVzlMQnlDbDNNOE1oOWJSU0o3WHFEQnpGZllqbE04cHV6?= =?utf-8?B?Q1RtT2JFa1NsU2pRRnhnQVFSclVJOHVIdXRkKzEzUm1waWVFQW1iN2sxdEo0?= =?utf-8?B?NnlIREtIZlFWUytyYWxBVFJEbzJJVWpTTGZFc1JsWTZwMVN3c3puay9FTUlj?= =?utf-8?B?S3dja0UweTl5STIvWmdtR2dkTzBIcC9VNU9qZjlBZlE0am50d1EwQ0ZncjVD?= =?utf-8?B?OGJuaG1ha21hZDZXVU15d2d4Y2ZEMjhqZ1hQU1dTKzNUcFdhQjNUeTVlRXdN?= =?utf-8?B?NUVoaVJBUmtpRkdXbGtLK1R1VnhOM09LUjBiVXkyWXZpeDRoMElnVmI3d2tv?= =?utf-8?B?TVFNODFaaGtRYit5R09TY0hwdkM4TlFRZ0U0Z0VTSGpPRUVRRXhnYVNXM2RT?= =?utf-8?B?UEJVOUlpaUQ5Z1A4QVNDeVkvVWdZdyt3YUNscTdXaFZiN3ZueFdlZ2FYTlFS?= =?utf-8?B?ZW00Q3FFMVZ5QzdMaEFVVDNIVFZmRlAyZ2xFM2pRaHlMQ3lyWldlQzdJWWxo?= =?utf-8?B?ZElMZjMySFIxSSt1VFJQMkJuRVlmYzEzQStoSjJWVFJuUityWVhpaDdYZk8x?= =?utf-8?B?RlVyQm91U1JiNFlWU0VxYnNtYkpaWkFQekxZQzBBRUpzaGlzRHhGSW1nSXRi?= =?utf-8?B?MEU3Q1F1NkZweUtVc3RMeHR1cWRPS0grL21jZkZpdC9HU3B0dFJ3WkxkbUJj?= =?utf-8?B?Sko5VmtSWFZBaDNvVEg4d1dEcTZvTzhRN0hma2VrV0pJbFFWRmU3YXJLT01H?= =?utf-8?B?ckZvbGFvZzN5ZlVYZmR6L2VtVWZNQVQrTUNXNXFzMThsd3hmT1I2OEFic2wy?= =?utf-8?B?SjdIS1JGT1Z5S0FzTFVuUVp4anRxYktOaTBqNnJxUkw1MFBHZ0hVT01uM2pi?= =?utf-8?B?bWNKYTVKSjFwU1JWaUt6cUxCRDRNWVNGcjAzdzR0WWZuQzB0Tmg3ZnR0R2tC?= =?utf-8?B?YjlDT1JNSThmM0hrM1pvNUxnL0lvSWt3b3U0SmhrTUcyNTR3Q3JlWTN3NkNS?= =?utf-8?B?ZG5LeW1BU3pNODROY3Z3ZXBoN0piVGF0TkFXSnhsUXRmeFlXOU85OG5hekwy?= =?utf-8?B?QVZ0dzlJZk11RHFLa2NleXhtdUI0Zk1yT1NwK1JUQ1BHSjhHZjBXTGx0blo5?= =?utf-8?B?RzA0OWM4cGZ0U3ZxSHpoMk1ZL1RzU3psY0FyVExhcElYbVY1Z3lVZWVRUmV0?= =?utf-8?B?MjlrdHBjWThZUit0cGhKUVVnMzVEVnhRdVVmbm5nUVV6enh6aHA5dmczVUVB?= =?utf-8?B?ckZ1bGMwanliNCtRRWM0aEdBS2djNzY0UGZHMWs3Q29NcVVXNWxGOTZRRmtW?= =?utf-8?Q?4nevILkHPegfJ?= X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(13230040)(1800799024)(36860700013)(376014)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2024 10:57:11.2930 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ab9bc747-fca6-4b30-fa17-08dcd962fa8d X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF00000192.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR07MB7373 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 Relax chkincs requirement of all DPDK header files having to contain 'extern "C"'. Instructing a C++ toolchain to use C linkage is only necessarily if the header file declares symbols (i.e., functions or global variables). With this change, chkincs tries to find if any functions or references to global variables are declared in the header file, and if not, no C linkage is required. Signed-off-by: Mattias Rönnblom -- PATCH v11: * Detect functions from the Windows POSIX wrappers, to avoid false positives for redundant 'extern "C"'. --- buildtools/chkincs/chkextern.py | 88 +++++++++++++++++++++++++++++++++ buildtools/chkincs/meson.build | 14 +++--- 2 files changed, 95 insertions(+), 7 deletions(-) create mode 100755 buildtools/chkincs/chkextern.py diff --git a/buildtools/chkincs/chkextern.py b/buildtools/chkincs/chkextern.py new file mode 100755 index 0000000000..5374ce1c72 --- /dev/null +++ b/buildtools/chkincs/chkextern.py @@ -0,0 +1,88 @@ +#! /usr/bin/env python3 +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2024 Ericsson AB + +import sys +import re + +def strip_cpp(header): + no_cpp = "" + header = header.replace("\\\n", " ") + + for line in header.split("\n"): + if re.match(r'^\s*#.*', line) is None and len(line) > 0: + no_cpp += "%s\n" % line + + return no_cpp + + +def strip_comments(header): + no_c_comments = re.sub(r'/\*.*?\*/', '', header, flags=re.DOTALL) + no_cxx_comments = re.sub(r'//.*', '', no_c_comments) + return no_cxx_comments + + +def strip(header): + header = strip_comments(header) + header = strip_cpp(header) + return header + + +def has_extern_c(header): + return header.find('extern "C"') != -1 + + +def has_vars(header): + return re.search(r'^extern\s+[a-z0-9_]+\s.*;', header, flags=re.MULTILINE) is not None + + +FUNCTION_RES = [ + r'rte_[a-z0-9_]+\(', + r'cmdline_[a-z0-9_]+\(', + r'vt100_[a-z0-9_]+\(', + r'rdline_[a-z0-9_]+\(', + r'cirbuf_[a-z0-9_]+\(', + # Windows UNIX compatibility + r'pthread_[a-z0-9_]+\(', + r'regcomp\(', + r'count_cpu\(' +] + + +def has_functions(header): + for function_re in FUNCTION_RES: + if re.search(function_re, header) is not None: + return True + return False + + +def has_symbols(header): + return has_functions(header) or has_vars(header) + + +def chk_missing(filename): + header = open(filename).read() + if has_symbols(header) and not has_extern_c(header): + print(filename) + + +def chk_redundant(filename): + header = open(filename).read() + if not has_symbols(header) and has_extern_c(header): + print(filename) + +if len(sys.argv) < 3: + print("%s missing|redundant ..." % sys.argv[0]) + sys.exit(1) + +op = sys.argv[1] +headers = sys.argv[2:] + +for header in headers: + if op == 'missing': + chk_missing(header) + elif op == 'redundant': + chk_redundant(header) + else: + print("Unknown operation.") + sys.exit(1) diff --git a/buildtools/chkincs/meson.build b/buildtools/chkincs/meson.build index f2dadcae18..762f85efe5 100644 --- a/buildtools/chkincs/meson.build +++ b/buildtools/chkincs/meson.build @@ -38,13 +38,13 @@ if not add_languages('cpp', required: false) endif # check for extern C in files, since this is not detected as an error by the compiler -grep = find_program('grep', required: false) -if grep.found() - errlist = run_command([grep, '--files-without-match', '^extern "C"', dpdk_chkinc_headers], - check: false, capture: true).stdout().split() - if errlist != [] - error('Files missing C++ \'extern "C"\' guards:\n- ' + '\n- '.join(errlist)) - endif +chkextern = find_program('chkextern.py') + +missing_extern_headers = run_command(chkextern, 'missing', dpdk_chkinc_headers, + capture: true, check: true).stdout().split() + +if missing_extern_headers != [] + error('Files missing C++ \'extern "C"\' guards:\n- ' + '\n- '.join(missing_extern_headers)) endif gen_cpp_files = generator(gen_c_file_for_header, -- 2.43.0