diff options
| author | Bernard Xiong <[email protected]> | 2013-07-09 13:54:20 -0700 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2013-07-09 13:54:20 -0700 |
| commit | bac27a11a43c9c8b6b6be9844cf9532fe5fd6b3d (patch) | |
| tree | 34a3df38ab54c99e60e7a01b4a6201c7da621505 | |
| parent | 198a6a162aced2f21289407755ee624c7d373c34 (diff) | |
| parent | 34027e65e3cd9844d2c001e4004ca63b61126a0f (diff) | |
Merge pull request #122 from grissiom/clang-analyzer
building.py: add clang static analyzer support
| -rw-r--r-- | tools/building.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tools/building.py b/tools/building.py index 6b752674b5..3a34788809 100644 --- a/tools/building.py +++ b/tools/building.py @@ -88,6 +88,31 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ action='store_true', default=False, help='Build Cscope cross reference database. Requires cscope installed.') + AddOption('--clang-analyzer', + dest='clang-analyzer', + action='store_true', + default=False, + help='Perform static analyze with Clang-analyzer. '+\ + 'Requires Clang installed.\n'+\ + 'It is recommended to use with scan-build like this:\n'+\ + '`scan-build scons --clang-analyzer`\n'+\ + 'If things goes well, scan-build will instruct you to invoke scan-view.') + + if GetOption('clang-analyzer'): + # perform what scan-build does + env.Replace( + CC = 'ccc-analyzer', + CXX = 'c++-analyzer', + # skip as and link + LINK = 'true', + AS = 'true',) + env["ENV"].update(x for x in os.environ.items() if x[0].startswith("CCC_")) + # only check, don't compile. ccc-analyzer use CCC_CC as the CC. + env['ENV']['CCC_CC'] = 'true' + env['ENV']['CCC_CXX'] = 'true' + # remove the POST_ACTION as it will cause meaningless errors(file not + # found or something like that). + rtconfig.POST_ACTION = '' # add build library option AddOption('--buildlib', @@ -109,6 +134,12 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ 'cb':('keil', 'armcc')} tgt_name = GetOption('target') if tgt_name: + # --target will change the toolchain settings which clang-analyzer is + # depend on + if GetOption('clang-analyzer'): + print '--clang-analyzer cannot be used with --target' + sys.exit(1) + SetOption('no_exec', 1) try: rtconfig.CROSS_TOOL, rtconfig.PLATFORM = tgt_dict[tgt_name] |
