blob: b4f8f7fa2b3975c189fa8a87519184d9789e8fa3 [file] [log] [blame]
Alexander Afanasyev1160baa2014-04-10 18:50:29 -07001#! /usr/bin/env python
2# encoding: utf-8
3
4from waflib import Logs, Utils, Task, TaskGen
5from waflib.Tools import c_preproc
6
7def options(opt):
8 opt.add_option('--with-pch', action='store_true', default=False, dest='with_pch',
9 help='''Try to use precompiled header to speed up compilation '''
10 '''(only gcc and clang)''')
11
12def configure(conf):
13 conf.env['WITH_PCH'] = conf.options.with_pch
14
15
16@TaskGen.feature('cxx')
17@TaskGen.before('process_source')
18def process_pch(self):
19 if getattr(self, 'pch', ''):
20 # for now support only gcc-compatible things
21 if self.env['COMPILER_CXX'] == 'g++':
22 nodes = self.to_nodes(self.pch, path=self.path)
23 for x in nodes:
24 z = self.create_task('gchx', x, x.change_ext('.hpp.gch'))
25 z.orig_self = self
26
27class gchx(Task.Task):
28 run_str = '${CXX} -x c++-header ${CXXFLAGS} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ' + \
29 '${CPPPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ' + \
30 '${CXX_SRC_F}${SRC} ${CXX_TGT_F}${TGT}'
31 scan = c_preproc.scan
32 ext_out = ['.hpp']
33 color = 'BLUE'
34
35 def post_run(self):
36 super(gchx, self).post_run()
37 self.orig_self.env['CXXFLAGS'] = ['-include', self.inputs[0].relpath()] + \
38 self.env['CXXFLAGS']