setup_zstd.py
158 lines
| 4.3 KiB
| text/x-python
|
PythonLexer
Gregory Szorc
|
r30435 | # Copyright (c) 2016-present, Gregory Szorc | ||
# All rights reserved. | ||||
# | ||||
# This software may be modified and distributed under the terms | ||||
# of the BSD license. See the LICENSE file for details. | ||||
Gregory Szorc
|
r37513 | import distutils.ccompiler | ||
Gregory Szorc
|
r30435 | import os | ||
Gregory Szorc
|
r37513 | import sys | ||
Gregory Szorc
|
r30435 | from distutils.extension import Extension | ||
zstd_sources = ['zstd/%s' % p for p in ( | ||||
'common/entropy_common.c', | ||||
'common/error_private.c', | ||||
'common/fse_decompress.c', | ||||
Gregory Szorc
|
r30895 | 'common/pool.c', | ||
'common/threading.c', | ||||
Gregory Szorc
|
r30435 | 'common/xxhash.c', | ||
'common/zstd_common.c', | ||||
'compress/fse_compress.c', | ||||
'compress/huf_compress.c', | ||||
'compress/zstd_compress.c', | ||||
Gregory Szorc
|
r37513 | 'compress/zstd_double_fast.c', | ||
'compress/zstd_fast.c', | ||||
'compress/zstd_lazy.c', | ||||
'compress/zstd_ldm.c', | ||||
'compress/zstd_opt.c', | ||||
Gregory Szorc
|
r31796 | 'compress/zstdmt_compress.c', | ||
Gregory Szorc
|
r30435 | 'decompress/huf_decompress.c', | ||
'decompress/zstd_decompress.c', | ||||
Gregory Szorc
|
r30895 | 'dictBuilder/cover.c', | ||
Gregory Szorc
|
r30435 | 'dictBuilder/divsufsort.c', | ||
'dictBuilder/zdict.c', | ||||
)] | ||||
Gregory Szorc
|
r30822 | zstd_sources_legacy = ['zstd/%s' % p for p in ( | ||
Gregory Szorc
|
r30895 | 'deprecated/zbuff_common.c', | ||
Gregory Szorc
|
r30822 | 'deprecated/zbuff_compress.c', | ||
'deprecated/zbuff_decompress.c', | ||||
'legacy/zstd_v01.c', | ||||
'legacy/zstd_v02.c', | ||||
'legacy/zstd_v03.c', | ||||
'legacy/zstd_v04.c', | ||||
'legacy/zstd_v05.c', | ||||
'legacy/zstd_v06.c', | ||||
'legacy/zstd_v07.c' | ||||
)] | ||||
Gregory Szorc
|
r30435 | |||
zstd_includes = [ | ||||
'zstd', | ||||
'zstd/common', | ||||
'zstd/compress', | ||||
'zstd/decompress', | ||||
'zstd/dictBuilder', | ||||
] | ||||
Gregory Szorc
|
r30822 | zstd_includes_legacy = [ | ||
'zstd/deprecated', | ||||
'zstd/legacy', | ||||
] | ||||
Gregory Szorc
|
r37513 | ext_includes = [ | ||
'c-ext', | ||||
'zstd/common', | ||||
] | ||||
Gregory Szorc
|
r30435 | ext_sources = [ | ||
Gregory Szorc
|
r37513 | 'zstd/common/pool.c', | ||
'zstd/common/threading.c', | ||||
Gregory Szorc
|
r30435 | 'zstd.c', | ||
Gregory Szorc
|
r31796 | 'c-ext/bufferutil.c', | ||
Gregory Szorc
|
r30435 | 'c-ext/compressiondict.c', | ||
'c-ext/compressobj.c', | ||||
'c-ext/compressor.c', | ||||
'c-ext/compressoriterator.c', | ||||
'c-ext/compressionparams.c', | ||||
Gregory Szorc
|
r37513 | 'c-ext/compressionreader.c', | ||
Gregory Szorc
|
r30435 | 'c-ext/compressionwriter.c', | ||
'c-ext/constants.c', | ||||
'c-ext/decompressobj.c', | ||||
'c-ext/decompressor.c', | ||||
'c-ext/decompressoriterator.c', | ||||
Gregory Szorc
|
r37513 | 'c-ext/decompressionreader.c', | ||
Gregory Szorc
|
r30435 | 'c-ext/decompressionwriter.c', | ||
Gregory Szorc
|
r30895 | 'c-ext/frameparams.c', | ||
Gregory Szorc
|
r30435 | ] | ||
Gregory Szorc
|
r30822 | zstd_depends = [ | ||
'c-ext/python-zstandard.h', | ||||
] | ||||
Gregory Szorc
|
r30435 | |||
Gregory Szorc
|
r30822 | |||
Gregory Szorc
|
r37513 | def get_c_extension(support_legacy=False, system_zstd=False, name='zstd', | ||
warnings_as_errors=False): | ||||
Gregory Szorc
|
r30435 | """Obtain a distutils.extension.Extension for the C extension.""" | ||
root = os.path.abspath(os.path.dirname(__file__)) | ||||
Gregory Szorc
|
r37513 | sources = set([os.path.join(root, p) for p in ext_sources]) | ||
if not system_zstd: | ||||
sources.update([os.path.join(root, p) for p in zstd_sources]) | ||||
if support_legacy: | ||||
sources.update([os.path.join(root, p) for p in zstd_sources_legacy]) | ||||
sources = list(sources) | ||||
Gregory Szorc
|
r30822 | |||
Gregory Szorc
|
r37513 | include_dirs = set([os.path.join(root, d) for d in ext_includes]) | ||
if not system_zstd: | ||||
include_dirs.update([os.path.join(root, d) for d in zstd_includes]) | ||||
if support_legacy: | ||||
include_dirs.update([os.path.join(root, d) for d in zstd_includes_legacy]) | ||||
include_dirs = list(include_dirs) | ||||
Gregory Szorc
|
r30822 | |||
depends = [os.path.join(root, p) for p in zstd_depends] | ||||
Gregory Szorc
|
r30435 | |||
Gregory Szorc
|
r37513 | compiler = distutils.ccompiler.new_compiler() | ||
# Needed for MSVC. | ||||
if hasattr(compiler, 'initialize'): | ||||
compiler.initialize() | ||||
if compiler.compiler_type == 'unix': | ||||
compiler_type = 'unix' | ||||
elif compiler.compiler_type == 'msvc': | ||||
compiler_type = 'msvc' | ||||
else: | ||||
raise Exception('unhandled compiler type: %s' % | ||||
compiler.compiler_type) | ||||
Gregory Szorc
|
r31796 | extra_args = ['-DZSTD_MULTITHREAD'] | ||
Gregory Szorc
|
r37513 | if not system_zstd: | ||
extra_args.append('-DZSTDLIB_VISIBILITY=') | ||||
extra_args.append('-DZDICTLIB_VISIBILITY=') | ||||
extra_args.append('-DZSTDERRORLIB_VISIBILITY=') | ||||
if compiler_type == 'unix': | ||||
extra_args.append('-fvisibility=hidden') | ||||
if not system_zstd and support_legacy: | ||||
Gregory Szorc
|
r31796 | extra_args.append('-DZSTD_LEGACY_SUPPORT=1') | ||
Gregory Szorc
|
r37513 | if warnings_as_errors: | ||
if compiler_type == 'unix': | ||||
extra_args.append('-Werror') | ||||
elif compiler_type == 'msvc': | ||||
extra_args.append('/WX') | ||||
else: | ||||
assert False | ||||
libraries = ['zstd'] if system_zstd else [] | ||||
Gregory Szorc
|
r30435 | # TODO compile with optimizations. | ||
return Extension(name, sources, | ||||
Gregory Szorc
|
r30822 | include_dirs=include_dirs, | ||
depends=depends, | ||||
Gregory Szorc
|
r37513 | extra_compile_args=extra_args, | ||
libraries=libraries) | ||||