scons: Create a Configure checker for pkg-config.
This will check if a pkg-config package exists at all, and then if it does will attempt to use the supplied pkg-config arguments and ParseConfig to set up the environment as needed. Change-Id: I1495e5370b60dcebb1c9ce38517e84d727abc2fd Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/40866 Tested-by: kokoro <noreply+kokoro@google.com> Maintainer: Gabe Black <gabe.black@gmail.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
23
SConstruct
23
SConstruct
@@ -484,14 +484,7 @@ try:
|
|||||||
# check go a library config check and at that point the test
|
# check go a library config check and at that point the test
|
||||||
# will fail if libprotobuf cannot be found.
|
# will fail if libprotobuf cannot be found.
|
||||||
if have_pkg_config:
|
if have_pkg_config:
|
||||||
try:
|
conf.CheckPkgConfig('protobuf', '--cflags', '--libs-only-L')
|
||||||
# Attempt to establish what linking flags to add for
|
|
||||||
# protobuf
|
|
||||||
# using pkg-config
|
|
||||||
main.ParseConfig(
|
|
||||||
'pkg-config --cflags --libs-only-L protobuf')
|
|
||||||
except:
|
|
||||||
warning('pkg-config could not get protobuf flags.')
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
warning('While checking protoc version:', str(e))
|
warning('While checking protoc version:', str(e))
|
||||||
main['HAVE_PROTOC'] = False
|
main['HAVE_PROTOC'] = False
|
||||||
@@ -724,23 +717,13 @@ def is_isa_kvm_compatible(isa):
|
|||||||
main['HAVE_PERF_ATTR_EXCLUDE_HOST'] = conf.CheckMember(
|
main['HAVE_PERF_ATTR_EXCLUDE_HOST'] = conf.CheckMember(
|
||||||
'linux/perf_event.h', 'struct perf_event_attr', 'exclude_host')
|
'linux/perf_event.h', 'struct perf_event_attr', 'exclude_host')
|
||||||
|
|
||||||
def check_hdf5_pkg(name):
|
|
||||||
print("Checking for %s using pkg-config..." % name, end="")
|
|
||||||
try:
|
|
||||||
main.ParseConfig('pkg-config --cflags-only-I --libs-only-L %s' % name)
|
|
||||||
except:
|
|
||||||
print(" no")
|
|
||||||
return False
|
|
||||||
print(" yes")
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Check if there is a pkg-config configuration for hdf5. If we find
|
# Check if there is a pkg-config configuration for hdf5. If we find
|
||||||
# it, setup the environment to enable linking and header inclusion. We
|
# it, setup the environment to enable linking and header inclusion. We
|
||||||
# don't actually try to include any headers or link with hdf5 at this
|
# don't actually try to include any headers or link with hdf5 at this
|
||||||
# stage.
|
# stage.
|
||||||
if have_pkg_config:
|
if have_pkg_config:
|
||||||
if not check_hdf5_pkg('hdf5-serial'):
|
conf.CheckPkgConfig(['hdf5-serial', 'hdf5'],
|
||||||
check_hdf5_pkg('hdf5')
|
'--cflags-only-I', '--libs-only-L')
|
||||||
|
|
||||||
# Check if the HDF5 libraries can be found. This check respects the
|
# Check if the HDF5 libraries can be found. This check respects the
|
||||||
# include path and library path provided by pkg-config. We perform
|
# include path and library path provided by pkg-config. We perform
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import SCons.Script
|
import SCons.Script
|
||||||
|
import SCons.Util
|
||||||
|
|
||||||
def CheckCxxFlag(context, flag, autoadd=True):
|
def CheckCxxFlag(context, flag, autoadd=True):
|
||||||
context.Message("Checking for compiler %s support... " % flag)
|
context.Message("Checking for compiler %s support... " % flag)
|
||||||
@@ -106,6 +107,33 @@ main(int argc, char **argv) {
|
|||||||
else:
|
else:
|
||||||
return tuple(map(int, ret[1].split(".")))
|
return tuple(map(int, ret[1].split(".")))
|
||||||
|
|
||||||
|
def CheckPkgConfig(context, pkgs, *args):
|
||||||
|
if not SCons.Util.is_List(pkgs):
|
||||||
|
pkgs = [pkgs]
|
||||||
|
assert(pkgs)
|
||||||
|
|
||||||
|
for pkg in pkgs:
|
||||||
|
context.Message('Checking for pkg-config package %s... ' % pkg)
|
||||||
|
ret = context.TryAction('pkg-config %s' % pkg)[0]
|
||||||
|
if not ret:
|
||||||
|
context.Result(ret)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if len(args) == 0:
|
||||||
|
break
|
||||||
|
|
||||||
|
cmd = ' '.join(['pkg-config'] + list(args) + [pkg])
|
||||||
|
try:
|
||||||
|
context.env.ParseConfig(cmd)
|
||||||
|
ret = 1
|
||||||
|
context.Result(ret)
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
ret = 0
|
||||||
|
context.Result(ret)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
def Configure(env, *args, **kwargs):
|
def Configure(env, *args, **kwargs):
|
||||||
kwargs.setdefault('conf_dir',
|
kwargs.setdefault('conf_dir',
|
||||||
os.path.join(env['BUILDROOT'], '.scons_config'))
|
os.path.join(env['BUILDROOT'], '.scons_config'))
|
||||||
@@ -113,10 +141,11 @@ def Configure(env, *args, **kwargs):
|
|||||||
os.path.join(env['BUILDROOT'], 'scons_config.log'))
|
os.path.join(env['BUILDROOT'], 'scons_config.log'))
|
||||||
kwargs.setdefault('custom_tests', {})
|
kwargs.setdefault('custom_tests', {})
|
||||||
kwargs['custom_tests'].update({
|
kwargs['custom_tests'].update({
|
||||||
'CheckMember' : CheckMember,
|
|
||||||
'CheckPythonLib' : CheckPythonLib,
|
|
||||||
'CheckCxxFlag' : CheckCxxFlag,
|
'CheckCxxFlag' : CheckCxxFlag,
|
||||||
'CheckLinkFlag' : CheckLinkFlag,
|
'CheckLinkFlag' : CheckLinkFlag,
|
||||||
|
'CheckMember' : CheckMember,
|
||||||
|
'CheckPkgConfig' : CheckPkgConfig,
|
||||||
|
'CheckPythonLib' : CheckPythonLib,
|
||||||
})
|
})
|
||||||
conf = SCons.Script.Configure(env, *args, **kwargs)
|
conf = SCons.Script.Configure(env, *args, **kwargs)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user