summaryrefslogtreecommitdiff
path: root/numpy/distutils/ccompiler_opt.py
diff options
context:
space:
mode:
authorSayed Adel <seiko@imavr.com>2020-12-30 10:15:55 +0000
committerSayed Adel <seiko@imavr.com>2021-01-03 05:36:30 +0000
commitcaec7f21ce3ca2672e93781a379734295c00debe (patch)
treec765f9be7fb17767f16ec95fe792d46b3474c9ea /numpy/distutils/ccompiler_opt.py
parent1b8b46b3f2f68f5be8e52e798eb91c2ac5952745 (diff)
downloadnumpy-caec7f21ce3ca2672e93781a379734295c00debe.tar.gz
BUG, BLD: Generate the main dispatcher config header into the build dir
The new path becomes `build/src.*/numpy/distutils/include/npy_cpu_dispatch_config.h` instead of `numpy/core/src/common/_cpu_dispatch.h`. The new path allows other projects to re-use the CPU dispatcher once we decide to expose the following headers: - `numpy/core/src/common/npy_cpu_dispatch.h` - `numpy/core/src/common/npy_cpu_features.h`
Diffstat (limited to 'numpy/distutils/ccompiler_opt.py')
-rw-r--r--numpy/distutils/ccompiler_opt.py32
1 files changed, 17 insertions, 15 deletions
diff --git a/numpy/distutils/ccompiler_opt.py b/numpy/distutils/ccompiler_opt.py
index ecf5172cc..39c08d36b 100644
--- a/numpy/distutils/ccompiler_opt.py
+++ b/numpy/distutils/ccompiler_opt.py
@@ -2240,6 +2240,14 @@ class CCompilerOpt(_Config, _Distutils, _Cache, _CCompiler, _Feature, _Parse):
baseline_len = len(baseline_names)
dispatch_len = len(dispatch_names)
+ header_dir = os.path.dirname(header_path)
+ if not os.path.exists(header_dir):
+ self.dist_log(
+ f"dispatch header dir {header_dir} isn't exist, creating it",
+ stderr=True
+ )
+ os.makedirs(header_dir)
+
with open(header_path, 'w') as f:
baseline_calls = ' \\\n'.join([
(
@@ -2504,30 +2512,24 @@ class CCompilerOpt(_Config, _Distutils, _Cache, _CCompiler, _Feature, _Parse):
))
return False
-def new_ccompiler_opt(compiler, **kwargs):
+def new_ccompiler_opt(compiler, dispatch_hpath, **kwargs):
"""
Create a new instance of 'CCompilerOpt' and generate the dispatch header
- inside NumPy source dir.
+ which containing all definitions and headers of instruction-sets for
+ the enabled CPU baseline and dispatch-able features.
Parameters
----------
- 'compiler' : CCompiler instance
- '**kwargs': passed as-is to `CCompilerOpt(...)`
+ compiler : CCompiler instance
+ dispatch_hpath : str
+ path of the dispatch header
+ **kwargs: passed as-is to `CCompilerOpt(...)`
Returns
-------
new instance of CCompilerOpt
"""
opt = CCompilerOpt(compiler, **kwargs)
- npy_path = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
- header_dir = os.path.join(npy_path, *("core/src/common".split("/")))
- header_path = os.path.join(header_dir, "_cpu_dispatch.h")
- if not os.path.exists(header_path) or not opt.is_cached():
- if not os.path.exists(header_dir):
- opt.dist_log(
- "dispatch header dir '%s' isn't exist, creating it" % header_dir,
- stderr=True
- )
- os.makedirs(header_dir)
- opt.generate_dispatch_header(header_path)
+ if not os.path.exists(dispatch_hpath) or not opt.is_cached():
+ opt.generate_dispatch_header(dispatch_hpath)
return opt