cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

setup.py (3416B)


      1from os import getenv, path
      2from subprocess import Popen, PIPE
      3from re import sub
      4
      5cc = getenv("CC")
      6cc_is_clang = b"clang version" in Popen([cc.split()[0], "-v"], stderr=PIPE).stderr.readline()
      7src_feature_tests  = getenv('srctree') + '/tools/build/feature'
      8
      9def clang_has_option(option):
     10    cc_output = Popen([cc, option, path.join(src_feature_tests, "test-hello.c") ], stderr=PIPE).stderr.readlines()
     11    return [o for o in cc_output if ((b"unknown argument" in o) or (b"is not supported" in o))] == [ ]
     12
     13if cc_is_clang:
     14    from distutils.sysconfig import get_config_vars
     15    vars = get_config_vars()
     16    for var in ('CFLAGS', 'OPT'):
     17        vars[var] = sub("-specs=[^ ]+", "", vars[var])
     18        if not clang_has_option("-mcet"):
     19            vars[var] = sub("-mcet", "", vars[var])
     20        if not clang_has_option("-fcf-protection"):
     21            vars[var] = sub("-fcf-protection", "", vars[var])
     22        if not clang_has_option("-fstack-clash-protection"):
     23            vars[var] = sub("-fstack-clash-protection", "", vars[var])
     24        if not clang_has_option("-fstack-protector-strong"):
     25            vars[var] = sub("-fstack-protector-strong", "", vars[var])
     26        if not clang_has_option("-fno-semantic-interposition"):
     27            vars[var] = sub("-fno-semantic-interposition", "", vars[var])
     28        if not clang_has_option("-ffat-lto-objects"):
     29            vars[var] = sub("-ffat-lto-objects", "", vars[var])
     30
     31from distutils.core import setup, Extension
     32
     33from distutils.command.build_ext   import build_ext   as _build_ext
     34from distutils.command.install_lib import install_lib as _install_lib
     35
     36class build_ext(_build_ext):
     37    def finalize_options(self):
     38        _build_ext.finalize_options(self)
     39        self.build_lib  = build_lib
     40        self.build_temp = build_tmp
     41
     42class install_lib(_install_lib):
     43    def finalize_options(self):
     44        _install_lib.finalize_options(self)
     45        self.build_dir = build_lib
     46
     47
     48cflags = getenv('CFLAGS', '').split()
     49# switch off several checks (need to be at the end of cflags list)
     50cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-DPYTHON_PERF' ]
     51if not cc_is_clang:
     52    cflags += ['-Wno-cast-function-type' ]
     53
     54src_perf  = getenv('srctree') + '/tools/perf'
     55build_lib = getenv('PYTHON_EXTBUILD_LIB')
     56build_tmp = getenv('PYTHON_EXTBUILD_TMP')
     57libtraceevent = getenv('LIBTRACEEVENT')
     58libapikfs = getenv('LIBAPI')
     59libperf = getenv('LIBPERF')
     60
     61ext_sources = [f.strip() for f in open('util/python-ext-sources')
     62				if len(f.strip()) > 0 and f[0] != '#']
     63
     64# use full paths with source files
     65ext_sources = list(map(lambda x: '%s/%s' % (src_perf, x) , ext_sources))
     66
     67extra_libraries = []
     68if '-DHAVE_LIBNUMA_SUPPORT' in cflags:
     69    extra_libraries = [ 'numa' ]
     70if '-DHAVE_LIBCAP_SUPPORT' in cflags:
     71    extra_libraries += [ 'cap' ]
     72
     73perf = Extension('perf',
     74		  sources = ext_sources,
     75		  include_dirs = ['util/include'],
     76		  libraries = extra_libraries,
     77		  extra_compile_args = cflags,
     78		  extra_objects = [libtraceevent, libapikfs, libperf],
     79                 )
     80
     81setup(name='perf',
     82      version='0.1',
     83      description='Interface with the Linux profiling infrastructure',
     84      author='Arnaldo Carvalho de Melo',
     85      author_email='acme@redhat.com',
     86      license='GPLv2',
     87      url='http://perf.wiki.kernel.org',
     88      ext_modules=[perf],
     89      cmdclass={'build_ext': build_ext, 'install_lib': install_lib})