sdfgen 0.16.1__cp311-cp311-musllinux_1_2_x86_64.whl → 0.18.0__cp311-cp311-musllinux_1_2_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
libcsdfgen.so CHANGED
Binary file
libcsdfgen.so.0 CHANGED
Binary file
libcsdfgen.so.0.18.0 ADDED
Binary file
sdfgen/module.py CHANGED
@@ -2,11 +2,12 @@ from __future__ import annotations
2
2
  import ctypes
3
3
  import importlib.util
4
4
  from ctypes import (
5
- cast, c_void_p, c_char_p, c_uint8, c_uint16, c_uint32, c_uint64, c_bool, POINTER, byref
5
+ cast, c_void_p, c_char_p, c_uint8, c_uint16, c_uint32, c_uint64, c_bool, POINTER, byref, pointer
6
6
  )
7
7
  from typing import Optional, List, Tuple
8
8
  from enum import IntEnum
9
9
 
10
+
10
11
  class SddfStatus(IntEnum):
11
12
  OK = 0,
12
13
  DUPLICATE_CLIENT = 1,
@@ -14,6 +15,7 @@ class SddfStatus(IntEnum):
14
15
  NET_DUPLICATE_COPIER = 100,
15
16
  NET_DUPLICATE_MAC_ADDR = 101,
16
17
 
18
+
17
19
  # TOOD: double check
18
20
  MapPermsType = c_uint32
19
21
 
@@ -58,7 +60,15 @@ libsdfgen.sdfgen_render.restype = c_char_p
58
60
  libsdfgen.sdfgen_render.argtypes = [c_void_p]
59
61
 
60
62
  libsdfgen.sdfgen_channel_create.restype = c_void_p
61
- libsdfgen.sdfgen_channel_create.argtypes = [c_void_p, c_void_p]
63
+ libsdfgen.sdfgen_channel_create.argtypes = [
64
+ c_void_p,
65
+ c_void_p,
66
+ POINTER(c_uint8),
67
+ POINTER(c_uint8),
68
+ POINTER(c_bool),
69
+ POINTER(c_bool),
70
+ POINTER(c_uint8),
71
+ ]
62
72
  libsdfgen.sdfgen_channel_destroy.restype = None
63
73
  libsdfgen.sdfgen_channel_destroy.argtypes = [c_void_p]
64
74
  libsdfgen.sdfgen_channel_get_pd_a_id.restype = c_uint8
@@ -75,6 +85,9 @@ libsdfgen.sdfgen_mr_create.restype = c_void_p
75
85
  libsdfgen.sdfgen_mr_create.argtypes = [c_char_p, c_uint64]
76
86
  libsdfgen.sdfgen_mr_create_physical.restype = c_void_p
77
87
  libsdfgen.sdfgen_mr_create_physical.argtypes = [c_char_p, c_uint64, c_uint64]
88
+ libsdfgen.sdfgen_mr_get_paddr.restype = c_bool;
89
+ libsdfgen.sdfgen_mr_get_paddr.argtypes = [c_void_p, POINTER(c_uint64)]
90
+
78
91
  libsdfgen.sdfgen_mr_destroy.restype = None
79
92
  libsdfgen.sdfgen_mr_destroy.argtypes = [c_void_p]
80
93
 
@@ -88,6 +101,9 @@ libsdfgen.sdfgen_vm_create.argtypes = [c_char_p, POINTER(c_void_p), c_uint32]
88
101
  libsdfgen.sdfgen_vm_destroy.restype = None
89
102
  libsdfgen.sdfgen_vm_destroy.argtypes = [c_void_p]
90
103
 
104
+ libsdfgen.sdfgen_vm_set_priority.restype = None
105
+ libsdfgen.sdfgen_vm_set_priority.argtypes = [c_void_p, c_uint8]
106
+
91
107
  libsdfgen.sdfgen_vm_add_map.restype = None
92
108
  libsdfgen.sdfgen_vm_add_map.argtypes = [c_void_p, c_void_p]
93
109
 
@@ -196,15 +212,40 @@ libsdfgen.sdfgen_sddf_gpu_serialise_config.restype = c_bool
196
212
  libsdfgen.sdfgen_sddf_gpu_serialise_config.argtypes = [c_void_p, c_char_p]
197
213
 
198
214
  libsdfgen.sdfgen_vmm.restype = c_void_p
199
- libsdfgen.sdfgen_vmm.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_uint64, c_bool]
215
+ libsdfgen.sdfgen_vmm.argtypes = [
216
+ c_void_p,
217
+ c_void_p,
218
+ c_void_p,
219
+ c_void_p,
220
+ c_uint64,
221
+ c_bool
222
+ ]
200
223
  libsdfgen.sdfgen_vmm_add_passthrough_device.restype = c_bool
201
- libsdfgen.sdfgen_vmm_add_passthrough_device.argtypes = [c_void_p, c_char_p, c_void_p, POINTER(c_uint8), c_uint8]
224
+ libsdfgen.sdfgen_vmm_add_passthrough_device.argtypes = [
225
+ c_void_p,
226
+ c_void_p,
227
+ ]
228
+ libsdfgen.sdfgen_vmm_add_passthrough_device_regions.restype = c_bool
229
+ libsdfgen.sdfgen_vmm_add_passthrough_device_regions.argtypes = [
230
+ c_void_p,
231
+ c_void_p,
232
+ POINTER(c_uint8),
233
+ c_uint8,
234
+ ]
235
+ libsdfgen.sdfgen_vmm_add_passthrough_device_irqs.argtypes = [
236
+ c_void_p,
237
+ c_void_p,
238
+ POINTER(c_uint8),
239
+ c_uint8,
240
+ ]
202
241
  libsdfgen.sdfgen_vmm_add_passthrough_irq.restype = c_bool
203
242
  libsdfgen.sdfgen_vmm_add_passthrough_irq.argtypes = [c_void_p, c_void_p]
204
243
  libsdfgen.sdfgen_vmm_add_virtio_mmio_console.restype = c_bool
205
244
  libsdfgen.sdfgen_vmm_add_virtio_mmio_console.argtypes = [c_void_p, c_void_p, c_void_p]
206
245
  libsdfgen.sdfgen_vmm_add_virtio_mmio_blk.restype = c_bool
207
246
  libsdfgen.sdfgen_vmm_add_virtio_mmio_blk.argtypes = [c_void_p, c_void_p, c_void_p, c_uint32]
247
+ libsdfgen.sdfgen_vmm_add_virtio_mmio_net.restype = c_bool
248
+ libsdfgen.sdfgen_vmm_add_virtio_mmio_net.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_char_p]
208
249
  libsdfgen.sdfgen_vmm_connect.restype = c_bool
209
250
  libsdfgen.sdfgen_vmm_connect.argtypes = [c_void_p]
210
251
  libsdfgen.sdfgen_vmm_serialise_config.restype = c_bool
@@ -217,7 +258,18 @@ libsdfgen.sdfgen_lionsos_fs_fat_connect.argtypes = [c_void_p]
217
258
  libsdfgen.sdfgen_lionsos_fs_fat_serialise_config.restype = c_bool
218
259
  libsdfgen.sdfgen_lionsos_fs_fat_serialise_config.argtypes = [c_void_p, c_char_p]
219
260
  libsdfgen.sdfgen_lionsos_fs_nfs.restype = c_void_p
220
- libsdfgen.sdfgen_lionsos_fs_nfs.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p, c_char_p, c_void_p, c_void_p, c_char_p, c_char_p]
261
+ libsdfgen.sdfgen_lionsos_fs_nfs.argtypes = [
262
+ c_void_p,
263
+ c_void_p,
264
+ c_void_p,
265
+ c_void_p,
266
+ c_void_p,
267
+ c_char_p,
268
+ c_void_p,
269
+ c_void_p,
270
+ c_char_p,
271
+ c_char_p
272
+ ]
221
273
  libsdfgen.sdfgen_lionsos_fs_nfs_connect.restype = c_bool
