Skip to content

Commit ce32ce7

Browse files
authored
Merge pull request #3662 from bdbaddog/add_compilation_db
Add compilation db for use by clang tools and cquery (fix issue #3355)
2 parents 7822e53 + c282967 commit ce32ce7

File tree

16 files changed

+719
-129
lines changed

16 files changed

+719
-129
lines changed

CHANGES.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER
4747
- Speedup bin/docs-update-generated by caching parsed docbook schema. (60x speedup)
4848
- Reorganized source tree. Moved src/engine/SCons to SCons to be more in line with current Python source
4949
tree organization practices.
50+
- Renamed as.py to asm.py and left redirecting tool. 'as' is a reserved word and so
51+
changing the name was required as we wanted to import symbols for use in compilation_db
52+
tool.
53+
- Add CompilationDatabase() builder in compilation_db tool. Contributed by MongoDB.
54+
Setting COMPILATIONDB_USE_ABSPATH to True|False controls whether the files are absolute or relative
55+
paths.
5056

5157
From Andrii Doroshenko:
5258
- Extended `Environment.Dump()` to select a format to serialize construction variables (pretty, json).

SCons/Tool/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,14 @@
9494
SourceFileScanner.add_scanner(suffix, PDFLaTeXScanner)
9595

9696
# Tool aliases are needed for those tools whose module names also
97-
# occur in the python standard library. This causes module shadowing and
98-
# can break using python library functions under python3
97+
# occur in the python standard library (This causes module shadowing and
98+
# can break using python library functions under python3) or if the current tool/file names
99+
# are not legal module names (violate python's identifier rules or are
100+
# python language keywords).
99101
TOOL_ALIASES = {
100102
'gettext': 'gettext_tool',
101103
'clang++': 'clangxx',
104+
'as': 'asm',
102105
}
103106

104107

SCons/Tool/as.py

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
"""SCons.Tool.as
22
3-
Tool-specific initialization for as, the generic Posix assembler.
3+
Tool-specific initialization for generic assembler.
44
55
There normally shouldn't be any need to import this module directly.
66
It will usually be imported through the generic SCons.Tool.Tool()
77
selection method.
8-
98
"""
109

1110
#
@@ -33,43 +32,15 @@
3332

3433
__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
3534

36-
import SCons.Defaults
37-
import SCons.Tool
38-
import SCons.Util
39-
40-
assemblers = ['as']
41-
42-
ASSuffixes = ['.s', '.asm', '.ASM']
43-
ASPPSuffixes = ['.spp', '.SPP', '.sx']
44-
if SCons.Util.case_sensitive_suffixes('.s', '.S'):
45-
ASPPSuffixes.extend(['.S'])
46-
else:
47-
ASSuffixes.extend(['.S'])
48-
49-
def generate(env):
50-
"""Add Builders and construction variables for as to an Environment."""
51-
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
52-
53-
for suffix in ASSuffixes:
54-
static_obj.add_action(suffix, SCons.Defaults.ASAction)
55-
shared_obj.add_action(suffix, SCons.Defaults.ASAction)
56-
static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
57-
shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
58-
59-
for suffix in ASPPSuffixes:
60-
static_obj.add_action(suffix, SCons.Defaults.ASPPAction)
61-
shared_obj.add_action(suffix, SCons.Defaults.ASPPAction)
62-
static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
63-
shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
35+
#
36+
# forward proxy to the preferred asm version
37+
#
38+
import SCons.Tool.asm
6439

65-
env['AS'] = env.Detect(assemblers) or 'as'
66-
env['ASFLAGS'] = SCons.Util.CLVar('')
67-
env['ASCOM'] = '$AS $ASFLAGS -o $TARGET $SOURCES'
68-
env['ASPPFLAGS'] = '$ASFLAGS'
69-
env['ASPPCOM'] = '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES'
40+
# Resolve FLAKE8 F401 (make sider happy)
41+
generate = SCons.Tool.asm.generate
42+
exists = SCons.Tool.asm.exists
7043

71-
def exists(env):
72-
return env.Detect(assemblers)
7344

7445
# Local Variables:
7546
# tab-width:4

SCons/Tool/asm.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
"""SCons.Tool.as
2+
3+
Tool-specific initialization for as, the generic Posix assembler.
4+
5+
There normally shouldn't be any need to import this module directly.
6+
It will usually be imported through the generic SCons.Tool.Tool()
7+
selection method.
8+
9+
"""
10+
11+
#
12+
# __COPYRIGHT__
13+
#
14+
# Permission is hereby granted, free of charge, to any person obtaining
15+
# a copy of this software and associated documentation files (the
16+
# "Software"), to deal in the Software without restriction, including
17+
# without limitation the rights to use, copy, modify, merge, publish,
18+
# distribute, sublicense, and/or sell copies of the Software, and to
19+
# permit persons to whom the Software is furnished to do so, subject to
20+
# the following conditions:
21+
#
22+
# The above copyright notice and this permission notice shall be included
23+
# in all copies or substantial portions of the Software.
24+
#
25+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
26+
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
27+
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32+
#
33+
34+
__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
35+
36+
import SCons.Defaults
37+
import SCons.Tool
38+
import SCons.Util
39+
40+
assemblers = ['as']
41+
42+
ASSuffixes = ['.s', '.asm', '.ASM']
43+
ASPPSuffixes = ['.spp', '.SPP', '.sx']
44+
if SCons.Util.case_sensitive_suffixes('.s', '.S'):
45+
ASPPSuffixes.extend(['.S'])
46+
else:
47+
ASSuffixes.extend(['.S'])
48+
49+
def generate(env):
50+
"""Add Builders and construction variables for as to an Environment."""
51+
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
52+
53+
for suffix in ASSuffixes:
54+
static_obj.add_action(suffix, SCons.Defaults.ASAction)
55+
shared_obj.add_action(suffix, SCons.Defaults.ASAction)
56+
static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
57+
shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
58+
59+
for suffix in ASPPSuffixes:
60+
static_obj.add_action(suffix, SCons.Defaults.ASPPAction)
61+
shared_obj.add_action(suffix, SCons.Defaults.ASPPAction)
62+
static_obj.add_emitter(suffix, SCons.Defaults.StaticObjectEmitter)
63+
shared_obj.add_emitter(suffix, SCons.Defaults.SharedObjectEmitter)
64+
65+
env['AS'] = env.Detect(assemblers) or 'as'
66+
env['ASFLAGS'] = SCons.Util.CLVar('')
67+
env['ASCOM'] = '$AS $ASFLAGS -o $TARGET $SOURCES'
68+
env['ASPPFLAGS'] = '$ASFLAGS'
69+
env['ASPPCOM'] = '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES'
70+
71+
def exists(env):
72+
return env.Detect(assemblers)
73+
74+
# Local Variables:
75+
# tab-width:4
76+
# indent-tabs-mode:nil
77+
# End:
78+
# vim: set expandtab tabstop=4 shiftwidth=4:

0 commit comments

Comments
 (0)