diff options
-rw-r--r-- | docs/LLVMBuild.html | 24 | ||||
-rw-r--r-- | lib/Target/ARM/LLVMBuild.txt | 3 | ||||
-rw-r--r-- | lib/Target/CBackend/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | lib/Target/CellSPU/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | lib/Target/CppBackend/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | lib/Target/MBlaze/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | lib/Target/MSP430/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | lib/Target/Mips/LLVMBuild.txt | 3 | ||||
-rw-r--r-- | lib/Target/PTX/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | lib/Target/PowerPC/LLVMBuild.txt | 3 | ||||
-rw-r--r-- | lib/Target/Sparc/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | lib/Target/X86/LLVMBuild.txt | 3 | ||||
-rw-r--r-- | lib/Target/XCore/LLVMBuild.txt | 2 | ||||
-rw-r--r-- | utils/llvm-build/llvmbuild/componentinfo.py | 72 | ||||
-rw-r--r-- | utils/llvm-build/llvmbuild/main.py | 10 |
15 files changed, 112 insertions, 22 deletions
diff --git a/docs/LLVMBuild.html b/docs/LLVMBuild.html index bb1883a..1616b2d 100644 --- a/docs/LLVMBuild.html +++ b/docs/LLVMBuild.html @@ -134,7 +134,7 @@ $ROOT of project trees for things which can be checked out separately. --> </div> <!-- *********************************************************************** --> -<h2><a name="formatref">LLVMBuild Format Reference</a></h2> +<h2><a name="formatreference">LLVMBuild Format Reference</a></h2> <!-- *********************************************************************** --> <div> @@ -151,11 +151,12 @@ $ROOT of project trees for things which can be checked out separately. --> <i>; Properties are declared using '=' and are contained in the previous section. ; -; We support simple scalar values and list values, where items are separated by -; spaces. There is no support for quoting, and so property values may not contain -; spaces.</i> +; We support simple string and boolean scalar values and list values, where +; items are separated by spaces. There is no support for quoting, and so +; property values may not contain spaces.</i> property_name = property_value list_property_name = value_1 value_2 <em>...</em> value_n +boolean_property_name = 1 <em>(or 0)</em> </pre> </div> @@ -281,6 +282,21 @@ required_libraries = Archive BitReader Core Support TransformUtils </ul> </li> + <li><i>type = TargetGroup</i> + <p>TargetGroup components are an extension of LibraryGroups, specifically + for defining LLVM targets (which are handled specially in a few + places).</p> + + <p>The name of the component should always be the name of the target.</p> + + <p>Components with this type use the LibraryGroup properties in addition + to:</p> + <ul> + <li><i>has_jit</i> <b>[optional]</b> <b>[boolean]</b> + <p>Whether this target supports JIT compilation.</p></li> + </ul> + </li> + <li><i>type = Tool</i> <p>Tool components define standalone command line tools which should be built from the source code in the component directory and linked.</p> diff --git a/lib/Target/ARM/LLVMBuild.txt b/lib/Target/ARM/LLVMBuild.txt index a7f209c..cfac6ac 100644 --- a/lib/Target/ARM/LLVMBuild.txt +++ b/lib/Target/ARM/LLVMBuild.txt @@ -16,10 +16,11 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = ARM parent = Target add_to_library_groups = all-targets +has_jit = 1 [component_1] type = Library diff --git a/lib/Target/CBackend/LLVMBuild.txt b/lib/Target/CBackend/LLVMBuild.txt index 1bc5ea1..7cd420b 100644 --- a/lib/Target/CBackend/LLVMBuild.txt +++ b/lib/Target/CBackend/LLVMBuild.txt @@ -16,7 +16,7 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = CBackend parent = Target add_to_library_groups = all-targets diff --git a/lib/Target/CellSPU/LLVMBuild.txt b/lib/Target/CellSPU/LLVMBuild.txt index 03e592c..e8db9f3 100644 --- a/lib/Target/CellSPU/LLVMBuild.txt +++ b/lib/Target/CellSPU/LLVMBuild.txt @@ -16,7 +16,7 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = CellSPU parent = Target add_to_library_groups = all-targets diff --git a/lib/Target/CppBackend/LLVMBuild.txt b/lib/Target/CppBackend/LLVMBuild.txt index 9602f57..447795f 100644 --- a/lib/Target/CppBackend/LLVMBuild.txt +++ b/lib/Target/CppBackend/LLVMBuild.txt @@ -16,7 +16,7 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = CppBackend parent = Target add_to_library_groups = all-targets diff --git a/lib/Target/MBlaze/LLVMBuild.txt b/lib/Target/MBlaze/LLVMBuild.txt index 7bea268..b953e3d 100644 --- a/lib/Target/MBlaze/LLVMBuild.txt +++ b/lib/Target/MBlaze/LLVMBuild.txt @@ -16,7 +16,7 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = MBlaze parent = Target add_to_library_groups = all-targets diff --git a/lib/Target/MSP430/LLVMBuild.txt b/lib/Target/MSP430/LLVMBuild.txt index 3081146..8b0b1f6 100644 --- a/lib/Target/MSP430/LLVMBuild.txt +++ b/lib/Target/MSP430/LLVMBuild.txt @@ -16,7 +16,7 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = MSP430 parent = Target add_to_library_groups = all-targets diff --git a/lib/Target/Mips/LLVMBuild.txt b/lib/Target/Mips/LLVMBuild.txt index b9d9abf..bcec4a9 100644 --- a/lib/Target/Mips/LLVMBuild.txt +++ b/lib/Target/Mips/LLVMBuild.txt @@ -16,10 +16,11 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = Mips parent = Target add_to_library_groups = all-targets +has_jit = 1 [component_1] type = Library diff --git a/lib/Target/PTX/LLVMBuild.txt b/lib/Target/PTX/LLVMBuild.txt index 2d24524..27119c2 100644 --- a/lib/Target/PTX/LLVMBuild.txt +++ b/lib/Target/PTX/LLVMBuild.txt @@ -16,7 +16,7 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = PTX parent = Target add_to_library_groups = all-targets diff --git a/lib/Target/PowerPC/LLVMBuild.txt b/lib/Target/PowerPC/LLVMBuild.txt index 4a93587..3c439f3 100644 --- a/lib/Target/PowerPC/LLVMBuild.txt +++ b/lib/Target/PowerPC/LLVMBuild.txt @@ -16,10 +16,11 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = PowerPC parent = Target add_to_library_groups = all-targets +has_jit = 1 [component_1] type = Library diff --git a/lib/Target/Sparc/LLVMBuild.txt b/lib/Target/Sparc/LLVMBuild.txt index 21cd91f..f59cc2e 100644 --- a/lib/Target/Sparc/LLVMBuild.txt +++ b/lib/Target/Sparc/LLVMBuild.txt @@ -16,7 +16,7 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = Sparc parent = Target add_to_library_groups = all-targets diff --git a/lib/Target/X86/LLVMBuild.txt b/lib/Target/X86/LLVMBuild.txt index b0958f3..7f48a9e 100644 --- a/lib/Target/X86/LLVMBuild.txt +++ b/lib/Target/X86/LLVMBuild.txt @@ -16,10 +16,11 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = X86 parent = Target add_to_library_groups = all-targets +has_jit = 1 [component_1] type = Library diff --git a/lib/Target/XCore/LLVMBuild.txt b/lib/Target/XCore/LLVMBuild.txt index 321f25f..41943c3 100644 --- a/lib/Target/XCore/LLVMBuild.txt +++ b/lib/Target/XCore/LLVMBuild.txt @@ -16,7 +16,7 @@ ;===------------------------------------------------------------------------===; [component_0] -type = LibraryGroup +type = TargetGroup name = XCore parent = Target add_to_library_groups = all-targets diff --git a/utils/llvm-build/llvmbuild/componentinfo.py b/utils/llvm-build/llvmbuild/componentinfo.py index fb45571..00b8ac5 100644 --- a/utils/llvm-build/llvmbuild/componentinfo.py +++ b/utils/llvm-build/llvmbuild/componentinfo.py @@ -188,6 +188,60 @@ class LibraryGroupComponentInfo(ComponentInfo): def get_llvmconfig_component_name(self): return self.name.lower() +class TargetGroupComponentInfo(ComponentInfo): + type_name = 'TargetGroup' + + @staticmethod + def parse(subpath, items): + kwargs = ComponentInfo.parse_items(items, has_dependencies = False) + kwargs['required_libraries'] = items.get_list('required_libraries') + kwargs['add_to_library_groups'] = items.get_list( + 'add_to_library_groups') + kwargs['has_jit'] = items.get_optional_bool('has_jit', False) + return TargetGroupComponentInfo(subpath, **kwargs) + + def __init__(self, subpath, name, parent, required_libraries = [], + add_to_library_groups = [], has_jit = False): + ComponentInfo.__init__(self, subpath, name, [], parent) + + # The names of the library components which are required when linking + # with this component. + self.required_libraries = list(required_libraries) + + # The names of the library group components this component should be + # considered part of. + self.add_to_library_groups = list(add_to_library_groups) + + # Whether or not this target supports the JIT. + self.has_jit = bool(has_jit) + + def get_component_references(self): + for r in ComponentInfo.get_component_references(self): + yield r + for r in self.required_libraries: + yield ('required library', r) + for r in self.add_to_library_groups: + yield ('library group', r) + + def get_llvmbuild_fragment(self): + result = StringIO.StringIO() + print >>result, 'type = %s' % self.type_name + print >>result, 'name = %s' % self.name + print >>result, 'parent = %s' % self.parent + if self.required_libraries: + print >>result, 'required_libraries = %s' % ' '.join( + self.required_libraries) + if self.add_to_library_groups: + print >>result, 'add_to_library_groups = %s' % ' '.join( + self.add_to_library_groups) + if self.has_jit: + print >>result, 'has_jit = %s' % ' '.join( + int(self.has_jit)) + return result.getvalue() + + def get_llvmconfig_component_name(self): + return self.name.lower() + class ToolComponentInfo(ComponentInfo): type_name = 'Tool' @@ -255,11 +309,27 @@ class IniFormatParser(dict): raise ParseError("missing value for required string: %r" % key) return value + def get_optional_bool(self, key, default = None): + value = self.get_optional_string(key) + if not value: + return default + if value not in ('0', '1'): + raise ParseError("invalid value(%r) for boolean property: %r" % ( + value, key)) + return bool(int(value)) + + def get_bool(self, key): + value = self.get_optional_bool(key) + if value is None: + raise ParseError("missing value for required boolean: %r" % key) + return value + _component_type_map = dict( (t.type_name, t) for t in (GroupComponentInfo, LibraryComponentInfo, LibraryGroupComponentInfo, - ToolComponentInfo, BuildToolComponentInfo)) + ToolComponentInfo, BuildToolComponentInfo, + TargetGroupComponentInfo)) def load_from_path(path, subpath): # Load the LLVMBuild.txt file as an .ini format file. parser = ConfigParser.RawConfigParser() diff --git a/utils/llvm-build/llvmbuild/main.py b/utils/llvm-build/llvmbuild/main.py index 2a9ef5d..cc4617d 100644 --- a/utils/llvm-build/llvmbuild/main.py +++ b/utils/llvm-build/llvmbuild/main.py @@ -242,8 +242,8 @@ class LLVMProjectInfo(object): # dependencies for added library groups. entries = {} for c in self.ordered_component_infos: - # Only Library and LibraryGroup components are in the table. - if c.type_name not in ('Library', 'LibraryGroup'): + # Only certain components are in the table. + if c.type_name not in ('Library', 'LibraryGroup', 'TargetGroup'): continue # Compute the llvm-config "component name". For historical reasons, @@ -251,10 +251,10 @@ class LLVMProjectInfo(object): llvmconfig_component_name = c.get_llvmconfig_component_name() # Get the library name, or None for LibraryGroups. - if c.type_name == 'LibraryGroup': - library_name = None - else: + if c.type_name == 'Library': library_name = c.get_library_name() + else: + library_name = None # Get the component names of all the required libraries. required_llvmconfig_component_names = [ |