222
274
  libsdfgen.sdfgen_lionsos_fs_nfs_connect.argtypes = [c_void_p]
223
275
  libsdfgen.sdfgen_lionsos_fs_nfs_serialise_config.restype = c_bool
@@ -230,6 +282,28 @@ libsdfgen.sdfgen_sddf_lwip_connect.argtypes = [c_void_p]
230
282
  libsdfgen.sdfgen_sddf_lwip_serialise_config.restype = c_bool
231
283
  libsdfgen.sdfgen_sddf_lwip_serialise_config.argtypes = [c_void_p, c_char_p]
232
284
 
285
+ def ffi_uint8_ptr(n: Optional[int]):
286
+ """
287
+ Convert an int value to a uint8_t pointer for FFI.
288
+ If 'n' is None then we return None (which acts as a null pointer)
289
+ """
290
+ if n is None:
291
+ return None
292
+
293
+ return pointer(c_uint8(n))
294
+
295
+
296
+ def ffi_bool_ptr(val: Optional[bool]):
297
+ """
298
+ Convert a bool value to a bool pointer for FFI.
299
+ If 'val' is None then we return None (which acts as a null pointer)
300
+ """
301
+ if val is None:
302
+ return None
303
+
304
+ return pointer(c_bool(val))
305
+
306
+
233
307
  class DeviceTree:
