17 'common/xxhash.c', |
20 'common/xxhash.c', |
18 'common/zstd_common.c', |
21 'common/zstd_common.c', |
19 'compress/fse_compress.c', |
22 'compress/fse_compress.c', |
20 'compress/huf_compress.c', |
23 'compress/huf_compress.c', |
21 'compress/zstd_compress.c', |
24 'compress/zstd_compress.c', |
|
25 'compress/zstd_double_fast.c', |
|
26 'compress/zstd_fast.c', |
|
27 'compress/zstd_lazy.c', |
|
28 'compress/zstd_ldm.c', |
|
29 'compress/zstd_opt.c', |
22 'compress/zstdmt_compress.c', |
30 'compress/zstdmt_compress.c', |
23 'decompress/huf_decompress.c', |
31 'decompress/huf_decompress.c', |
24 'decompress/zstd_decompress.c', |
32 'decompress/zstd_decompress.c', |
25 'dictBuilder/cover.c', |
33 'dictBuilder/cover.c', |
26 'dictBuilder/divsufsort.c', |
34 'dictBuilder/divsufsort.c', |
52 zstd_includes_legacy = [ |
59 zstd_includes_legacy = [ |
53 'zstd/deprecated', |
60 'zstd/deprecated', |
54 'zstd/legacy', |
61 'zstd/legacy', |
55 ] |
62 ] |
56 |
63 |
|
64 ext_includes = [ |
|
65 'c-ext', |
|
66 'zstd/common', |
|
67 ] |
|
68 |
57 ext_sources = [ |
69 ext_sources = [ |
|
70 'zstd/common/pool.c', |
|
71 'zstd/common/threading.c', |
58 'zstd.c', |
72 'zstd.c', |
59 'c-ext/bufferutil.c', |
73 'c-ext/bufferutil.c', |
60 'c-ext/compressiondict.c', |
74 'c-ext/compressiondict.c', |
61 'c-ext/compressobj.c', |
75 'c-ext/compressobj.c', |
62 'c-ext/compressor.c', |
76 'c-ext/compressor.c', |
63 'c-ext/compressoriterator.c', |
77 'c-ext/compressoriterator.c', |
64 'c-ext/compressionparams.c', |
78 'c-ext/compressionparams.c', |
|
79 'c-ext/compressionreader.c', |
65 'c-ext/compressionwriter.c', |
80 'c-ext/compressionwriter.c', |
66 'c-ext/constants.c', |
81 'c-ext/constants.c', |
67 'c-ext/decompressobj.c', |
82 'c-ext/decompressobj.c', |
68 'c-ext/decompressor.c', |
83 'c-ext/decompressor.c', |
69 'c-ext/decompressoriterator.c', |
84 'c-ext/decompressoriterator.c', |
|
85 'c-ext/decompressionreader.c', |
70 'c-ext/decompressionwriter.c', |
86 'c-ext/decompressionwriter.c', |
71 'c-ext/frameparams.c', |
87 'c-ext/frameparams.c', |
72 ] |
88 ] |
73 |
89 |
74 zstd_depends = [ |
90 zstd_depends = [ |
75 'c-ext/python-zstandard.h', |
91 'c-ext/python-zstandard.h', |
76 ] |
92 ] |
77 |
93 |
78 |
94 |
79 def get_c_extension(support_legacy=False, name='zstd'): |
95 def get_c_extension(support_legacy=False, system_zstd=False, name='zstd', |
|
96 warnings_as_errors=False): |
80 """Obtain a distutils.extension.Extension for the C extension.""" |
97 """Obtain a distutils.extension.Extension for the C extension.""" |
81 root = os.path.abspath(os.path.dirname(__file__)) |
98 root = os.path.abspath(os.path.dirname(__file__)) |
82 |
99 |
83 sources = [os.path.join(root, p) for p in zstd_sources + ext_sources] |
100 sources = set([os.path.join(root, p) for p in ext_sources]) |
84 if support_legacy: |
101 if not system_zstd: |
85 sources.extend([os.path.join(root, p) for p in zstd_sources_legacy]) |
102 sources.update([os.path.join(root, p) for p in zstd_sources]) |
|
103 if support_legacy: |
|
104 sources.update([os.path.join(root, p) for p in zstd_sources_legacy]) |
|
105 sources = list(sources) |
86 |
106 |
87 include_dirs = [os.path.join(root, d) for d in zstd_includes] |
107 include_dirs = set([os.path.join(root, d) for d in ext_includes]) |
88 if support_legacy: |
108 if not system_zstd: |
89 include_dirs.extend([os.path.join(root, d) for d in zstd_includes_legacy]) |
109 include_dirs.update([os.path.join(root, d) for d in zstd_includes]) |
|
110 if support_legacy: |
|
111 include_dirs.update([os.path.join(root, d) for d in zstd_includes_legacy]) |
|
112 include_dirs = list(include_dirs) |
90 |
113 |
91 depends = [os.path.join(root, p) for p in zstd_depends] |
114 depends = [os.path.join(root, p) for p in zstd_depends] |
92 |
115 |
|
116 compiler = distutils.ccompiler.new_compiler() |
|
117 |
|
118 # Needed for MSVC. |
|
119 if hasattr(compiler, 'initialize'): |
|
120 compiler.initialize() |
|
121 |
|
122 if compiler.compiler_type == 'unix': |
|
123 compiler_type = 'unix' |
|
124 elif compiler.compiler_type == 'msvc': |
|
125 compiler_type = 'msvc' |
|
126 else: |
|
127 raise Exception('unhandled compiler type: %s' % |
|
128 compiler.compiler_type) |
|
129 |
93 extra_args = ['-DZSTD_MULTITHREAD'] |
130 extra_args = ['-DZSTD_MULTITHREAD'] |
94 |
131 |
95 if support_legacy: |
132 if not system_zstd: |
|
133 extra_args.append('-DZSTDLIB_VISIBILITY=') |
|
134 extra_args.append('-DZDICTLIB_VISIBILITY=') |
|
135 extra_args.append('-DZSTDERRORLIB_VISIBILITY=') |
|
136 |
|
137 if compiler_type == 'unix': |
|
138 extra_args.append('-fvisibility=hidden') |
|
139 |
|
140 if not system_zstd and support_legacy: |
96 extra_args.append('-DZSTD_LEGACY_SUPPORT=1') |
141 extra_args.append('-DZSTD_LEGACY_SUPPORT=1') |
|
142 |
|
143 if warnings_as_errors: |
|
144 if compiler_type == 'unix': |
|
145 extra_args.append('-Werror') |
|
146 elif compiler_type == 'msvc': |
|
147 extra_args.append('/WX') |
|
148 else: |
|
149 assert False |
|
150 |
|
151 libraries = ['zstd'] if system_zstd else [] |
97 |
152 |
98 # TODO compile with optimizations. |
153 # TODO compile with optimizations. |
99 return Extension(name, sources, |
154 return Extension(name, sources, |
100 include_dirs=include_dirs, |
155 include_dirs=include_dirs, |
101 depends=depends, |
156 depends=depends, |
102 extra_compile_args=extra_args) |
157 extra_compile_args=extra_args, |
|
158 libraries=libraries) |