xref: /linux/tools/perf/util/setup.py (revision 36ec807b627b4c0a0a382f0ae48eac7187d14b2b)
1dd6e1fe9SArnaldo Carvalho de Melofrom os import getenv, path
25508672dSArnaldo Carvalho de Melofrom subprocess import Popen, PIPE
35508672dSArnaldo Carvalho de Melofrom re import sub
45508672dSArnaldo Carvalho de Melo
54be92cf0SArnaldo Carvalho de Melocc = getenv("CC")
609e6f9f9SArnaldo Carvalho de Melo
709e6f9f9SArnaldo Carvalho de Melo# Check if CC has options, as is the case in yocto, where it uses CC="cc --sysroot..."
809e6f9f9SArnaldo Carvalho de Melocc_tokens = cc.split()
909e6f9f9SArnaldo Carvalho de Meloif len(cc_tokens) > 1:
1009e6f9f9SArnaldo Carvalho de Melo    cc = cc_tokens[0]
1109e6f9f9SArnaldo Carvalho de Melo    cc_options = " ".join([str(e) for e in cc_tokens[1:]]) + " "
1209e6f9f9SArnaldo Carvalho de Meloelse:
1309e6f9f9SArnaldo Carvalho de Melo    cc_options = ""
1409e6f9f9SArnaldo Carvalho de Melo
1509e6f9f9SArnaldo Carvalho de Melocc_is_clang = b"clang version" in Popen([cc, "-v"], stderr=PIPE).stderr.readline()
16dd6e1fe9SArnaldo Carvalho de Melosrc_feature_tests  = getenv('srctree') + '/tools/build/feature'
17a7ffd416SIlie Halip
18a7ffd416SIlie Halipdef clang_has_option(option):
1909e6f9f9SArnaldo Carvalho de Melo    cc_output = Popen([cc, cc_options + option, path.join(src_feature_tests, "test-hello.c") ], stderr=PIPE).stderr.readlines()
20dd6e1fe9SArnaldo Carvalho de Melo    return [o for o in cc_output if ((b"unknown argument" in o) or (b"is not supported" in o))] == [ ]
21a7ffd416SIlie Halip
22a7ffd416SIlie Halipif cc_is_clang:
23ee87a084SIan Rogers    from sysconfig import get_config_vars
248b2f245fSEduardo Habkost    vars = get_config_vars()
258b2f245fSEduardo Habkost    for var in ('CFLAGS', 'OPT'):
268b2f245fSEduardo Habkost        vars[var] = sub("-specs=[^ ]+", "", vars[var])
275508672dSArnaldo Carvalho de Melo        if not clang_has_option("-mcet"):
288b2f245fSEduardo Habkost            vars[var] = sub("-mcet", "", vars[var])
295508672dSArnaldo Carvalho de Melo        if not clang_has_option("-fcf-protection"):
308b2f245fSEduardo Habkost            vars[var] = sub("-fcf-protection", "", vars[var])
31a5dcc4caSArnaldo Carvalho de Melo        if not clang_has_option("-fstack-clash-protection"):
32a5dcc4caSArnaldo Carvalho de Melo            vars[var] = sub("-fstack-clash-protection", "", vars[var])
337952fa3bSArnaldo Carvalho de Melo        if not clang_has_option("-fstack-protector-strong"):
347952fa3bSArnaldo Carvalho de Melo            vars[var] = sub("-fstack-protector-strong", "", vars[var])
359a00df31SArnaldo Carvalho de Melo        if not clang_has_option("-fno-semantic-interposition"):
369a00df31SArnaldo Carvalho de Melo            vars[var] = sub("-fno-semantic-interposition", "", vars[var])
373a8a0475SArnaldo Carvalho de Melo        if not clang_has_option("-ffat-lto-objects"):
383a8a0475SArnaldo Carvalho de Melo            vars[var] = sub("-ffat-lto-objects", "", vars[var])
39190c6854SArnaldo Carvalho de Melo        if not clang_has_option("-ftree-loop-distribute-patterns"):
40190c6854SArnaldo Carvalho de Melo            vars[var] = sub("-ftree-loop-distribute-patterns", "", vars[var])
41190c6854SArnaldo Carvalho de Melo        if not clang_has_option("-gno-variable-location-views"):
42190c6854SArnaldo Carvalho de Melo            vars[var] = sub("-gno-variable-location-views", "", vars[var])
434be92cf0SArnaldo Carvalho de Melo
44ee87a084SIan Rogersfrom setuptools import setup, Extension
454be92cf0SArnaldo Carvalho de Melo
46ee87a084SIan Rogersfrom setuptools.command.build_ext   import build_ext   as _build_ext
47ee87a084SIan Rogersfrom setuptools.command.install_lib import install_lib as _install_lib
489941c96aSJiri Olsa
499941c96aSJiri Olsaclass build_ext(_build_ext):
509941c96aSJiri Olsa    def finalize_options(self):
519941c96aSJiri Olsa        _build_ext.finalize_options(self)
529941c96aSJiri Olsa        self.build_lib  = build_lib
539941c96aSJiri Olsa        self.build_temp = build_tmp
549941c96aSJiri Olsa
559941c96aSJiri Olsaclass install_lib(_install_lib):
569941c96aSJiri Olsa    def finalize_options(self):
579941c96aSJiri Olsa        _install_lib.finalize_options(self)
589941c96aSJiri Olsa        self.build_dir = build_lib
599941c96aSJiri Olsa
609941c96aSJiri Olsa
619c12cf95SJiri Olsacflags = getenv('CFLAGS', '').split()
629c12cf95SJiri Olsa# switch off several checks (need to be at the end of cflags list)
63*9dabf400SIan Rogerscflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls' ]
6441d0914dSArnaldo Carvalho de Meloif cc_is_clang:
6541d0914dSArnaldo Carvalho de Melo    cflags += ["-Wno-unused-command-line-argument" ]
6641d0914dSArnaldo Carvalho de Meloelse:
67b7a313d8SJiri Olsa    cflags += ['-Wno-cast-function-type' ]
68877108e4SArnaldo Carvalho de Melo
69a7789d3fSArnaldo Carvalho de Melo# The python headers have mixed code with declarations (decls after asserts, for instance)
70a7789d3fSArnaldo Carvalho de Melocflags += [ "-Wno-declaration-after-statement" ]
71a7789d3fSArnaldo Carvalho de Melo
7267d52689SJiri Olsasrc_perf  = getenv('srctree') + '/tools/perf'
739941c96aSJiri Olsabuild_lib = getenv('PYTHON_EXTBUILD_LIB')
749941c96aSJiri Olsabuild_tmp = getenv('PYTHON_EXTBUILD_TMP')
75c44a8b44SAlexey Budankov
76877108e4SArnaldo Carvalho de Meloperf = Extension('perf',
77*9dabf400SIan Rogers                 sources = [ src_perf + '/util/python.c' ],
78f6bbc1daSArnaldo Carvalho de Melo		         include_dirs = ['util/include'],
791b7155f7SRobert Richter		         extra_compile_args = cflags,
801b7155f7SRobert Richter                 )
81877108e4SArnaldo Carvalho de Melo
82877108e4SArnaldo Carvalho de Melosetup(name='perf',
83877108e4SArnaldo Carvalho de Melo      version='0.1',
84877108e4SArnaldo Carvalho de Melo      description='Interface with the Linux profiling infrastructure',
85877108e4SArnaldo Carvalho de Melo      author='Arnaldo Carvalho de Melo',
86877108e4SArnaldo Carvalho de Melo      author_email='acme@redhat.com',
87877108e4SArnaldo Carvalho de Melo      license='GPLv2',
88877108e4SArnaldo Carvalho de Melo      url='http://perf.wiki.kernel.org',
899941c96aSJiri Olsa      ext_modules=[perf],
909941c96aSJiri Olsa      cmdclass={'build_ext': build_ext, 'install_lib': install_lib})
91