12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import os
- import sys
- from distutils.command.build import build as old_build
- from distutils.util import get_platform
- from numpy.distutils.command.config_compiler import show_fortran_compilers
- class build(old_build):
- sub_commands = [('config_cc', lambda *args: True),
- ('config_fc', lambda *args: True),
- ('build_src', old_build.has_ext_modules),
- ] + old_build.sub_commands
- user_options = old_build.user_options + [
- ('fcompiler=', None,
- "specify the Fortran compiler type"),
- ('warn-error', None,
- "turn all warnings into errors (-Werror)"),
- ('cpu-baseline=', None,
- "specify a list of enabled baseline CPU optimizations"),
- ('cpu-dispatch=', None,
- "specify a list of dispatched CPU optimizations"),
- ('disable-optimization', None,
- "disable CPU optimized code(dispatch,simd,fast...)"),
- ('simd-test=', None,
- "specify a list of CPU optimizations to be tested against NumPy SIMD interface"),
- ]
- help_options = old_build.help_options + [
- ('help-fcompiler', None, "list available Fortran compilers",
- show_fortran_compilers),
- ]
- def initialize_options(self):
- old_build.initialize_options(self)
- self.fcompiler = None
- self.warn_error = False
- self.cpu_baseline = "min"
- self.cpu_dispatch = "max -xop -fma4" # drop AMD legacy features by default
- self.disable_optimization = False
- """
- the '_simd' module is a very large. Adding more dispatched features
- will increase binary size and compile time. By default we minimize
- the targeted features to those most commonly used by the NumPy SIMD interface(NPYV),
- NOTE: any specified features will be ignored if they're:
- - part of the baseline(--cpu-baseline)
- - not part of dispatch-able features(--cpu-dispatch)
- - not supported by compiler or platform
- """
- self.simd_test = "BASELINE SSE2 SSE42 XOP FMA4 (FMA3 AVX2) AVX512F AVX512_SKX VSX VSX2 VSX3 NEON ASIMD"
- def finalize_options(self):
- build_scripts = self.build_scripts
- old_build.finalize_options(self)
- plat_specifier = ".{}-{}.{}".format(get_platform(), *sys.version_info[:2])
- if build_scripts is None:
- self.build_scripts = os.path.join(self.build_base,
- 'scripts' + plat_specifier)
- def run(self):
- old_build.run(self)
|