Spaces:
Running
Running
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) | |