From d85a11d259d1fbc466d7a783b094856a08c1f0a4 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sat, 16 Mar 2019 00:17:41 -0400 Subject: [PATCH 1/5] Unbundle blosc Signed-off-by: Elliott Sales de Andrade --- MANIFEST.in | 1 - setup.py | 61 ++++++++++++++--------------------------------------- 2 files changed, 16 insertions(+), 46 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 41513ec..ef51486 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,3 @@ -recursive-include c-blosc * recursive-include numcodecs *.pyx recursive-include numcodecs *.pxd include numcodecs/tests/package_with_entrypoint-0.1.dist-info/entry_points.txt diff --git a/setup.py b/setup.py index f07cf8d..e173950 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,8 @@ import os +import shlex +import subprocess import sys +from collections import namedtuple from glob import glob import cpuinfo @@ -46,6 +49,15 @@ def error(*msg): print('[numcodecs]', *msg, **kwargs) +Package = namedtuple('Package', 'cflags libs') + + +def pkgconfig(name): + cflags = os.fsdecode(subprocess.check_output(['pkg-config', '--cflags', name])) + libs = os.fsdecode(subprocess.check_output(['pkg-config', '--libs', name])) + return Package(shlex.split(cflags), shlex.split(libs)) + + def blosc_extension(): info('setting up Blosc extension') @@ -53,59 +65,18 @@ def blosc_extension(): define_macros = [] # setup blosc sources - blosc_sources = [f for f in glob('c-blosc/blosc/*.c') - if 'avx2' not in f and 'sse2' not in f] - include_dirs = [os.path.join('c-blosc', 'blosc')] - - # add internal complibs - blosc_sources += glob('c-blosc/internal-complibs/lz4*/*.c') - blosc_sources += glob('c-blosc/internal-complibs/snappy*/*.cc') - blosc_sources += glob('c-blosc/internal-complibs/zlib*/*.c') - blosc_sources += glob('c-blosc/internal-complibs/zstd*/common/*.c') - blosc_sources += glob('c-blosc/internal-complibs/zstd*/compress/*.c') - blosc_sources += glob('c-blosc/internal-complibs/zstd*/decompress/*.c') - blosc_sources += glob('c-blosc/internal-complibs/zstd*/dictBuilder/*.c') - include_dirs += [d for d in glob('c-blosc/internal-complibs/*') - if os.path.isdir(d)] - include_dirs += [d for d in glob('c-blosc/internal-complibs/*/*') - if os.path.isdir(d)] - include_dirs += [d for d in glob('c-blosc/internal-complibs/*/*/*') - if os.path.isdir(d)] - define_macros += [('HAVE_LZ4', 1), - # ('HAVE_SNAPPY', 1), - ('HAVE_ZLIB', 1), - ('HAVE_ZSTD', 1)] - # define_macros += [('CYTHON_TRACE', '1')] - - # SSE2 - if have_sse2 and not disable_sse2: - info('compiling Blosc extension with SSE2 support') - extra_compile_args.append('-DSHUFFLE_SSE2_ENABLED') - blosc_sources += [f for f in glob('c-blosc/blosc/*.c') if 'sse2' in f] - if os.name == 'nt': - define_macros += [('__SSE2__', 1)] - else: - info('compiling Blosc extension without SSE2 support') - - # AVX2 - if have_avx2 and not disable_avx2: - info('compiling Blosc extension with AVX2 support') - extra_compile_args.append('-DSHUFFLE_AVX2_ENABLED') - blosc_sources += [f for f in glob('c-blosc/blosc/*.c') if 'avx2' in f] - if os.name == 'nt': - define_macros += [('__AVX2__', 1)] - else: - info('compiling Blosc extension without AVX2 support') + blosc = pkgconfig('blosc') + extra_compile_args += blosc.cflags sources = ['numcodecs/blosc.pyx'] # define extension module extensions = [ Extension('numcodecs.blosc', - sources=sources + blosc_sources, - include_dirs=include_dirs, + sources=sources, define_macros=define_macros, extra_compile_args=extra_compile_args, + extra_link_args=blosc.libs, ), ] -- 2.42.0