Skip to contentSkip to conversation

tools/perf: Python 3 + clang build fixes

PATCH In review Eduardo Habkost 3 participants 6 messages Oct 5, 2018 – Oct 9, 2018 perf events

lore
Share & tools
lore
#0 lore raw

cover tools/perf: Python 3 + clang build fixes

This series contains a couple fixes to make it possible to build perf with Python 3 and clang.

Eduardo Habkost (2):
perf: Make clang_has_option() work on Python 3
perf: More portable way to make CFLAGS work with clang

 tools/perf/util/setup.py | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)
Signature · 1 line
2.18.0.rc1.1.g3f1ff2140
#1 lore raw

PATCH 1/2 perf: Make clang_has_option() work on Python 3

Use a bytes literal so it works with Python 3's version of Popen(). Note that the b"..." syntax requires Python 2.6+.

---
 tools/perf/util/setup.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/setup.py +1 -1
index 1942f6dd24f6..261a55e7e1b2 100644
@@ -5,7 +5,7 @@ from subprocess import Popen, PIPE
 from re import sub
 
 def clang_has_option(option):
-    return [o for o in Popen(['clang', option], stderr=PIPE).stderr.readlines() if "unknown argument" in o] == [ ]
+    return [o for o in Popen(['clang', option], stderr=PIPE).stderr.readlines() if b"unknown argument" in o] == [ ]
 
 cc = getenv("CC")
 if cc == "clang":
Signature · 1 line
2.18.0.rc1.1.g3f1ff2140
#2 lore raw

[tip:perf/core] perf python: Make clang_has_option() work on Python 3

perf python: Make clang_has_option() work on Python 3
Commit-ID:  e13a5d69c31d35538e80176d54d95b6addf4dcbf
Gitweb:     https://git.kernel.org/tip/e13a5d69c31d35538e80176d54d95b6addf4dcbf
Author:     Eduardo Habkost <[email protected]>
AuthorDate: Fri, 5 Oct 2018 17:40:57 -0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Mon, 8 Oct 2018 14:30:44 -0300

perf python: Make clang_has_option() work on Python 3

Use a bytes literal so it works with Python 3's version of Popen(). Note that the b"..." syntax requires Python 2.6+.

---
 tools/perf/util/setup.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/setup.py +1 -1
index 1942f6dd24f6..261a55e7e1b2 100644
@@ -5,7 +5,7 @@ from subprocess import Popen, PIPE
 from re import sub
 
 def clang_has_option(option):
-    return [o for o in Popen(['clang', option], stderr=PIPE).stderr.readlines() if "unknown argument" in o] == [ ]
+    return [o for o in Popen(['clang', option], stderr=PIPE).stderr.readlines() if b"unknown argument" in o] == [ ]
 
 cc = getenv("CC")
 if cc == "clang":
#3 lore raw

PATCH 2/2 perf: More portable way to make CFLAGS work with clang

In reply to Eduardo Habkost

The existing code that tries to make CFLAGS compatible with clang doesn't work with Python 3.

Instead of trying to touch _sysconfigdata.build_time_vars directly, change the dictionary returned by disutils.sysconfig.get_config_vars(). This works on both Python 2 and Python 3.

---
 tools/perf/util/setup.py | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)
tools/perf/util/setup.py +8 -6
index 261a55e7e1b2..63f758c655d5 100644
@@ -9,12 +9,14 @@ def clang_has_option(option):
 
 cc = getenv("CC")
 if cc == "clang":
-    from _sysconfigdata import build_time_vars
-    build_time_vars["CFLAGS"] = sub("-specs=[^ ]+", "", build_time_vars["CFLAGS"])
-    if not clang_has_option("-mcet"):
-        build_time_vars["CFLAGS"] = sub("-mcet", "", build_time_vars["CFLAGS"])
-    if not clang_has_option("-fcf-protection"):
-        build_time_vars["CFLAGS"] = sub("-fcf-protection", "", build_time_vars["CFLAGS"])
+    from distutils.sysconfig import get_config_vars
+    vars = get_config_vars()
+    for var in ('CFLAGS', 'OPT'):
+        vars[var] = sub("-specs=[^ ]+", "", vars[var])
+        if not clang_has_option("-mcet"):
+            vars[var] = sub("-mcet", "", vars[var])
+        if not clang_has_option("-fcf-protection"):
+            vars[var] = sub("-fcf-protection", "", vars[var])
 
 from distutils.core import setup, Extension
 
Signature · 1 line
2.18.0.rc1.1.g3f1ff2140
#4 lore raw

[tip:perf/core] perf python: More portable way to make CFLAGS work with clang

perf python: More portable way to make CFLAGS work with clang
Commit-ID:  8b2f245faa6238e28a1d801e8633515251d1acfc
Gitweb:     https://git.kernel.org/tip/8b2f245faa6238e28a1d801e8633515251d1acfc
Author:     Eduardo Habkost <[email protected]>
AuthorDate: Fri, 5 Oct 2018 17:40:58 -0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Mon, 8 Oct 2018 14:30:45 -0300

perf python: More portable way to make CFLAGS work with clang

The existing code that tries to make CFLAGS compatible with clang doesn't work with Python 3.

Instead of trying to touch _sysconfigdata.build_time_vars directly, change the dictionary returned by disutils.sysconfig.get_config_vars(). This works on both Python 2 and Python 3.

---
 tools/perf/util/setup.py | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)
tools/perf/util/setup.py +8 -6
index 261a55e7e1b2..63f758c655d5 100644
@@ -9,12 +9,14 @@ def clang_has_option(option):
 
 cc = getenv("CC")
 if cc == "clang":
-    from _sysconfigdata import build_time_vars
-    build_time_vars["CFLAGS"] = sub("-specs=[^ ]+", "", build_time_vars["CFLAGS"])
-    if not clang_has_option("-mcet"):
-        build_time_vars["CFLAGS"] = sub("-mcet", "", build_time_vars["CFLAGS"])
-    if not clang_has_option("-fcf-protection"):
-        build_time_vars["CFLAGS"] = sub("-fcf-protection", "", build_time_vars["CFLAGS"])
+    from distutils.sysconfig import get_config_vars
+    vars = get_config_vars()
+    for var in ('CFLAGS', 'OPT'):
+        vars[var] = sub("-specs=[^ ]+", "", vars[var])
+        if not clang_has_option("-mcet"):
+            vars[var] = sub("-mcet", "", vars[var])
+        if not clang_has_option("-fcf-protection"):
+            vars[var] = sub("-fcf-protection", "", vars[var])
 
 from distutils.core import setup, Extension
 
#5 lore raw
In reply to Eduardo Habkost

Em Fri, Oct 05, 2018 at 05:40:56PM -0300, Eduardo Habkost escreveu:

Quoted 6 lines

This series contains a couple fixes to make it possible to build perf with Python 3 and clang.

Eduardo Habkost (2):
perf: Make clang_has_option() work on Python 3
perf: More portable way to make CFLAGS work with clang

Thanks! That was fast!

Applying and testing,

- Arnaldo