234
308
  """
235
309
  This class exists to allow other layers to be generic to boards or architectures
@@ -367,7 +441,7 @@ class SystemDescription:
367
441
  def add_map(self, map: SystemDescription.Map):
368
442
  libsdfgen.sdfgen_pd_add_map(self._obj, map._obj)
369
443
 
370
- def add_irq(self, map: SystemDescription.Irq) -> int:
444
+ def add_irq(self, irq: SystemDescription.Irq) -> int:
371
445
  return libsdfgen.sdfgen_pd_add_irq(self._obj, irq._obj)
372
446
 
373
447
  def set_virtual_machine(self, vm: SystemDescription.VirtualMachine):
@@ -381,8 +455,8 @@ class SystemDescription:
381
455
  def __repr__(self) -> str:
382
456
  return f"ProtectionDomain({self.name})"
383
457
 
384
- # TODO: __del__ is more complicated for virtual machine since it may be owned by a protection domain
385
- # meaning it would result in a double free
458
+ # TODO: __del__ is more complicated for virtual machine since it may be owned
459
+ # by a protection domain meaning it would result in a double free
386
460
  class VirtualMachine:
387
461
  _name: str
388
462
  _obj: c_void_p
@@ -392,12 +466,14 @@ class SystemDescription:
392
466
  # TODO: error checking
393
467
  self._obj = libsdfgen.sdfgen_vm_vcpu_create(id, cpu)
394
468
 
395
- def __init__(self, name: str, vcpus: List[Vcpu]):
469
+ def __init__(self, name: str, vcpus: List[Vcpu], priority: Optional[int] = None):
396
470
  vcpus_tuple: Tuple[c_void_p] = tuple([vcpu._obj for vcpu in vcpus])
397
471
  c_vcpus = (c_void_p * len(vcpus))(*vcpus_tuple)
398
472
  c_name = c_char_p(name.encode("utf-8"))
399
473
  self._name = name
400
474
  self._obj = libsdfgen.sdfgen_vm_create(c_name, cast(c_vcpus, POINTER(c_void_p)), len(vcpus))
475
+ if priority is not None:
476
+ libsdfgen.sdfgen_vm_set_priority(self._obj, priority)
401
477
 
402
478
  @property
403
479
  def name(self) -> str:
@@ -456,6 +532,15 @@ class SystemDescription:
456
532
  else:
457
533
  self._obj = libsdfgen.sdfgen_mr_create(c_name, size)
458
534
 
535
+ @property
536
+ def paddr(self):
537
+ paddr = c_uint64(0)
538
+ has_paddr = libsdfgen.sdfgen_mr_get_paddr(self._obj, pointer(paddr))
539
+ if has_paddr:
540
+ return paddr
541
+ else:
542
+ return None
543
+
459
544
  def __del__(self):
460
545
  libsdfgen.sdfgen_mr_destroy(self._obj)
461
546
 
@@ -475,18 +560,36 @@ class SystemDescription:
475
560
  class Channel:
476
561
  _obj: c_void_p
477
562
 
478
- # TODO: handle options
479
563
  def __init__(
480
564
  self,
481
565
  a: SystemDescription.ProtectionDomain,
482
566
  b: SystemDescription.ProtectionDomain,
483
567
  *,
484
- pp_a=False,
485
- pp_b=False,
486
- notify_a=True,
487
- notify_b=True
568
+ a_id: Optional[int] = None,
569
+ b_id: Optional[int] = None,
570
+ pp_a: Optional[bool] = None,
571
+ pp_b: Optional[bool] = None,
572
+ notify_a: Optional[bool] = None,
573
+ notify_b: Optional[bool] = None,
488
574
  ) -> None:
489
- self._obj = libsdfgen.sdfgen_channel_create(a._obj, b._obj)
575
+ c_pp = None
576
+ if pp_a is not None:
577
+ c_pp = 0
578
+ elif pp_b is not None:
579
+ c_pp = 1
580
+
581
+ if pp_a is not None and pp_b is not None:
582
+ raise Exception("attempting to create channel with PP on both ends")
583
+
584
+ self._obj = libsdfgen.sdfgen_channel_create(
585
+ a._obj,
586
+ b._obj,
587
+ ffi_uint8_ptr(a_id),
588
+ ffi_uint8_ptr(b_id),
589
+ ffi_bool_ptr(notify_a),
590
+ ffi_bool_ptr(notify_b),
591
+ ffi_uint8_ptr(c_pp),
592
+ )
490
593
 
491
594
  @property
492
595
  def pd_a_id(self) -> int:
@@ -713,7 +816,9 @@ class Sddf:
713
816
  :param mac_addr: must be unique to the Network system.
714
817
  """
715
818
  if mac_addr is not None and len(mac_addr) != 17:
716
- raise Exception(f"invalid MAC address length for client '{client.name}', {mac_addr}")
819
+ raise Exception(
820
+ f"invalid MAC address length for client '{client.name}', {mac_addr}"
821
+ )
717
822
 
718
823
  c_mac_addr = c_char_p(0)
719
824
  if mac_addr is not None:
@@ -818,45 +923,74 @@ class Sddf:
818
923
 
819
924
  def __del__(self):
820
925
  libsdfgen.sdfgen_sddf_gpu_destroy(self._obj)
821
-
926
+
822
927
  class Lwip:
823
928
  _obj: c_void_p
824
929
 
825
930
  def __init__(
826
931
  self,
827
932
  sdf: SystemDescription,
828
- net: Net,
829
- pd: ProtectionDomain
933
+ net: Sddf.Net,
934
+ pd: SystemDescription.ProtectionDomain
830
935
  ) -> None:
831
936
  self._obj = libsdfgen.sdfgen_sddf_lwip(sdf._obj, net._obj, pd._obj)
832
-
937
+
833
938
  def connect(self) -> bool:
834
939
  return libsdfgen.sdfgen_sddf_lwip_connect(self._obj)
835
-
940
+
836
941
  def serialise_config(self, output_dir: str) -> bool:
837
942
  c_output_dir = c_char_p(output_dir.encode("utf-8"))
