Generate the main dispatcher config header into the build dir
This commit is contained in:
parent
6479234f82
commit
06a1578991
179
18100.patch
Normal file
179
18100.patch
Normal file
@ -0,0 +1,179 @@
|
||||
From caec7f21ce3ca2672e93781a379734295c00debe Mon Sep 17 00:00:00 2001
|
||||
From: Sayed Adel <seiko@imavr.com>
|
||||
Date: Wed, 30 Dec 2020 10:15:55 +0000
|
||||
Subject: [PATCH] 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`
|
||||
---
|
||||
numpy/core/src/common/npy_cpu_dispatch.h | 4 +--
|
||||
numpy/distutils/ccompiler_opt.py | 32 +++++++++++++-----------
|
||||
numpy/distutils/command/build_clib.py | 18 +++++++++----
|
||||
numpy/distutils/command/build_ext.py | 22 +++++++++++-----
|
||||
5 files changed, 48 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/numpy/core/src/common/npy_cpu_dispatch.h b/numpy/core/src/common/npy_cpu_dispatch.h
|
||||
index a0f82fa3da0..f69fd2b2ee8 100644
|
||||
--- a/numpy/core/src/common/npy_cpu_dispatch.h
|
||||
+++ b/numpy/core/src/common/npy_cpu_dispatch.h
|
||||
@@ -7,7 +7,7 @@
|
||||
#include "npy_cpu_features.h" // NPY_CPU_HAVE
|
||||
#include "numpy/utils.h" // NPY_EXPAND, NPY_CAT
|
||||
/**
|
||||
- * Bringing the main configration header '_cpu_dispatch.h'.
|
||||
+ * Bringing the main configration header 'npy_cpu_dispatch_config.h'.
|
||||
*
|
||||
* This header is generated by the distutils module 'ccompiler_opt',
|
||||
* and contains all the #definitions and headers of instruction-sets,
|
||||
@@ -33,7 +33,7 @@
|
||||
#define NPY__DISPATCH_DEFBOOL
|
||||
typedef bool npy__dispatch_bkbool;
|
||||
#endif
|
||||
- #include "_cpu_dispatch.h"
|
||||
+ #include "npy_cpu_dispatch_config.h"
|
||||
#ifdef NPY_HAVE_VSX
|
||||
#undef bool
|
||||
#undef vector
|
||||
diff --git a/numpy/distutils/ccompiler_opt.py b/numpy/distutils/ccompiler_opt.py
|
||||
index ecf5172ccca..39c08d36b2a 100644
|
||||
--- a/numpy/distutils/ccompiler_opt.py
|
||||
+++ b/numpy/distutils/ccompiler_opt.py
|
||||
@@ -2240,6 +2240,14 @@ def generate_dispatch_header(self, header_path):
|
||||
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 @@ def _generate_config(self, output_dir, dispatch_src, targets, has_baseline=False
|
||||
))
|
||||
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
|
||||
diff --git a/numpy/distutils/command/build_clib.py b/numpy/distutils/command/build_clib.py
|
||||
index a0db6f31f7e..1b3004c2f09 100644
|
||||
--- a/numpy/distutils/command/build_clib.py
|
||||
+++ b/numpy/distutils/command/build_clib.py
|
||||
@@ -118,12 +118,15 @@ def run(self):
|
||||
self.compiler.show_customization()
|
||||
|
||||
if not self.disable_optimization:
|
||||
+ dispatch_hpath = os.path.join("numpy", "distutils", "include", "npy_cpu_dispatch_config.h")
|
||||
+ dispatch_hpath = os.path.join(self.get_finalized_command("build_src").build_src, dispatch_hpath)
|
||||
opt_cache_path = os.path.abspath(
|
||||
- os.path.join(self.build_temp, 'ccompiler_opt_cache_clib.py'
|
||||
- ))
|
||||
+ os.path.join(self.build_temp, 'ccompiler_opt_cache_clib.py')
|
||||
+ )
|
||||
self.compiler_opt = new_ccompiler_opt(
|
||||
- compiler=self.compiler, cpu_baseline=self.cpu_baseline,
|
||||
- cpu_dispatch=self.cpu_dispatch, cache_path=opt_cache_path
|
||||
+ compiler=self.compiler, dispatch_hpath=dispatch_hpath,
|
||||
+ cpu_baseline=self.cpu_baseline, cpu_dispatch=self.cpu_dispatch,
|
||||
+ cache_path=opt_cache_path
|
||||
)
|
||||
if not self.compiler_opt.is_cached():
|
||||
log.info("Detected changes on compiler optimizations, force rebuilding")
|
||||
@@ -271,7 +274,12 @@ def build_a_library(self, build_info, lib_name, libraries):
|
||||
copt_baseline_flags = []
|
||||
copt_macros = []
|
||||
if not self.disable_optimization:
|
||||
- copt_build_src = None if self.inplace else self.get_finalized_command("build_src").build_src
|
||||
+ bsrc_dir = self.get_finalized_command("build_src").build_src
|
||||
+ dispatch_hpath = os.path.join("numpy", "distutils", "include")
|
||||
+ dispatch_hpath = os.path.join(bsrc_dir, dispatch_hpath)
|
||||
+ include_dirs.append(dispatch_hpath)
|
||||
+
|
||||
+ copt_build_src = None if self.inplace else bsrc_dir
|
||||
copt_c_sources = [
|
||||
c_sources.pop(c_sources.index(src))
|
||||
for src in c_sources[:] if src.endswith(".dispatch.c")
|
||||
diff --git a/numpy/distutils/command/build_ext.py b/numpy/distutils/command/build_ext.py
|
||||
index ca6f8bcd24d..448f7941cd9 100644
|
||||
--- a/numpy/distutils/command/build_ext.py
|
||||
+++ b/numpy/distutils/command/build_ext.py
|
||||
@@ -146,11 +146,16 @@ def run(self):
|
||||
self.compiler.show_customization()
|
||||
|
||||
if not self.disable_optimization:
|
||||
- opt_cache_path = os.path.abspath(os.path.join(self.build_temp, 'ccompiler_opt_cache_ext.py'))
|
||||
- self.compiler_opt = new_ccompiler_opt(compiler=self.compiler,
|
||||
- cpu_baseline=self.cpu_baseline,
|
||||
- cpu_dispatch=self.cpu_dispatch,
|
||||
- cache_path=opt_cache_path)
|
||||
+ dispatch_hpath = os.path.join("numpy", "distutils", "include", "npy_cpu_dispatch_config.h")
|
||||
+ dispatch_hpath = os.path.join(self.get_finalized_command("build_src").build_src, dispatch_hpath)
|
||||
+ opt_cache_path = os.path.abspath(
|
||||
+ os.path.join(self.build_temp, 'ccompiler_opt_cache_ext.py')
|
||||
+ )
|
||||
+ self.compiler_opt = new_ccompiler_opt(
|
||||
+ compiler=self.compiler, dispatch_hpath=dispatch_hpath,
|
||||
+ cpu_baseline=self.cpu_baseline, cpu_dispatch=self.cpu_dispatch,
|
||||
+ cache_path=opt_cache_path
|
||||
+ )
|
||||
if not self.compiler_opt.is_cached():
|
||||
log.info("Detected changes on compiler optimizations, force rebuilding")
|
||||
self.force = True
|
||||
@@ -416,7 +421,12 @@ def build_extension(self, ext):
|
||||
copt_baseline_flags = []
|
||||
copt_macros = []
|
||||
if not self.disable_optimization:
|
||||
- copt_build_src = None if self.inplace else self.get_finalized_command("build_src").build_src
|
||||
+ bsrc_dir = self.get_finalized_command("build_src").build_src
|
||||
+ dispatch_hpath = os.path.join("numpy", "distutils", "include")
|
||||
+ dispatch_hpath = os.path.join(bsrc_dir, dispatch_hpath)
|
||||
+ include_dirs.append(dispatch_hpath)
|
||||
+
|
||||
+ copt_build_src = None if self.inplace else bsrc_dir
|
||||
copt_c_sources = [
|
||||
c_sources.pop(c_sources.index(src))
|
||||
for src in c_sources[:] if src.endswith(".dispatch.c")
|
||||
@ -20,7 +20,7 @@
|
||||
|
||||
Name: numpy
|
||||
Version: 1.20.0
|
||||
Release: 0.rc2%{?dist}
|
||||
Release: 1.rc2%{?dist}
|
||||
Epoch: 1
|
||||
Summary: A fast multidimensional array facility for Python
|
||||
|
||||
@ -30,6 +30,9 @@ URL: http://www.numpy.org/
|
||||
Source0: https://github.com/%{name}/%{name}/releases/download/v%{version}rc2/%{name}-%{version}rc2.tar.gz
|
||||
Source1: https://numpy.org/doc/1.19/numpy-html.zip
|
||||
|
||||
https://github.com/numpy/numpy/pull/18100
|
||||
Patch0: 18100.patch
|
||||
|
||||
%description
|
||||
NumPy is a general-purpose array-processing package designed to
|
||||
efficiently manipulate large multi-dimensional arrays of arbitrary
|
||||
@ -194,6 +197,9 @@ python3 runtests.py
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon Jan 04 2021 Nikola Forró <nforro@redhat.com> - 1:1.20.0-1.rc2
|
||||
- Generate the main dispatcher config header into the build dir
|
||||
|
||||
* Mon Dec 28 2020 Gwyn Ciesla <gwync@protonmail.com> - 1:1.20.0-0.rc2
|
||||
- 1.20.0 rc2
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user