You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					63 lines
				
				2.6 KiB
			
		
		
			
		
	
	
					63 lines
				
				2.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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)
							 |