63 lines
2.6 KiB
Python
63 lines
2.6 KiB
Python
|
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 VSX4 NEON ASIMD VX VXE VXE2"
|
||
|
|
||
|
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)
|