6
6
from Cython .Distutils .build_ext import new_build_ext as build_ext
7
7
from setuptools import Extension , setup
8
8
from setuptools .errors import CCompilerError , ExecError , PlatformError
9
+ from distutils import ccompiler
10
+ from distutils .command .clean import clean
9
11
10
12
# determine CPU support for SSE2 and AVX2
11
13
cpu_info = cpuinfo .get_cpu_info ()
@@ -71,6 +73,8 @@ def blosc_extension():
71
73
if os .path .isdir (d )]
72
74
include_dirs += [d for d in glob ('c-blosc/internal-complibs/*/*/*' )
73
75
if os .path .isdir (d )]
76
+ # remove minizip because Python.h 3.8 tries to include crypt.h
77
+ include_dirs = [d for d in include_dirs if 'minizip' not in d ]
74
78
define_macros += [('HAVE_LZ4' , 1 ),
75
79
# ('HAVE_SNAPPY', 1),
76
80
('HAVE_ZLIB' , 1 ),
@@ -97,6 +101,15 @@ def blosc_extension():
97
101
else :
98
102
info ('compiling Blosc extension without AVX2 support' )
99
103
104
+ # include assembly files
105
+ if cpuinfo .platform .machine () == 'x86_64' :
106
+ extra_objects = [
107
+ S [:- 1 ] + 'o'
108
+ for S in glob ("c-blosc/internal-complibs/zstd*/decompress/*amd64.S" )
109
+ ]
110
+ else :
111
+ extra_objects = []
112
+
100
113
sources = ['numcodecs/blosc.pyx' ]
101
114
102
115
# define extension module
@@ -106,6 +119,7 @@ def blosc_extension():
106
119
include_dirs = include_dirs ,
107
120
define_macros = define_macros ,
108
121
extra_compile_args = extra_compile_args ,
122
+ extra_objects = extra_objects ,
109
123
),
110
124
]
111
125
@@ -133,13 +147,23 @@ def zstd_extension():
133
147
134
148
sources = ['numcodecs/zstd.pyx' ]
135
149
150
+ # include assembly files
151
+ if cpuinfo .platform .machine () == 'x86_64' :
152
+ extra_objects = [
153
+ S [:- 1 ] + 'o'
154
+ for S in glob ("c-blosc/internal-complibs/zstd*/decompress/*amd64.S" )
155
+ ]
156
+ else :
157
+ extra_objects = []
158
+
136
159
# define extension module
137
160
extensions = [
138
161
Extension ('numcodecs.zstd' ,
139
162
sources = sources + zstd_sources ,
140
163
include_dirs = include_dirs ,
141
164
define_macros = define_macros ,
142
165
extra_compile_args = extra_compile_args ,
166
+ extra_objects = extra_objects ,
143
167
),
144
168
]
145
169
@@ -298,6 +322,12 @@ class ve_build_ext(build_ext):
298
322
299
323
def run (self ):
300
324
try :
325
+ if cpuinfo .platform .machine () == 'x86_64' :
326
+ S_files = glob ('c-blosc/internal-complibs/zstd*/decompress/*amd64.S' )
327
+ compiler = ccompiler .new_compiler ()
328
+ compiler .src_extensions .append ('.S' )
329
+ compiler .compile (S_files )
330
+
301
331
build_ext .run (self )
302
332
except PlatformError as e :
303
333
error (e )
@@ -311,14 +341,26 @@ def build_extension(self, ext):
311
341
raise BuildFailed ()
312
342
313
343
344
+ class Sclean (clean ):
345
+ # Clean up .o files created by .S files
346
+
347
+ def run (self ):
348
+ if cpuinfo .platform .machine () == 'x86_64' :
349
+ o_files = glob ('c-blosc/internal-complibs/zstd*/decompress/*amd64.o' )
350
+ for f in o_files :
351
+ os .remove (f )
352
+
353
+ clean .run (self )
354
+
355
+
314
356
def run_setup (with_extensions ):
315
357
316
358
if with_extensions :
317
359
ext_modules = (blosc_extension () + zstd_extension () + lz4_extension () +
318
360
compat_extension () + shuffle_extension () + vlen_extension () +
319
361
fletcher_extension () + jenkins_extension ())
320
362
321
- cmdclass = dict (build_ext = ve_build_ext )
363
+ cmdclass = dict (build_ext = ve_build_ext , clean = Sclean )
322
364
else :
323
365
ext_modules = []
324
366
cmdclass = {}
0 commit comments