From 7d41350722c486176de067252b37a7ce0c86cbd5 Mon Sep 17 00:00:00 2001 From: Chris Bieneman Date: Mon, 13 Jul 2015 20:30:58 +0000 Subject: [PATCH] Revert "[CMake] Cleanup tools/CMakeLists.txt to take advantage of the auto-registration that was already partially working." Reverting r242059 because it broke some bots. I'm attempting to reproduce the failures now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242060 91177308-0d34-0410-b5e6-96231b3b80d8 --- cmake/modules/AddLLVM.cmake | 85 +++++++++-------------------------- tools/CMakeLists.txt | 90 ++++++++++++++++++++++++++++--------- 2 files changed, 90 insertions(+), 85 deletions(-) diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index ebd17a0cf85..752d496f74f 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -676,13 +676,6 @@ macro(add_llvm_target target_name) set( CURRENT_LLVM_TARGET LLVM${target_name} ) endmacro(add_llvm_target) -function(canonicalize_tool_name name output) - string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" nameStrip ${name}) - string(REPLACE "-" "_" nameUNDERSCORE ${nameStrip}) - string(TOUPPER ${nameUNDERSCORE} nameUPPER) - set(${output} "${nameUPPER}" PARENT_SCOPE) -endfunction(canonicalize_tool_name) - # Add external project that may want to be built as part of llvm such as Clang, # lld, and Polly. This adds two options. One for the source directory of the # project, which defaults to ${CMAKE_CURRENT_SOURCE_DIR}/${name}. Another to @@ -693,84 +686,48 @@ macro(add_llvm_external_project name) if("${add_llvm_external_dir}" STREQUAL "") set(add_llvm_external_dir ${name}) endif() - canonicalize_tool_name(${name} nameUPPER) - if (LLVM_TOOL_${nameUPPER}_BUILD) - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}/CMakeLists.txt) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir} ${add_llvm_external_dir}) - set(LLVM_TOOL_${nameUPPER}_BUILD Off) - elseif(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR) - set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR - "${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}" - CACHE PATH "Path to ${name} source directory") - mark_as_advanced(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR) + list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}") + string(REPLACE "-" "_" nameUNDERSCORE ${name}) + string(TOUPPER ${nameUNDERSCORE} nameUPPER) + set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}" + CACHE PATH "Path to ${name} source directory") + if (NOT ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR} STREQUAL "" + AND EXISTS ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}/CMakeLists.txt) + option(LLVM_EXTERNAL_${nameUPPER}_BUILD + "Whether to build ${name} as part of LLVM" ON) + if (LLVM_EXTERNAL_${nameUPPER}_BUILD) add_subdirectory(${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR} ${add_llvm_external_dir}) - set(LLVM_TOOL_${nameUPPER}_BUILD Off) endif() endif() endmacro(add_llvm_external_project) macro(add_llvm_tool_subdirectory name) - add_llvm_external_project(${name}) + list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${name}") + add_subdirectory(${name}) endmacro(add_llvm_tool_subdirectory) -function(get_project_name_from_src_var var output) - string(REGEX MATCH "LLVM_EXTERNAL_(.*)_SOURCE_DIR" - MACHED_TOOL "${var}") - if(MACHED_TOOL) - set(${output} ${CMAKE_MATCH_1} PARENT_SCOPE) - else() - set(${output} PARENT_SCOPE) - endif() -endfunction() - -function(create_llvm_tool_options) - file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*") - foreach(dir ${sub-dirs}) - if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt") - canonicalize_tool_name(${dir} name) - option(LLVM_TOOL_${name}_BUILD - "Whether to build ${name} as part of LLVM" On) - mark_as_advanced(LLVM_TOOL_${name}_BUILD) - endif() - endforeach() - get_cmake_property(variableNames VARIABLES) - foreach (variableName ${variableNames}) - get_project_name_from_src_var(${variableName} projectName) - if(projectName) - option(LLVM_TOOL_${projectName}_BUILD - "Whether to build ${name} as part of LLVM" On) - mark_as_advanced(LLVM_TOOL_${name}_BUILD) - endif() - endforeach() -endfunction(create_llvm_tool_options) +macro(ignore_llvm_tool_subdirectory name) + list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${name}") +endmacro(ignore_llvm_tool_subdirectory) -function(add_llvm_implicit_projects) +function(add_llvm_implicit_external_projects) set(list_of_implicit_subdirs "") file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*") foreach(dir ${sub-dirs}) - if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt") - canonicalize_tool_name(${dir} name) - if (LLVM_TOOL_${name}_BUILD) + if(IS_DIRECTORY "${dir}") + list(FIND LLVM_IMPLICIT_PROJECT_IGNORE "${dir}" tool_subdir_ignore) + if( tool_subdir_ignore EQUAL -1 + AND EXISTS "${dir}/CMakeLists.txt") get_filename_component(fn "${dir}" NAME) list(APPEND list_of_implicit_subdirs "${fn}") endif() endif() endforeach() - get_cmake_property(variableNames VARIABLES) - foreach (variableName ${variableNames}) - get_project_name_from_src_var(${variableName} projectName) - if(projectName) - string(TOLOWER ${projectName} projectName) - list(APPEND list_of_implicit_subdirs ${projectName}) - endif() - endforeach() - - list(REMOVE_DUPLICATES list_of_implicit_subdirs) foreach(external_proj ${list_of_implicit_subdirs}) add_llvm_external_project("${external_proj}") endforeach() -endfunction(add_llvm_implicit_projects) +endfunction(add_llvm_implicit_external_projects) # Generic support for adding a unittest. function(add_unittest test_suite test_name) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 71af2127810..c9c5a1fdfa0 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,37 +1,85 @@ -# This file will recurse into all subdirectories that contain CMakeLists.txt -# Setting variables that match the pattern LLVM_TOOL_{NAME}_BUILD to Off will -# prevent traversing into a directory. -# -# The only tools that need to be explicitly added are ones that have explicit -# ordering requirements. - -# Iterates all the subdirectories to create CMake options to enable/disable -# traversing each directory. -create_llvm_tool_options() +add_llvm_tool_subdirectory(llvm-config) # Build polly before the tools: the tools link against polly when # LINK_POLLY_INTO_TOOLS is set. if(WITH_POLLY) add_llvm_external_project(polly) +else(WITH_POLLY) + list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${LLVM_MAIN_SRC_DIR}/tools/polly") +endif(WITH_POLLY) + +if( LLVM_BUILD_LLVM_DYLIB ) + add_llvm_tool_subdirectory(llvm-shlib) else() - set(LLVM_TOOL_POLLY_BUILD Off) + ignore_llvm_tool_subdirectory(llvm-shlib) endif() -if(NOT LLVM_BUILD_LLVM_DYLIB ) - set(LLVM_TOOL_LLVM_SHLIB_BUILD Off) -endif() +add_llvm_tool_subdirectory(opt) +add_llvm_tool_subdirectory(llvm-as) +add_llvm_tool_subdirectory(llvm-dis) +add_llvm_tool_subdirectory(llvm-mc) -if(NOT LLVM_USE_INTEL_JITEVENTS ) - set(LLVM_TOOL_LLVM_JITLISTENER_BUILD Off) -endif() +add_llvm_tool_subdirectory(llc) +add_llvm_tool_subdirectory(llvm-ar) +add_llvm_tool_subdirectory(llvm-nm) +add_llvm_tool_subdirectory(llvm-size) + +add_llvm_tool_subdirectory(llvm-cov) +add_llvm_tool_subdirectory(llvm-profdata) +add_llvm_tool_subdirectory(llvm-link) +add_llvm_tool_subdirectory(lli) + +add_llvm_tool_subdirectory(llvm-extract) +add_llvm_tool_subdirectory(llvm-diff) +add_llvm_tool_subdirectory(macho-dump) +add_llvm_tool_subdirectory(llvm-objdump) +add_llvm_tool_subdirectory(llvm-readobj) +add_llvm_tool_subdirectory(llvm-rtdyld) +add_llvm_tool_subdirectory(llvm-dwarfdump) +add_llvm_tool_subdirectory(dsymutil) +add_llvm_tool_subdirectory(llvm-cxxdump) +if( LLVM_USE_INTEL_JITEVENTS ) + add_llvm_tool_subdirectory(llvm-jitlistener) +else() + ignore_llvm_tool_subdirectory(llvm-jitlistener) +endif( LLVM_USE_INTEL_JITEVENTS ) + +add_llvm_tool_subdirectory(bugpoint) +add_llvm_tool_subdirectory(bugpoint-passes) +add_llvm_tool_subdirectory(llvm-bcanalyzer) +add_llvm_tool_subdirectory(llvm-stress) +add_llvm_tool_subdirectory(llvm-mcmarkup) + +add_llvm_tool_subdirectory(verify-uselistorder) -if(CYGWIN OR NOT LLVM_ENABLE_PIC) - set(LLVM_TOOL_LTO_BUILD Off) - set(LLVM_TOOL_LLVM_LTO_BUILD Off) +add_llvm_tool_subdirectory(llvm-symbolizer) + +add_llvm_tool_subdirectory(llvm-c-test) + +add_llvm_tool_subdirectory(obj2yaml) +add_llvm_tool_subdirectory(yaml2obj) + +add_llvm_tool_subdirectory(llvm-go) + +add_llvm_tool_subdirectory(llvm-pdbdump) + +if(NOT CYGWIN AND LLVM_ENABLE_PIC) + add_llvm_tool_subdirectory(lto) + add_llvm_tool_subdirectory(llvm-lto) +else() + ignore_llvm_tool_subdirectory(lto) + ignore_llvm_tool_subdirectory(llvm-lto) endif() +add_llvm_tool_subdirectory(gold) + +add_llvm_external_project(clang) +add_llvm_external_project(llgo) +add_llvm_external_project(lld) +add_llvm_external_project(lldb) + # Automatically add remaining sub-directories containing a 'CMakeLists.txt' # file as external projects. -add_llvm_implicit_projects() +add_llvm_implicit_external_projects() set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} PARENT_SCOPE) -- 2.34.1