aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers/c.py
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2018-04-13 04:01:35 +0530
committerJussi Pakkanen <jpakkane@gmail.com>2018-04-14 22:14:11 +0300
commit2e5b2813d55f374e684f7ec9095cc681e30d8f46 (patch)
tree75acda0cf6bacde148454057fe3b81d7f9d9a00f /mesonbuild/compilers/c.py
parent798d841348d01c1e96e9a9ea1f1f689dbfa5518a (diff)
downloadmeson-2e5b2813d55f374e684f7ec9095cc681e30d8f46.zip
meson-2e5b2813d55f374e684f7ec9095cc681e30d8f46.tar.gz
meson-2e5b2813d55f374e684f7ec9095cc681e30d8f46.tar.bz2
compilers: Cache compiler checks where we don't want the output
This caching is only for a single run, so it doesn't help reconfigure. However, it is useful for subproject setups where different subprojects will run the same compiler checks. The cache is also per compiler instance and is not used for functions that want to read or run the outputted object file or binary. For gst-build, this halves the number of compiler checks that are run and reduces configuration time by 20%.
Diffstat (limited to 'mesonbuild/compilers/c.py')
-rw-r--r--mesonbuild/compilers/c.py10
1 files changed, 5 insertions, 5 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index 27cf43a..dee5125 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -319,16 +319,16 @@ class CCompiler(Compiler):
args += extra_args
return args
- def compiles(self, code, env, extra_args=None, dependencies=None, mode='compile'):
+ def compiles(self, code, env, extra_args=None, dependencies=None, mode='compile', want_output=False):
args = self._get_compiler_check_args(env, extra_args, dependencies, mode)
# We only want to compile; not link
with self.compile(code, args.to_native(), mode) as p:
return p.returncode == 0
- def _links_wrapper(self, code, env, extra_args, dependencies):
+ def _links_wrapper(self, code, env, extra_args, dependencies, want_output=False):
"Shares common code between self.links and self.run"
args = self._get_compiler_check_args(env, extra_args, dependencies, mode='link')
- return self.compile(code, args)
+ return self.compile(code, args, want_output=want_output)
def links(self, code, env, extra_args=None, dependencies=None):
with self._links_wrapper(code, env, extra_args, dependencies) as p:
@@ -337,7 +337,7 @@ class CCompiler(Compiler):
def run(self, code, env, extra_args=None, dependencies=None):
if self.is_cross and self.exe_wrapper is None:
raise CrossNoRunException('Can not run test applications in this cross environment.')
- with self._links_wrapper(code, env, extra_args, dependencies) as p:
+ with self._links_wrapper(code, env, extra_args, dependencies, True) as p:
if p.returncode != 0:
mlog.debug('Could not compile test file %s: %d\n' % (
p.input_name,
@@ -736,7 +736,7 @@ class CCompiler(Compiler):
args = self.get_cross_extra_flags(env, link=False)
args += self.get_compiler_check_args()
n = 'symbols_have_underscore_prefix'
- with self.compile(code, args, 'compile') as p:
+ with self.compile(code, args, 'compile', want_output=True) as p:
if p.returncode != 0:
m = 'BUG: Unable to compile {!r} check: {}'
raise RuntimeError(m.format(n, p.stdo))