From cd8273f84216d5c361e32f9d8349a5da14df99bc Mon Sep 17 00:00:00 2001 From: Preston Gurd Date: Mon, 7 May 2012 19:38:40 +0000 Subject: [PATCH] =?UTF-8?q?Make=20IntelJITEvents=20and=20OProfileJIT=20as?= =?UTF-8?q?=20optional=20libraries=20and=20add=20optional=20library=20supp?= =?UTF-8?q?ort=20to=20the=20llvm-build=20tool:=20=20-=20Add=20new=20comman?= =?UTF-8?q?d=20line=20parameter=20to=20llvm-build:=20=E2=80=9C--enable-opt?= =?UTF-8?q?ional-libraries=E2=80=9D=20=20-=20Add=20handing=20of=20new=20ll?= =?UTF-8?q?vm-build=20library=20type=20=E2=80=9COptionalLibrary=E2=80=9D?= =?UTF-8?q?=20=20-=20Update=20Cmake=20and=20automake=20build=20systems=20t?= =?UTF-8?q?o=20pass=20correct=20flags=20to=20llvm-build=20=20=20=20based?= =?UTF-8?q?=20on=20configuration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch by Dan Malea! llvm-svn: 156319 --- CMakeLists.txt | 10 ++++++++ Makefile.config.in | 7 ++++++ Makefile.rules | 1 + .../IntelJITEvents/LLVMBuild.txt | 2 +- lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt | 2 +- utils/llvm-build/llvmbuild/componentinfo.py | 23 +++++++++++++++++-- utils/llvm-build/llvmbuild/main.py | 20 ++++++++++++---- 7 files changed, 57 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b1344565caf..9fcdd247ec1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -269,11 +269,21 @@ set(LLVMCONFIGLIBRARYDEPENDENCIESINC "${LLVM_BINARY_DIR}/tools/llvm-config/LibraryDependencies.inc") set(LLVMBUILDCMAKEFRAG "${LLVM_BINARY_DIR}/LLVMBuild.cmake") + +# Create the list of optional components that are enabled +if (LLVM_USE_INTEL_JITEVENTS) + set(LLVMOPTIONALCOMPONENTS IntelJITEvents) +endif (LLVM_USE_INTEL_JITEVENTS) +if (LLVM_USE_OPROFILE) + set(LLVMOPTIONALCOMPONENTS ${LLVMOPTIONALCOMPONENTS} OProfileJIT) +endif (LLVM_USE_OPROFILE) + message(STATUS "Constructing LLVMBuild project information") execute_process( COMMAND ${PYTHON_EXECUTABLE} ${LLVMBUILDTOOL} --native-target "${LLVM_NATIVE_ARCH}" --enable-targets "${LLVM_TARGETS_TO_BUILD}" + --enable-optional-components "${LLVMOPTIONALCOMPONENTS}" --write-library-table ${LLVMCONFIGLIBRARYDEPENDENCIESINC} --write-cmake-fragment ${LLVMBUILDCMAKEFRAG} ERROR_VARIABLE LLVMBUILDOUTPUT diff --git a/Makefile.config.in b/Makefile.config.in index 33fbb2ad4ca..2ffdacbe90b 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -351,3 +351,10 @@ INTEL_JITEVENTS_LIBDIR := @INTEL_JITEVENTS_LIBDIR@ # Flags to control building support for OProfile JIT API USE_OPROFILE := @USE_OPROFILE@ + +ifeq ($(USE_INTEL_JITEVENTS), 1) + OPTIONAL_COMPONENTS += IntelJITEvents +endif +ifeq ($(USE_OPROFILE), 1) + OPTIONAL_COMPONENTS += OProfileJIT +endif diff --git a/Makefile.rules b/Makefile.rules index 13dbbddf9c0..8d0013ffd1e 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -100,6 +100,7 @@ $(LLVMBuildMakeFrag): $(PROJ_SRC_ROOT)/Makefile.rules \ $(Verb) $(LLVMBuildTool) \ --native-target "$(TARGET_NATIVE_ARCH)" \ --enable-targets "$(TARGETS_TO_BUILD)" \ + --enable-optional-components "$(OPTIONAL_COMPONENTS)" \ --write-library-table $(LLVMConfigLibraryDependenciesInc) \ --write-make-fragment $(LLVMBuildMakeFrag) diff --git a/lib/ExecutionEngine/IntelJITEvents/LLVMBuild.txt b/lib/ExecutionEngine/IntelJITEvents/LLVMBuild.txt index 80d22732644..9c06fdae868 100644 --- a/lib/ExecutionEngine/IntelJITEvents/LLVMBuild.txt +++ b/lib/ExecutionEngine/IntelJITEvents/LLVMBuild.txt @@ -18,6 +18,6 @@ [common] [component_0] -type = Library +type = OptionalLibrary name = IntelJITEvents parent = ExecutionEngine diff --git a/lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt b/lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt index 4516dfa2dab..e30516eb3b0 100644 --- a/lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt +++ b/lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt @@ -18,6 +18,6 @@ [common] [component_0] -type = Library +type = OptionalLibrary name = OProfileJIT parent = ExecutionEngine diff --git a/utils/llvm-build/llvmbuild/componentinfo.py b/utils/llvm-build/llvmbuild/componentinfo.py index 230ae219f2f..737b857dfbb 100644 --- a/utils/llvm-build/llvmbuild/componentinfo.py +++ b/utils/llvm-build/llvmbuild/componentinfo.py @@ -95,12 +95,17 @@ class LibraryComponentInfo(ComponentInfo): type_name = 'Library' @staticmethod - def parse(subpath, items): + def parse_items(items): kwargs = ComponentInfo.parse_items(items) kwargs['library_name'] = items.get_optional_string('library_name') kwargs['required_libraries'] = items.get_list('required_libraries') kwargs['add_to_library_groups'] = items.get_list( 'add_to_library_groups') + return kwargs + + @staticmethod + def parse(subpath, items): + kwargs = LibraryComponentInfo.parse_items(items) return LibraryComponentInfo(subpath, **kwargs) def __init__(self, subpath, name, dependencies, parent, library_name, @@ -165,6 +170,20 @@ class LibraryComponentInfo(ComponentInfo): def get_llvmconfig_component_name(self): return self.get_library_name().lower() +class OptionalLibraryComponentInfo(LibraryComponentInfo): + type_name = "OptionalLibrary" + + @staticmethod + def parse(subpath, items): + kwargs = LibraryComponentInfo.parse_items(items) + return OptionalLibraryComponentInfo(subpath, **kwargs) + + def __init__(self, subpath, name, dependencies, parent, library_name, + required_libraries, add_to_library_groups): + LibraryComponentInfo.__init__(self, subpath, name, dependencies, parent, + library_name, required_libraries, + add_to_library_groups) + class LibraryGroupComponentInfo(ComponentInfo): type_name = 'LibraryGroup' @@ -375,7 +394,7 @@ _component_type_map = dict( for t in (GroupComponentInfo, LibraryComponentInfo, LibraryGroupComponentInfo, ToolComponentInfo, BuildToolComponentInfo, - TargetGroupComponentInfo)) + TargetGroupComponentInfo, OptionalLibraryComponentInfo)) 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 36bca872e5f..2be9cd6b446 100644 --- a/utils/llvm-build/llvmbuild/main.py +++ b/utils/llvm-build/llvmbuild/main.py @@ -312,15 +312,21 @@ subdirectories = %s f.close() - def write_library_table(self, output_path): + def write_library_table(self, output_path, enabled_optional_components): # Write out the mapping from component names to required libraries. # # We do this in topological order so that we know we can append the # dependencies for added library groups. entries = {} for c in self.ordered_component_infos: + # Skip optional components which are not enabled + if c.type_name == 'OptionalLibrary' \ + and c.name not in enabled_optional_components: + continue + # Only certain components are in the table. - if c.type_name not in ('Library', 'LibraryGroup', 'TargetGroup'): + if c.type_name not in ('Library', 'OptionalLibrary', \ + 'LibraryGroup', 'TargetGroup'): continue # Compute the llvm-config "component name". For historical reasons, @@ -328,7 +334,7 @@ subdirectories = %s llvmconfig_component_name = c.get_llvmconfig_component_name() # Get the library name, or None for LibraryGroups. - if c.type_name == 'Library': + if c.type_name == 'Library' or c.type_name == 'OptionalLibrary': library_name = c.get_prefixed_library_name() else: library_name = None @@ -778,6 +784,11 @@ given by --build-root) at the same SUBPATH""", help=("Enable the given space or semi-colon separated " "list of targets, or all targets if not present"), action="store", default=None) + group.add_option("", "--enable-optional-components", + dest="optional_components", metavar="NAMES", + help=("Enable the given space or semi-colon separated " + "list of optional components"), + action="store", default=None) parser.add_option_group(group) (opts, args) = parser.parse_args() @@ -819,7 +830,8 @@ given by --build-root) at the same SUBPATH""", # Write out the required library table, if requested. if opts.write_library_table: - project_info.write_library_table(opts.write_library_table) + project_info.write_library_table(opts.write_library_table, + opts.optional_components) # Write out the make fragment, if requested. if opts.write_make_fragment: