Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Factory:Rebuild
python-hdf5plugin
hdf5plugin-system-libs.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File hdf5plugin-system-libs.patch of Package python-hdf5plugin
Index: hdf5plugin-5.0.0/setup.py =================================================================== --- hdf5plugin-5.0.0.orig/setup.py +++ hdf5plugin-5.0.0/setup.py @@ -35,6 +35,7 @@ from pathlib import Path import itertools import logging import os +import subprocess import sys import sysconfig import tempfile @@ -136,32 +137,21 @@ class HostConfig: self.__compiler = get_compiler(compiler) # Set architecture specific compile args - if self.ARCH in ('X86_32', 'X86_64', 'MIPS_64'): - self.native_compile_args = ("-march=native",) - elif self.ARCH in ('ARM_7', 'ARM_8', 'PPC_64'): - self.native_compile_args = ("-mcpu=native",) - else: - self.native_compile_args = () + self.native_compile_args = () if self.ARCH in ('X86_32', 'X86_64'): self.sse2_compile_args = ('-msse2',) # /arch:SSE2 is on by default else: self.sse2_compile_args = () - if self.ARCH in ('X86_32', 'X86_64'): - self.ssse3_compile_args = ('-mssse3',) # There is no /arch:SSSE3 - else: - self.ssse3_compile_args = () + self.ssse3_compile_args = () if self.ARCH in ('X86_32', 'X86_64'): self.avx2_compile_args = ('-mavx2', '/arch:AVX2') else: self.avx2_compile_args = () - if self.ARCH in ('X86_32', 'X86_64'): - self.avx512_compile_args = ('-mavx512f', '-mavx512bw', '/arch:AVX512') - else: - self.avx512_compile_args = () + self.avx512_compile_args = () def get_shared_lib_extension(self) -> str: """Returns shared library file extension""" @@ -253,7 +243,7 @@ class HostConfig: def has_ssse3(self) -> bool: """Check SSSE3 availability on host""" - return self._has_x86_simd('ssse3') + return False # SSE3 not available on openSUSE non hwcaps libs def has_avx2(self) -> bool: """Check AVX2 availability on host""" @@ -261,7 +251,7 @@ class HostConfig: def has_avx512(self) -> bool: """Check AVX512 "F" and "BW" instruction sets availability on host""" - return self._has_x86_simd('avx512f', 'avx512bw') + return False # Disabled on openSUSE non hwcaps libs def has_openmp(self) -> bool: """Check OpenMP availability on host""" @@ -731,40 +721,62 @@ def get_lz4_clib(field=None): if BuildConfig.INTEL_IPP_DIR is not None: return _get_lz4_ipp_clib(field) - cflags = ['-O3', '-ffast-math', '-std=gnu99'] - cflags += ['/Ox', '/fp:fast'] + if os.environ.get('HDF5PLUGIN_SYSTEM_LZ4', None): + config = dict( + sources=[], + include_dirs=[subprocess.check_output( + ["pkg-config", '--variable=includedir', 'liblz4'] + )], + cflags=[], + ) + libraries = [l.strip()[2:] for l in subprocess.check_output( + ["pkg-config", '--libs', 'liblz4'] + ).decode().strip().split(" ")] + else: + cflags = ['-O3', '-ffast-math', '-std=gnu99'] + cflags += ['/Ox', '/fp:fast'] - lz4_dir = glob('src/c-blosc2/internal-complibs/lz4*')[0] + lz4_dir = glob('src/c-blosc2/internal-complibs/lz4*')[0] - config = dict( - sources=glob(f'{lz4_dir}/*.c'), - include_dirs=[lz4_dir], - cflags=cflags, - ) + config = dict( + sources=glob(f'{lz4_dir}/*.c'), + include_dirs=[lz4_dir], + cflags=cflags, + ) + libraries = [] if field is None: return 'lz4', config if field == 'extra_link_args': return [] if field == 'libraries': - return [] + return libraries return config[field] def get_snappy_clib(field=None): """snappy static lib build config""" - snappy_dir = 'src/snappy' + if os.environ.get('HDF5PLUGIN_SYSTEM_SNAPPY', None): + config = dict( + sources=[], + include_dirs=[subprocess.check_output( + ["pkg-config", '--variable=includedir', 'snappy'] + )], + cflags=[], + ) + else: + snappy_dir = 'src/snappy' - config = dict( - sources=prefix(snappy_dir, [ - 'snappy-c.cc', - 'snappy-sinksource.cc', - 'snappy-stubs-internal.cc', - 'snappy.cc', - ]), - include_dirs=[snappy_dir], - cflags=['-std=c++11'], - ) + config = dict( + sources=prefix(snappy_dir, [ + 'snappy-c.cc', + 'snappy-sinksource.cc', + 'snappy-stubs-internal.cc', + 'snappy.cc', + ]), + include_dirs=[snappy_dir], + cflags=['-std=c++11'], + ) if field is None: return 'snappy', config @@ -812,40 +824,62 @@ def get_zfp_clib(field=None): def get_zlib_clib(field=None): """ZLib static lib build config""" - cflags = ['-O3', '-ffast-math', '-std=gnu99'] - cflags += ['/Ox', '/fp:fast'] + if os.environ.get('HDF5PLUGIN_SYSTEM_ZLIB', None): + config = dict( + sources=[], + include_dirs=[subprocess.check_output( + ["pkg-config", '--variable=includedir', 'zlib'] + )], + cflags=[] + ) + else: + cflags = ['-O3', '-ffast-math', '-std=gnu99'] + cflags += ['/Ox', '/fp:fast'] - zlib_dir = glob('src/c-blosc/internal-complibs/zlib*')[0] + zlib_dir = glob('src/c-blosc/internal-complibs/zlib*')[0] - config = dict( - sources=glob(f'{zlib_dir}/*.c'), - include_dirs=[zlib_dir], - cflags=cflags, - ) + config = dict( + sources=glob(f'{zlib_dir}/*.c'), + include_dirs=[zlib_dir], + cflags=cflags, + ) if field is None: - return 'zlib', config + return 'z', config return config[field] def get_zstd_clib(field=None): - """zstd static lib build config""" - cflags = ['-O3', '-ffast-math', '-std=gnu99'] - cflags += ['/Ox', '/fp:fast'] + """zstd static lib build config""" + if os.environ.get('HDF5PLUGIN_SYSTEM_ZSTD', None): + if field == 'extra_objects': + return [] + config = dict( + sources=[], + include_dirs=[subprocess.check_output( + ["pkg-config", '--variable=includedir', 'libzstd'] + )], + cflags=[], + ) + else: + cflags = ['-O3', '-ffast-math', '-std=gnu99'] + cflags += ['/Ox', '/fp:fast'] - zstd_dir = glob('src/c-blosc2/internal-complibs/zstd*')[0] + zstd_dir = glob('src/c-blosc2/internal-complibs/zstd*')[0] - config = dict( - sources=glob(f'{zstd_dir}/*/*.c'), - include_dirs=[zstd_dir, f'{zstd_dir}/common'], - macros=[] if BuildConfig.USE_BMI2 else [('ZSTD_DISABLE_ASM', 1)], - cflags=cflags, - ) + if field == 'extra_objects': + return glob(f'{zstd_dir}/*/*.S') if BuildConfig.USE_BMI2 else [] + + config = dict( + sources=glob(f'{zstd_dir}/*/*.c'), + include_dirs=[zstd_dir, f'{zstd_dir}/common'], + cflags=cflags, + ) + + config['macros'] = [] if BuildConfig.USE_BMI2 else [('ZSTD_DISABLE_ASM', 1)] if field is None: return 'zstd', config - if field == 'extra_objects': - return glob(f'{zstd_dir}/*/*.S') if BuildConfig.USE_BMI2 else [] return config[field] @@ -858,16 +892,25 @@ def get_blosc_plugin(): Plugin from https://github.com/Blosc/hdf5-blosc c-blosc from https://github.com/Blosc/c-blosc """ - blosc_dir = 'src/c-blosc/blosc' hdf5_blosc_dir = 'src/hdf5-blosc/src' - # blosc sources - sources = glob(f'{blosc_dir}/*.c') - include_dirs = ['src/c-blosc', blosc_dir] + if os.environ.get('HDF5PLUGIN_SYSTEM_BLOSC', None): + sources = [] + include_dirs = [subprocess.check_output( + ["pkg-config", '--variable=includedir', 'blosc'] + )] + libraries = [l.strip()[2:] for l in subprocess.check_output( + ["pkg-config", '--libs', 'blosc'] + ).decode().strip().split(" ")] + else: + # blosc sources + blosc_dir = 'src/c-blosc/blosc' + sources = glob(f'{blosc_dir}/*.c') + include_dirs = ['src/c-blosc', blosc_dir] + libraries = [] define_macros = [] extra_link_args = [] - libraries = [] - + # compression libs # lz4 include_dirs += get_lz4_clib('include_dirs') @@ -913,7 +956,7 @@ def get_blosc_plugin(): ) -PLUGIN_LIB_DEPENDENCIES['blosc'] = 'snappy', 'lz4', 'zlib', 'zstd' +PLUGIN_LIB_DEPENDENCIES['blosc'] = 'snappy', 'lz4', 'z', 'zstd' def get_blosc2_plugin(): @@ -922,43 +965,44 @@ def get_blosc2_plugin(): Source from PyTables and c-blosc2 """ hdf5_blosc2_dir = 'src/PyTables/hdf5-blosc2/src' - blosc2_dir = 'src/c-blosc2' - plugins_dir = f'{blosc2_dir}/plugins' + if os.environ.get('HDF5PLUGIN_SYSTEM_BLOSC2', None): + sources = [] + include_dirs = [subprocess.check_output( + ["pkg-config", '--variable=includedir', 'blosc2'] + )] + libraries = [l.strip()[2:] for l in subprocess.check_output( + ["pkg-config", '--libs', 'blosc2'] + ).decode().strip().split(" ")] + else: + blosc2_dir = 'src/c-blosc2' + plugins_dir = f'{blosc2_dir}/plugins' + + # blosc sources + sources = glob(f'{blosc2_dir}/blosc/*.c') + sources += [ # Add embedded codecs, filters and tuners + src_file + for src_file in glob(f'{plugins_dir}/*.c') + glob(f'{plugins_dir}/*/*.c') + glob(f'{plugins_dir}/*/*/*.c') + if not os.path.basename(src_file).startswith("test") + ] + sources += glob(f'{plugins_dir}/codecs/zfp/src/*.c') # Add ZFP embedded sources - # blosc sources - sources = glob(f'{blosc2_dir}/blosc/*.c') - sources += [ # Add embedded codecs, filters and tuners - src_file - for src_file in glob(f'{plugins_dir}/*.c') + glob(f'{plugins_dir}/*/*.c') + glob(f'{plugins_dir}/*/*/*.c') - if not os.path.basename(src_file).startswith("test") - ] - sources += glob(f'{plugins_dir}/codecs/zfp/src/*.c') # Add ZFP embedded sources - - include_dirs = [ - blosc2_dir, - f'{blosc2_dir}/blosc', - f'{blosc2_dir}/include', - f'{blosc2_dir}/plugins/codecs/zfp/include', - ] + include_dirs = [ + blosc2_dir, + f'{blosc2_dir}/blosc', + f'{blosc2_dir}/include', + f'{blosc2_dir}/plugins/codecs/zfp/include', + ] + libraries = [] define_macros = [('HAVE_PLUGINS', 1)] - if platform.machine() == 'ppc64le': - define_macros.append(('SHUFFLE_ALTIVEC_ENABLED', 1)) - define_macros.append(('NO_WARN_X86_INTRINSICS', None)) - else: - define_macros.append(('SHUFFLE_SSE2_ENABLED', 1)) - define_macros.append(('SHUFFLE_AVX2_ENABLED', 1)) - define_macros.append(('SHUFFLE_AVX512_ENABLED', 1)) - define_macros.append(('SHUFFLE_NEON_ENABLED', 1)) + define_macros.append(('SHUFFLE_SSE2_ENABLED', 0)) + define_macros.append(('SHUFFLE_AVX2_ENABLED', 1)) + define_macros.append(('SHUFFLE_AVX512_ENABLED', 0)) + define_macros.append(('SHUFFLE_NEON_ENABLED', 0)) extra_compile_args = [] extra_link_args = [] - libraries = [] - if HostConfig.ARCH == 'ARM_8': - extra_compile_args += ['-flax-vector-conversions'] - if HostConfig.ARCH == 'ARM_7': - extra_compile_args += ['-mfpu=neon', '-flax-vector-conversions'] # compression libs # lz4 @@ -980,10 +1024,6 @@ def get_blosc2_plugin(): include_dirs += get_zstd_clib('include_dirs') define_macros.append(('HAVE_ZSTD', 1)) - extra_compile_args += ['-O3', '-std=gnu99'] - extra_compile_args += ['/Ox'] - extra_compile_args += ['-pthread'] - extra_link_args += ['-pthread'] return HDF5PluginExtension( "hdf5plugin.plugins.libh5blosc2", @@ -999,7 +1039,7 @@ def get_blosc2_plugin(): ) -PLUGIN_LIB_DEPENDENCIES['blosc2'] = 'lz4', 'zlib', 'zstd' +PLUGIN_LIB_DEPENDENCIES['blosc2'] = 'lz4', 'z', 'zstd' def get_zstandard_plugin(): @@ -1081,31 +1121,47 @@ PLUGIN_LIB_DEPENDENCIES['lz4'] = ('lz4', def get_bzip2_plugin(): """BZip2 plugin build config""" - bzip2_dir = "src/bzip2" + if os.environ.get('HDF5PLUGIN_SYSTEM_BZIP2', None): + bzip2_extra_compile_args = [] + sources = [] + include_dirs = [subprocess.check_output( + ["pkg-config", '--variable=includedir', 'bzip2'] + )] + libraries = [l.strip()[2:] for l in subprocess.check_output( + ["pkg-config", '--libs', 'bzip2'] + ).decode().strip().split(" ")] + + else: + bzip2_dir = "src/bzip2" + + bzip2_extra_compile_args = [ + "-Wall", + "-Winline", + "-O2", + "-g", + "-D_FILE_OFFSET_BITS=64" + ] + + sources = prefix(bzip2_dir, [ + "blocksort.c", + "huffman.c", + "crctable.c", + "randtable.c", + "compress.c", + "decompress.c", + "bzlib.c", + ]) + include_dirs = [bzip2_dir] + libraries=[] - bzip2_extra_compile_args = [ - "-Wall", - "-Winline", - "-O2", - "-g", - "-D_FILE_OFFSET_BITS=64" - ] - - sources = ['src/PyTables/src/H5Zbzip2.c', 'src/H5Zbzip2_plugin.c'] - sources += prefix(bzip2_dir, [ - "blocksort.c", - "huffman.c", - "crctable.c", - "randtable.c", - "compress.c", - "decompress.c", - "bzlib.c", - ]) + include_dirs += ['src/PyTables/src/'] + sources += ['src/PyTables/src/H5Zbzip2.c', 'src/H5Zbzip2_plugin.c'] return HDF5PluginExtension( "hdf5plugin.plugins.libh5bzip2", sources=sources, - include_dirs=['src/PyTables/src/', bzip2_dir], + include_dirs=include_dirs, + libraries=libraries, define_macros=[('HAVE_BZ2_LIB', 1)], extra_compile_args=bzip2_extra_compile_args, ) @@ -1178,7 +1234,7 @@ def get_sz_plugin(): ) -PLUGIN_LIB_DEPENDENCIES['sz'] = ('zlib', 'zstd') +PLUGIN_LIB_DEPENDENCIES['sz'] = ('z', 'zstd') def get_sz3_plugin(): @@ -1242,13 +1298,14 @@ def apply_filter_strip(libraries, extens if 'all' in stripped_filters: return [], [] - # Filter out library that won't be used because of stripped filters + # Filter out library that won't be used because of stripped filters or is usable from system lib_names = set( itertools.chain.from_iterable( lib_names for filter_name, lib_names in dependencies.items() - if filter_name not in stripped_filters + if (filter_name not in stripped_filters + and not os.environ.get(f"HDF5PLUGIN_SYSTEM_{filter_name.upper()}", None)) ) - ) + ) libraries = [ lib for lib in libraries if lib[0] in lib_names
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor