LLVMBuild: Introduce a common section which currently has a list of the

subdirectories to traverse into.
 - Originally I wanted to avoid this and just autoscan, but this has one key
   flaw in that new subdirectories can not automatically trigger a rerun of the
   llvm-build tool. This is particularly a pain when switching back and forth
   between trees where one has added a subdirectory, as the dependencies will
   tend to be wrong. This will also eliminates FIXME implicitly.

llvm-svn: 146436
This commit is contained in:
Daniel Dunbar 2011-12-12 22:45:54 +00:00
parent 495f7b57f8
commit b72534060e
26 changed files with 112 additions and 10 deletions

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = bindings docs examples lib projects runtime tools utils
[component_0]
type = Group
name = Miscellaneous

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = IPA
[component_0]
type = Library
name = Analysis

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = Reader Writer
[component_0]
type = Group
name = Bitcode

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = AsmPrinter SelectionDAG
[component_0]
type = Library
name = CodeGen

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = Interpreter JIT MCJIT RuntimeDyld
[component_0]
type = Library
name = ExecutionEngine

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = Analysis Archive AsmParser Bitcode CodeGen DebugInfo ExecutionEngine Linker MC Object Support TableGen Target Transforms VMCore
[component_0]
type = Group
name = Libraries

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = MCDisassembler MCParser
[component_0]
type = Library
name = MC

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = AsmParser Disassembler InstPrinter MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = ARM

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = TargetInfo
[component_0]
type = TargetGroup
name = CBackend

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = CellSPU

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = TargetInfo
[component_0]
type = TargetGroup
name = CppBackend

View File

@ -1,4 +1,4 @@
;===- ./lib/Target/Hexagon/LLVMBuild.txt ----------------------*- Conf -*--===;
;===- ./lib/Target/Hexagon/LLVMBuild.txt -----------------------*- Conf -*--===;
;
; The LLVM Compiler Infrastructure
;
@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = TargetInfo
[component_0]
type = TargetGroup
name = Hexagon
@ -27,4 +30,3 @@ name = HexagonCodeGen
parent = Hexagon
required_libraries = AsmPrinter CodeGen Core HexagonInfo SelectionDAG Support Target MC
add_to_library_groups = Hexagon

View File

@ -21,4 +21,3 @@ name = HexagonInfo
parent = Hexagon
required_libraries = MC Support
add_to_library_groups = Hexagon

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = ARM CBackend CellSPU CppBackend Hexagon MBlaze MSP430 Mips PTX PowerPC Sparc X86 XCore
; This is a special group whose required libraries are extended (by llvm-build)
; with the best execution engine (the native JIT, if available, or the
; interpreter).

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = AsmParser Disassembler InstPrinter MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = MBlaze

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = InstPrinter MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = MSP430

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = InstPrinter MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = Mips

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = InstPrinter MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = PTX

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = InstPrinter MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = PowerPC

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = Sparc

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = AsmParser Disassembler InstPrinter MCTargetDesc TargetInfo Utils
[component_0]
type = TargetGroup
name = X86

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = MCTargetDesc TargetInfo
[component_0]
type = TargetGroup
name = XCore

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = IPO InstCombine Instrumentation Scalar Utils
[component_0]
type = Group
name = Transforms

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = bugpoint llc lli llvm-ar llvm-as llvm-bcanalyzer llvm-cov llvm-diff llvm-dis llvm-dwarfdump llvm-extract llvm-ld llvm-link llvm-mc llvm-nm llvm-objdump llvm-prof llvm-ranlib llvm-rtdyld llvm-size llvm-stub macho-dump opt
[component_0]
type = Group
name = Tools

View File

@ -15,6 +15,9 @@
;
;===------------------------------------------------------------------------===;
[common]
subdirectories = TableGen unittest
[component_0]
type = Group
name = BuildTools

View File

@ -214,14 +214,45 @@ class LLVMProjectInfo(object):
info_basedir[ci.subpath] = info_basedir.get(ci.subpath, []) + [ci]
# Compute the list of subdirectories to scan.
subpath_subdirs = {}
for ci in self.component_infos:
# Ignore root components.
if ci.subpath == '/':
continue
# Otherwise, append this subpath to the parent list.
parent_path = os.path.dirname(ci.subpath)
subpath_subdirs[parent_path] = parent_list = subpath_subdirs.get(
parent_path, set())
parent_list.add(os.path.basename(ci.subpath))
# Generate the build files.
for subpath, infos in info_basedir.items():
# Order the components by name to have a canonical ordering.
infos.sort(key = lambda ci: ci.name)
# Format the components into llvmbuild fragments.
fragments = filter(None, [ci.get_llvmbuild_fragment()
for ci in infos])
fragments = []
# Add the common fragments.
subdirectories = subpath_subdirs.get(subpath)
if subdirectories:
fragment = """\
subdirectories = %s
""" % (" ".join(sorted(subdirectories)),)
fragments.append(("common", fragment))
# Add the component fragments.
num_common_fragments = len(fragments)
for ci in infos:
fragment = ci.get_llvmbuild_fragment()
if fragment is None:
continue
name = "component_%d" % (len(fragments) - num_common_fragments)
fragments.append((name, fragment))
if not fragments:
continue
@ -242,7 +273,7 @@ class LLVMProjectInfo(object):
if ln.startswith(';'):
comment_block += ln
elif ln.startswith('[') and ln.endswith(']\n'):
comments_map[ln[:-1]] = comment_block
comments_map[ln[1:-2]] = comment_block
else:
comment_block = ""
f.close()
@ -275,15 +306,16 @@ class LLVMProjectInfo(object):
;===------------------------------------------------------------------------===;
""" % header_string
for i,fragment in enumerate(fragments):
name = '[component_%d]' % i
# Write out each fragment.each component fragment.
for name,fragment in fragments:
comment = comments_map.get(name)
if comment is not None:
f.write(comment)
print >>f, name
print >>f, "[%s]" % name
f.write(fragment)
if fragment is not fragments[-1]:
if fragment is not fragments[-1][1]:
print >>f
f.close()
def write_library_table(self, output_path):