| From: Jiri Olsa <jolsa@kernel.org> |
| Date: Mon, 19 Mar 2018 09:29:02 +0100 |
| Subject: perf tools: Fix python extension build for gcc 8 |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit b7a313d84e853049062011d78cb04b6decd12f5c upstream. |
| |
| The gcc 8 compiler won't compile the python extension code with the |
| following errors (one example): |
| |
| python.c:830:15: error: cast between incompatible function types from \ |
| ‘PyObject * (*)(struct pyrf_evsel *, PyObject *, PyObject *)’ \ |
| uct _object * (*)(struct pyrf_evsel *, struct _object *, struct _object *)’} to \ |
| ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _objeuct \ |
| _object *)’} [-Werror=cast-function-type] |
| .ml_meth = (PyCFunction)pyrf_evsel__open, |
| |
| The problem with the PyMethodDef::ml_meth callback is that its type is |
| determined based on the PyMethodDef::ml_flags value, which we set as |
| METH_VARARGS | METH_KEYWORDS. |
| |
| That indicates that the callback is expecting an extra PyObject* arg, and is |
| actually PyCFunctionWithKeywords type, but the base PyMethodDef::ml_meth type |
| stays PyCFunction. |
| |
| Previous gccs did not find this, gcc8 now does. Fixing this by silencing this |
| warning for python.c build. |
| |
| Commiter notes: |
| |
| Do not do that for CC=clang, as it breaks the build in some clang |
| versions, like the ones in fedora up to fedora27: |
| |
| fedora:25:error: unknown warning option '-Wno-cast-function-type'; did you mean '-Wno-bad-function-cast'? [-Werror,-Wunknown-warning-option] |
| fedora:26:error: unknown warning option '-Wno-cast-function-type'; did you mean '-Wno-bad-function-cast'? [-Werror,-Wunknown-warning-option] |
| fedora:27:error: unknown warning option '-Wno-cast-function-type'; did you mean '-Wno-bad-function-cast'? [-Werror,-Wunknown-warning-option] |
| # |
| |
| those have: |
| |
| clang version 3.9.1 (tags/RELEASE_391/final) |
| |
| The one in rawhide accepts that: |
| |
| clang version 6.0.0 (tags/RELEASE_600/final) |
| |
| Signed-off-by: Jiri Olsa <jolsa@kernel.org> |
| Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> |
| Cc: David Ahern <dsahern@gmail.com> |
| Cc: Josh Poimboeuf <jpoimboe@redhat.com> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> |
| Link: http://lkml.kernel.org/r/20180319082902.4518-2-jolsa@kernel.org |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| tools/perf/util/setup.py | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/tools/perf/util/setup.py |
| +++ b/tools/perf/util/setup.py |
| @@ -21,6 +21,7 @@ class install_lib(_install_lib): |
| cflags = getenv('CFLAGS', '').split() |
| # switch off several checks (need to be at the end of cflags list) |
| cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter' ] |
| +cflags += ['-Wno-cast-function-type' ] |
| |
| build_lib = getenv('PYTHON_EXTBUILD_LIB') |
| build_tmp = getenv('PYTHON_EXTBUILD_TMP') |