838
943
  return libsdfgen.sdfgen_sddf_lwip_serialise_config(self._obj, c_output_dir)
839
944
 
945
+
840
946
  class Vmm:
841
947
  _obj: c_void_p
842
948
 
843
949
  def __init__(
844
950
  self,
845
951
  sdf: SystemDescription,
846
- vmm: ProtectionDomain,
847
- vm: VirtualMachine,
952
+ vmm: SystemDescription.ProtectionDomain,
953
+ vm: SystemDescription.VirtualMachine,
848
954
  dtb: DeviceTree,
849
955
  *,
850
- one_to_one_ram: bool=False,
956
+ one_to_one_ram: bool = False,
851
957
  ):
852
958
  self._obj = libsdfgen.sdfgen_vmm(sdf._obj, vmm._obj, vm._obj, dtb._obj, dtb.size, one_to_one_ram)
853
959
 
854
- def add_passthrough_device(self, name: str, device: DeviceTree.Node, *, irqs: List[int]=[]):
855
- c_name = c_char_p(name.encode("utf-8"))
856
- c_irqs = (c_uint8 * len(irqs))(*irqs)
857
- return libsdfgen.sdfgen_vmm_add_passthrough_device(self._obj, c_name, device._obj, cast(c_irqs, POINTER(c_uint8)), len(irqs))
858
-
859
- def add_passthrough_irq(self, irq: Irq):
960
+ def add_passthrough_device(
961
+ self,
962
+ device: DeviceTree.Node,
963
+ *,
964
+ regions: Optional[List[int]] = None,
965
+ irqs: Optional[List[int]] = None
966
+ ):
967
+ """
968
+ Add pass-through access to a particular device based on its DTB node.
969
+ :param regions: list of indices into the 'reg' field of the device to be mapped in. If None
970
+ then every region passed through.
971
+ :param irqs: list of indices into the 'interrupts' field of the device to be created. If None
972
+ then every IRQ is passed through.
973
+ """
974
+ if regions is None and irqs is None:
975
+ # If the user passed None, that means we need to map everything in
976
+ return libsdfgen.sdfgen_vmm_add_passthrough_device(self._obj, device._obj)
977
+ elif irqs is not None:
978
+ # Pass through specific IRQs, all regions
979
+ c_irqs = cast((c_uint8 * len(irqs))(*irqs), POINTER(c_uint8))
980
+ irqs_len = len(irqs)
981
+ ret = libsdfgen.sdfgen_vmm_add_passthrough_device_irqs(self._obj, device._obj, c_irqs, irqs_len)
982
+ ret = libsdfgen.sdfgen_vmm_add_passthrough_device_regions(self._obj, device._obj, None, 0)
983
+ elif regions is not None:
984
+ # Pass through specific regions, all IRQs
985
+ c_regions = cast((c_uint8 * len(regions))(*regions), POINTER(c_uint8))
986
+ regions_len = len(regions)
987
+ ret = libsdfgen.sdfgen_vmm_add_passthrough_device_regions(self._obj, device._obj, c_regions, regions_len)
988
+ ret = libsdfgen.sdfgen_vmm_add_passthrough_device_irqs(self._obj, device._obj, None, 0)
989
+ else:
990
+ # unreachable case
991
+ raise Exception("internal error")
992
+
993
+ def add_passthrough_irq(self, irq: SystemDescription.Irq):
860
994
  return libsdfgen.sdfgen_vmm_add_passthrough_irq(self._obj, irq._obj)
861
995
 
862
996
  def add_virtio_mmio_console(self, device: DeviceTree.Node, serial: Sddf.Serial):
@@ -865,8 +999,24 @@ class Vmm:
865
999
  def add_virtio_mmio_blk(self, device: DeviceTree.Node, blk: Sddf.Blk, *, partition: int):
866
1000
  return libsdfgen.sdfgen_vmm_add_virtio_mmio_blk(self._obj, device._obj, blk._obj, partition)
867
1001
 
868
- # def add_virtio_net(self, device: DeviceTree.Node, net: Sddf.Net, *, copier: ProtectionDomain=None):
869
- # return libsdfgen.sdfgen_vmm_add_virtio_blk(self._obj, device._obj, net._obj, partition)
1002
+ def add_virtio_mmio_net(
1003
+ self,
1004
+ device: DeviceTree.Node,
1005
+ net: Sddf.Net,
1006
+ copier: SystemDescription.ProtectionDomain,
1007
+ *,
1008
+ mac_addr: Optional[str] = None
1009
+ ):
1010
+ if mac_addr is not None and len(mac_addr) != 17:
1011
+ raise Exception(
1012
+ f"invalid MAC address length for '{mac_addr}'"
1013
+ )
1014
+
1015
+ c_mac_addr = c_char_p(0)
1016
+ if mac_addr is not None:
1017
+ c_mac_addr = c_char_p(mac_addr.encode("utf-8"))
1018
+
1019
+ return libsdfgen.sdfgen_vmm_add_virtio_mmio_net(self._obj, device._obj, net._obj, copier._obj, c_mac_addr)
870
1020
 
871
1021
  def connect(self) -> bool:
872
1022
  return libsdfgen.sdfgen_vmm_connect(self._obj)
@@ -918,7 +1068,9 @@ class LionsOs:
918
1068
  export_path: str,
919
1069
  ):
920
1070
  if mac_addr is not None and len(mac_addr) != 17:
921
- raise Exception(f"invalid MAC address length for client '{client.name}', {mac_addr}")
1071
+ raise Exception(
1072
+ f"invalid MAC address length for client '{client.name}', {mac_addr}"
1073
+ )
922
1074
 
923
1075
  c_mac_addr = c_char_p(0)
924
1076
  if mac_addr is not None:
@@ -928,7 +1080,18 @@ class LionsOs:
928
1080
  c_server = c_char_p(server.encode("utf-8"))
929
1081
  c_export_path = c_char_p(export_path.encode("utf-8"))
930
1082
 
931
- self._obj = libsdfgen.sdfgen_lionsos_fs_nfs(sdf._obj, fs._obj, client._obj, net._obj, net_copier._obj, c_mac_addr, serial._obj, timer._obj, c_server, c_export_path)
1083
+ self._obj = libsdfgen.sdfgen_lionsos_fs_nfs(
1084
+ sdf._obj,
1085
+ fs._obj,
1086
+ client._obj,
1087
+ net._obj,
1088
+ net_copier._obj,
1089
+ c_mac_addr,
1090
+ serial._obj,
1091
+ timer._obj,
1092
+ c_server,
1093
+ c_export_path
1094
+ )
932
1095
 
933
1096
  def connect(self) -> bool:
934
1097
  return libsdfgen.sdfgen_lionsos_fs_nfs_connect(self._obj)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sdfgen
3
- Version: 0.16.1
3
+ Version: 0.18.0
4
4
  Summary: Automating the creation of Microkit System Description Files (SDF)
5
5
  Home-page: https://github.com/au-ts/microkit_sdf_gen
6
6
  Description-Content-Type: text/markdown
@@ -20,11 +20,13 @@ Microkit-based systems.
20
20
 
21
21
  The sdfgen tooling (name temporary) contains libraries for programmatically
22
22
  creating:
23
+
23
24
  * Microkit System Description Files (SDF)
24
25
  * systems using the seL4 Device Driver Framework (sDDF)
25
26
  * systems using LionsOS
26
27
 
27
28
  It has first-class support for use in the following languages:
29
+
28
30
  * C
29
31
  * Python
30
32
  * Zig
@@ -43,7 +45,7 @@ Pre-built archives of the C library are available in each
43
45
 
44
46
  ### Dependencies
