Skip to content

Commit fa89323

Browse files
author
Martin Belanger
committed
swig: replace hand-written accessor wrappers with auto-generated #defines
SWIG generates accessor names as libnvme_STRUCT_MEMBER_get/set() but libnvme exports them as libnvme_STRUCT_get/set_MEMBER(). Previously nvme.i bridged this gap with ~35 hand-written C wrapper functions (~130 lines of boilerplate) that had to be updated manually whenever new accessors were added to the library. Add generate-swig-accessors.py, a post-processing script that reads the accessor header files produced by generate-accessors.py (accessors.h and accessors-fabrics.h, covering both common and fabrics structs) and emits nvme-swig-accessors.i containing one #define per accessor: #define libnvme_ctrl_name_get libnvme_ctrl_get_name Parsing the .h files (not the .ld version scripts) ensures the output is always in sync even before the .ld section labels are manually bumped. Object-like macros are used rather than function-like macros since the call arguments follow naturally after macro expansion. Add a new update-swig-accessors run_target in meson.build and extend the update-accessors alias to include it. Replace the hand-written wrapper blocks in nvme.i with %include "nvme-swig-accessors.i". The four bridges that cannot be auto-generated (virtual member names or !accessors:none annotations) are kept as #defines in a single block next to the %include. Signed-off-by: Martin Belanger <[email protected]> Assisted-by: Claude Sonnet 4.6 <[email protected]>
1 parent eead61f commit fa89323

4 files changed

Lines changed: 428 additions & 168 deletions

File tree

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
/* SPDX-License-Identifier: LGPL-2.1-or-later */
2+
3+
/*
4+
* This file is part of libnvme.
5+
*
6+
* Copyright (c) 2026, Dell Technologies Inc. or its subsidiaries.
7+
* Authors: Martin Belanger <[email protected]>
8+
*
9+
* ____ _ _ ____ _
10+
* / ___| ___ _ __ ___ _ __ __ _| |_ ___ __| | / ___|___ __| | ___
11+
* | | _ / _ \ '_ \ / _ \ '__/ _` | __/ _ \/ _` | | | / _ \ / _` |/ _ \
12+
* | |_| | __/ | | | __/ | | (_| | || __/ (_| | | |__| (_) | (_| | __/
13+
* \____|\___|_| |_|\___|_| \__,_|\__\___|\__,_| \____\___/ \__,_|\___|
14+
*
15+
* Auto-generated SWIG accessor #define bridges.
16+
*
17+
* To update run: meson compile -C [BUILD-DIR] update-accessors
18+
* Or: make update-accessors
19+
*/
20+
21+
%{
22+
/* struct libnvme_fabrics_config */
23+
#define libnvme_fabrics_config_queue_size_get libnvme_fabrics_config_get_queue_size
24+
#define libnvme_fabrics_config_nr_io_queues_get libnvme_fabrics_config_get_nr_io_queues
25+
#define libnvme_fabrics_config_reconnect_delay_get libnvme_fabrics_config_get_reconnect_delay
26+
#define libnvme_fabrics_config_ctrl_loss_tmo_get libnvme_fabrics_config_get_ctrl_loss_tmo
27+
#define libnvme_fabrics_config_fast_io_fail_tmo_get libnvme_fabrics_config_get_fast_io_fail_tmo
28+
#define libnvme_fabrics_config_keep_alive_tmo_get libnvme_fabrics_config_get_keep_alive_tmo
29+
#define libnvme_fabrics_config_nr_write_queues_get libnvme_fabrics_config_get_nr_write_queues
30+
#define libnvme_fabrics_config_nr_poll_queues_get libnvme_fabrics_config_get_nr_poll_queues
31+
#define libnvme_fabrics_config_tos_get libnvme_fabrics_config_get_tos
32+
#define libnvme_fabrics_config_keyring_id_get libnvme_fabrics_config_get_keyring_id
33+
#define libnvme_fabrics_config_tls_key_id_get libnvme_fabrics_config_get_tls_key_id
34+
#define libnvme_fabrics_config_tls_configured_key_id_get libnvme_fabrics_config_get_tls_configured_key_id
35+
#define libnvme_fabrics_config_duplicate_connect_get libnvme_fabrics_config_get_duplicate_connect
36+
#define libnvme_fabrics_config_disable_sqflow_get libnvme_fabrics_config_get_disable_sqflow
37+
#define libnvme_fabrics_config_hdr_digest_get libnvme_fabrics_config_get_hdr_digest
38+
#define libnvme_fabrics_config_data_digest_get libnvme_fabrics_config_get_data_digest
39+
#define libnvme_fabrics_config_tls_get libnvme_fabrics_config_get_tls
40+
#define libnvme_fabrics_config_concat_get libnvme_fabrics_config_get_concat
41+
#define libnvme_fabrics_config_queue_size_set libnvme_fabrics_config_set_queue_size
42+
#define libnvme_fabrics_config_nr_io_queues_set libnvme_fabrics_config_set_nr_io_queues
43+
#define libnvme_fabrics_config_reconnect_delay_set libnvme_fabrics_config_set_reconnect_delay
44+
#define libnvme_fabrics_config_ctrl_loss_tmo_set libnvme_fabrics_config_set_ctrl_loss_tmo
45+
#define libnvme_fabrics_config_fast_io_fail_tmo_set libnvme_fabrics_config_set_fast_io_fail_tmo
46+
#define libnvme_fabrics_config_keep_alive_tmo_set libnvme_fabrics_config_set_keep_alive_tmo
47+
#define libnvme_fabrics_config_nr_write_queues_set libnvme_fabrics_config_set_nr_write_queues
48+
#define libnvme_fabrics_config_nr_poll_queues_set libnvme_fabrics_config_set_nr_poll_queues
49+
#define libnvme_fabrics_config_tos_set libnvme_fabrics_config_set_tos
50+
#define libnvme_fabrics_config_keyring_id_set libnvme_fabrics_config_set_keyring_id
51+
#define libnvme_fabrics_config_tls_key_id_set libnvme_fabrics_config_set_tls_key_id
52+
#define libnvme_fabrics_config_tls_configured_key_id_set libnvme_fabrics_config_set_tls_configured_key_id
53+
#define libnvme_fabrics_config_duplicate_connect_set libnvme_fabrics_config_set_duplicate_connect
54+
#define libnvme_fabrics_config_disable_sqflow_set libnvme_fabrics_config_set_disable_sqflow
55+
#define libnvme_fabrics_config_hdr_digest_set libnvme_fabrics_config_set_hdr_digest
56+
#define libnvme_fabrics_config_data_digest_set libnvme_fabrics_config_set_data_digest
57+
#define libnvme_fabrics_config_tls_set libnvme_fabrics_config_set_tls
58+
#define libnvme_fabrics_config_concat_set libnvme_fabrics_config_set_concat
59+
60+
/* struct libnvme_path */
61+
#define libnvme_path_name_get libnvme_path_get_name
62+
#define libnvme_path_sysfs_dir_get libnvme_path_get_sysfs_dir
63+
#define libnvme_path_ana_state_get libnvme_path_get_ana_state
64+
#define libnvme_path_numa_nodes_get libnvme_path_get_numa_nodes
65+
#define libnvme_path_grpid_get libnvme_path_get_grpid
66+
#define libnvme_path_name_set libnvme_path_set_name
67+
#define libnvme_path_sysfs_dir_set libnvme_path_set_sysfs_dir
68+
#define libnvme_path_ana_state_set libnvme_path_set_ana_state
69+
#define libnvme_path_numa_nodes_set libnvme_path_set_numa_nodes
70+
#define libnvme_path_grpid_set libnvme_path_set_grpid
71+
72+
/* struct libnvme_ns */
73+
#define libnvme_ns_nsid_get libnvme_ns_get_nsid
74+
#define libnvme_ns_name_get libnvme_ns_get_name
75+
#define libnvme_ns_sysfs_dir_get libnvme_ns_get_sysfs_dir
76+
#define libnvme_ns_lba_shift_get libnvme_ns_get_lba_shift
77+
#define libnvme_ns_lba_size_get libnvme_ns_get_lba_size
78+
#define libnvme_ns_meta_size_get libnvme_ns_get_meta_size
79+
#define libnvme_ns_lba_count_get libnvme_ns_get_lba_count
80+
#define libnvme_ns_lba_util_get libnvme_ns_get_lba_util
81+
#define libnvme_ns_nsid_set libnvme_ns_set_nsid
82+
#define libnvme_ns_name_set libnvme_ns_set_name
83+
#define libnvme_ns_sysfs_dir_set libnvme_ns_set_sysfs_dir
84+
#define libnvme_ns_lba_shift_set libnvme_ns_set_lba_shift
85+
#define libnvme_ns_lba_size_set libnvme_ns_set_lba_size
86+
#define libnvme_ns_meta_size_set libnvme_ns_set_meta_size
87+
#define libnvme_ns_lba_count_set libnvme_ns_set_lba_count
88+
#define libnvme_ns_lba_util_set libnvme_ns_set_lba_util
89+
90+
/* struct libnvme_ctrl */
91+
#define libnvme_ctrl_name_get libnvme_ctrl_get_name
92+
#define libnvme_ctrl_sysfs_dir_get libnvme_ctrl_get_sysfs_dir
93+
#define libnvme_ctrl_firmware_get libnvme_ctrl_get_firmware
94+
#define libnvme_ctrl_model_get libnvme_ctrl_get_model
95+
#define libnvme_ctrl_numa_node_get libnvme_ctrl_get_numa_node
96+
#define libnvme_ctrl_queue_count_get libnvme_ctrl_get_queue_count
97+
#define libnvme_ctrl_serial_get libnvme_ctrl_get_serial
98+
#define libnvme_ctrl_sqsize_get libnvme_ctrl_get_sqsize
99+
#define libnvme_ctrl_transport_get libnvme_ctrl_get_transport
100+
#define libnvme_ctrl_subsysnqn_get libnvme_ctrl_get_subsysnqn
101+
#define libnvme_ctrl_traddr_get libnvme_ctrl_get_traddr
102+
#define libnvme_ctrl_trsvcid_get libnvme_ctrl_get_trsvcid
103+
#define libnvme_ctrl_dhchap_host_key_get libnvme_ctrl_get_dhchap_host_key
104+
#define libnvme_ctrl_dhchap_ctrl_key_get libnvme_ctrl_get_dhchap_ctrl_key
105+
#define libnvme_ctrl_keyring_get libnvme_ctrl_get_keyring
106+
#define libnvme_ctrl_tls_key_identity_get libnvme_ctrl_get_tls_key_identity
107+
#define libnvme_ctrl_tls_key_get libnvme_ctrl_get_tls_key
108+
#define libnvme_ctrl_cntrltype_get libnvme_ctrl_get_cntrltype
109+
#define libnvme_ctrl_cntlid_get libnvme_ctrl_get_cntlid
110+
#define libnvme_ctrl_dctype_get libnvme_ctrl_get_dctype
111+
#define libnvme_ctrl_phy_slot_get libnvme_ctrl_get_phy_slot
112+
#define libnvme_ctrl_host_traddr_get libnvme_ctrl_get_host_traddr
113+
#define libnvme_ctrl_host_iface_get libnvme_ctrl_get_host_iface
114+
#define libnvme_ctrl_discovery_ctrl_get libnvme_ctrl_get_discovery_ctrl
115+
#define libnvme_ctrl_unique_discovery_ctrl_get libnvme_ctrl_get_unique_discovery_ctrl
116+
#define libnvme_ctrl_discovered_get libnvme_ctrl_get_discovered
117+
#define libnvme_ctrl_persistent_get libnvme_ctrl_get_persistent
118+
#define libnvme_ctrl_dhchap_host_key_set libnvme_ctrl_set_dhchap_host_key
119+
#define libnvme_ctrl_dhchap_ctrl_key_set libnvme_ctrl_set_dhchap_ctrl_key
120+
#define libnvme_ctrl_keyring_set libnvme_ctrl_set_keyring
121+
#define libnvme_ctrl_tls_key_identity_set libnvme_ctrl_set_tls_key_identity
122+
#define libnvme_ctrl_tls_key_set libnvme_ctrl_set_tls_key
123+
#define libnvme_ctrl_discovery_ctrl_set libnvme_ctrl_set_discovery_ctrl
124+
#define libnvme_ctrl_unique_discovery_ctrl_set libnvme_ctrl_set_unique_discovery_ctrl
125+
#define libnvme_ctrl_discovered_set libnvme_ctrl_set_discovered
126+
#define libnvme_ctrl_persistent_set libnvme_ctrl_set_persistent
127+
128+
/* struct libnvme_subsystem */
129+
#define libnvme_subsystem_name_get libnvme_subsystem_get_name
130+
#define libnvme_subsystem_sysfs_dir_get libnvme_subsystem_get_sysfs_dir
131+
#define libnvme_subsystem_subsysnqn_get libnvme_subsystem_get_subsysnqn
132+
#define libnvme_subsystem_model_get libnvme_subsystem_get_model
133+
#define libnvme_subsystem_serial_get libnvme_subsystem_get_serial
134+
#define libnvme_subsystem_firmware_get libnvme_subsystem_get_firmware
135+
#define libnvme_subsystem_subsystype_get libnvme_subsystem_get_subsystype
136+
#define libnvme_subsystem_application_get libnvme_subsystem_get_application
137+
#define libnvme_subsystem_iopolicy_get libnvme_subsystem_get_iopolicy
138+
#define libnvme_subsystem_application_set libnvme_subsystem_set_application
139+
#define libnvme_subsystem_iopolicy_set libnvme_subsystem_set_iopolicy
140+
141+
/* struct libnvme_host */
142+
#define libnvme_host_hostnqn_get libnvme_host_get_hostnqn
143+
#define libnvme_host_hostid_get libnvme_host_get_hostid
144+
#define libnvme_host_dhchap_host_key_get libnvme_host_get_dhchap_host_key
145+
#define libnvme_host_hostsymname_get libnvme_host_get_hostsymname
146+
#define libnvme_host_pdc_enabled_valid_get libnvme_host_get_pdc_enabled_valid
147+
#define libnvme_host_dhchap_host_key_set libnvme_host_set_dhchap_host_key
148+
#define libnvme_host_hostsymname_set libnvme_host_set_hostsymname
149+
#define libnvme_host_pdc_enabled_valid_set libnvme_host_set_pdc_enabled_valid
150+
151+
/* struct libnvme_fabric_options */
152+
#define libnvme_fabric_options_cntlid_get libnvme_fabric_options_get_cntlid
153+
#define libnvme_fabric_options_concat_get libnvme_fabric_options_get_concat
154+
#define libnvme_fabric_options_ctrl_loss_tmo_get libnvme_fabric_options_get_ctrl_loss_tmo
155+
#define libnvme_fabric_options_data_digest_get libnvme_fabric_options_get_data_digest
156+
#define libnvme_fabric_options_dhchap_ctrl_secret_get libnvme_fabric_options_get_dhchap_ctrl_secret
157+
#define libnvme_fabric_options_dhchap_secret_get libnvme_fabric_options_get_dhchap_secret
158+
#define libnvme_fabric_options_disable_sqflow_get libnvme_fabric_options_get_disable_sqflow
159+
#define libnvme_fabric_options_discovery_get libnvme_fabric_options_get_discovery
160+
#define libnvme_fabric_options_duplicate_connect_get libnvme_fabric_options_get_duplicate_connect
161+
#define libnvme_fabric_options_fast_io_fail_tmo_get libnvme_fabric_options_get_fast_io_fail_tmo
162+
#define libnvme_fabric_options_hdr_digest_get libnvme_fabric_options_get_hdr_digest
163+
#define libnvme_fabric_options_host_iface_get libnvme_fabric_options_get_host_iface
164+
#define libnvme_fabric_options_host_traddr_get libnvme_fabric_options_get_host_traddr
165+
#define libnvme_fabric_options_hostid_get libnvme_fabric_options_get_hostid
166+
#define libnvme_fabric_options_hostnqn_get libnvme_fabric_options_get_hostnqn
167+
#define libnvme_fabric_options_instance_get libnvme_fabric_options_get_instance
168+
#define libnvme_fabric_options_keep_alive_tmo_get libnvme_fabric_options_get_keep_alive_tmo
169+
#define libnvme_fabric_options_keyring_get libnvme_fabric_options_get_keyring
170+
#define libnvme_fabric_options_nqn_get libnvme_fabric_options_get_nqn
171+
#define libnvme_fabric_options_nr_io_queues_get libnvme_fabric_options_get_nr_io_queues
172+
#define libnvme_fabric_options_nr_poll_queues_get libnvme_fabric_options_get_nr_poll_queues
173+
#define libnvme_fabric_options_nr_write_queues_get libnvme_fabric_options_get_nr_write_queues
174+
#define libnvme_fabric_options_queue_size_get libnvme_fabric_options_get_queue_size
175+
#define libnvme_fabric_options_reconnect_delay_get libnvme_fabric_options_get_reconnect_delay
176+
#define libnvme_fabric_options_tls_get libnvme_fabric_options_get_tls
177+
#define libnvme_fabric_options_tls_key_get libnvme_fabric_options_get_tls_key
178+
#define libnvme_fabric_options_tos_get libnvme_fabric_options_get_tos
179+
#define libnvme_fabric_options_traddr_get libnvme_fabric_options_get_traddr
180+
#define libnvme_fabric_options_transport_get libnvme_fabric_options_get_transport
181+
#define libnvme_fabric_options_trsvcid_get libnvme_fabric_options_get_trsvcid
182+
#define libnvme_fabric_options_cntlid_set libnvme_fabric_options_set_cntlid
183+
#define libnvme_fabric_options_concat_set libnvme_fabric_options_set_concat
184+
#define libnvme_fabric_options_ctrl_loss_tmo_set libnvme_fabric_options_set_ctrl_loss_tmo
185+
#define libnvme_fabric_options_data_digest_set libnvme_fabric_options_set_data_digest
186+
#define libnvme_fabric_options_dhchap_ctrl_secret_set libnvme_fabric_options_set_dhchap_ctrl_secret
187+
#define libnvme_fabric_options_dhchap_secret_set libnvme_fabric_options_set_dhchap_secret
188+
#define libnvme_fabric_options_disable_sqflow_set libnvme_fabric_options_set_disable_sqflow
189+
#define libnvme_fabric_options_discovery_set libnvme_fabric_options_set_discovery
190+
#define libnvme_fabric_options_duplicate_connect_set libnvme_fabric_options_set_duplicate_connect
191+
#define libnvme_fabric_options_fast_io_fail_tmo_set libnvme_fabric_options_set_fast_io_fail_tmo
192+
#define libnvme_fabric_options_hdr_digest_set libnvme_fabric_options_set_hdr_digest
193+
#define libnvme_fabric_options_host_iface_set libnvme_fabric_options_set_host_iface
194+
#define libnvme_fabric_options_host_traddr_set libnvme_fabric_options_set_host_traddr
195+
#define libnvme_fabric_options_hostid_set libnvme_fabric_options_set_hostid
196+
#define libnvme_fabric_options_hostnqn_set libnvme_fabric_options_set_hostnqn
197+
#define libnvme_fabric_options_instance_set libnvme_fabric_options_set_instance
198+
#define libnvme_fabric_options_keep_alive_tmo_set libnvme_fabric_options_set_keep_alive_tmo
199+
#define libnvme_fabric_options_keyring_set libnvme_fabric_options_set_keyring
200+
#define libnvme_fabric_options_nqn_set libnvme_fabric_options_set_nqn
201+
#define libnvme_fabric_options_nr_io_queues_set libnvme_fabric_options_set_nr_io_queues
202+
#define libnvme_fabric_options_nr_poll_queues_set libnvme_fabric_options_set_nr_poll_queues
203+
#define libnvme_fabric_options_nr_write_queues_set libnvme_fabric_options_set_nr_write_queues
204+
#define libnvme_fabric_options_queue_size_set libnvme_fabric_options_set_queue_size
205+
#define libnvme_fabric_options_reconnect_delay_set libnvme_fabric_options_set_reconnect_delay
206+
#define libnvme_fabric_options_tls_set libnvme_fabric_options_set_tls
207+
#define libnvme_fabric_options_tls_key_set libnvme_fabric_options_set_tls_key
208+
#define libnvme_fabric_options_tos_set libnvme_fabric_options_set_tos
209+
#define libnvme_fabric_options_traddr_set libnvme_fabric_options_set_traddr
210+
#define libnvme_fabric_options_transport_set libnvme_fabric_options_set_transport
211+
#define libnvme_fabric_options_trsvcid_set libnvme_fabric_options_set_trsvcid
212+
213+
/* struct libnvmf_discovery_args */
214+
#define libnvmf_discovery_args_max_retries_get libnvmf_discovery_args_get_max_retries
215+
#define libnvmf_discovery_args_lsp_get libnvmf_discovery_args_get_lsp
216+
#define libnvmf_discovery_args_max_retries_set libnvmf_discovery_args_set_max_retries
217+
#define libnvmf_discovery_args_lsp_set libnvmf_discovery_args_set_lsp
218+
219+
/* struct libnvmf_uri */
220+
#define libnvmf_uri_scheme_get libnvmf_uri_get_scheme
221+
#define libnvmf_uri_protocol_get libnvmf_uri_get_protocol
222+
#define libnvmf_uri_userinfo_get libnvmf_uri_get_userinfo
223+
#define libnvmf_uri_host_get libnvmf_uri_get_host
224+
#define libnvmf_uri_port_get libnvmf_uri_get_port
225+
#define libnvmf_uri_path_segments_get libnvmf_uri_get_path_segments
226+
#define libnvmf_uri_query_get libnvmf_uri_get_query
227+
#define libnvmf_uri_fragment_get libnvmf_uri_get_fragment
228+
#define libnvmf_uri_scheme_set libnvmf_uri_set_scheme
229+
#define libnvmf_uri_protocol_set libnvmf_uri_set_protocol
230+
#define libnvmf_uri_userinfo_set libnvmf_uri_set_userinfo
231+
#define libnvmf_uri_host_set libnvmf_uri_set_host
232+
#define libnvmf_uri_port_set libnvmf_uri_set_port
233+
#define libnvmf_uri_path_segments_set libnvmf_uri_set_path_segments
234+
#define libnvmf_uri_query_set libnvmf_uri_set_query
235+
#define libnvmf_uri_fragment_set libnvmf_uri_set_fragment
236+
237+
%}

0 commit comments

Comments
 (0)