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)
 |