45
47
 
46
- * Zig (`0.14.0-dev.2079+ba2d00663` or higher)
48
+ * Zig (`0.14.0-dev.3050+d72f3d353` or higher)
47
49
  * See https://ziglang.org/download/, until 0.14.0 is released we rely on a
48
50
  master version of Zig. Once 0.14.0 is released (most likely Feb'25) we can
49
51
  pin to that release.
@@ -0,0 +1,11 @@
1
+ libcsdfgen.so,sha256=JoH_a0adFD5tXxNvQumzVPwXvgC_YGrCQhoA3HeCkpc,4210280
2
+ libcsdfgen.so.0,sha256=JoH_a0adFD5tXxNvQumzVPwXvgC_YGrCQhoA3HeCkpc,4210280
3
+ libcsdfgen.so.0.18.0,sha256=JoH_a0adFD5tXxNvQumzVPwXvgC_YGrCQhoA3HeCkpc,4210280
4
+ csdfgen.cpython-311-x86_64-linux-musl.so,sha256=JoH_a0adFD5tXxNvQumzVPwXvgC_YGrCQhoA3HeCkpc,4210280
5
+ sdfgen/__init__.py,sha256=_d7GGV8GhadIAEYP8uiJlez0yKtXnHMHdRkRzVMKS3c,143
6
+ sdfgen/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ sdfgen/module.py,sha256=lDfOUdrj6Sw-Aw8dxjtNLrsxYa8K1ZNzyuR0rifcVqQ,40387
8
+ sdfgen-0.18.0.dist-info/WHEEL,sha256=-1lvUTC7ROIbUsEGXToEoCN9w6fPmW3brF2b0tYIqSQ,112
9
+ sdfgen-0.18.0.dist-info/METADATA,sha256=MY5Y8cTROZNSB11wPqgmg_wlwChrjSEuFlsj9mFSWWo,4563
10
+ sdfgen-0.18.0.dist-info/top_level.txt,sha256=M3gUW9vTMij10peQKgv1Qs0jZkdsk_PG0REFxuv6jNY,15
11
+ sdfgen-0.18.0.dist-info/RECORD,,
libcsdfgen.so.0.16.1 DELETED
Binary file
@@ -1,11 +0,0 @@
1
- libcsdfgen.so.0.16.1,sha256=fpMduKGSOtlLWLcGMr-BTejl2g3TRnMk9ra0LWPjMvU,4006896
2
- csdfgen.cpython-311-x86_64-linux-musl.so,sha256=fpMduKGSOtlLWLcGMr-BTejl2g3TRnMk9ra0LWPjMvU,4006896
3
- libcsdfgen.so.0,sha256=fpMduKGSOtlLWLcGMr-BTejl2g3TRnMk9ra0LWPjMvU,4006896
4
- libcsdfgen.so,sha256=fpMduKGSOtlLWLcGMr-BTejl2g3TRnMk9ra0LWPjMvU,4006896
5
- sdfgen-0.16.1.dist-info/WHEEL,sha256=-1lvUTC7ROIbUsEGXToEoCN9w6fPmW3brF2b0tYIqSQ,112
6
- sdfgen-0.16.1.dist-info/RECORD,,
7
- sdfgen-0.16.1.dist-info/top_level.txt,sha256=M3gUW9vTMij10peQKgv1Qs0jZkdsk_PG0REFxuv6jNY,15
8
- sdfgen-0.16.1.dist-info/METADATA,sha256=lea7IhT7Prod06tL7HVsH9rB0IotP7XJPPwuKx121Bw,4561
9
- sdfgen/module.py,sha256=cIv7e3k3RUn4JY9oLzK2VJowjp29dwp9bevvOiwnOu4,35769
10
- sdfgen/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- sdfgen/__init__.py,sha256=_d7GGV8GhadIAEYP8uiJlez0yKtXnHMHdRkRzVMKS3c,143