[llvm] r242705 - [CMake] Cleanup tools/CMakeLists.txt to take advantage of the auto-registration that was already partially working.
Reid Kleckner
rnk at google.com
Tue Jul 21 08:11:10 PDT 2015
This was probably fixed by r242746.
On Tue, Jul 21, 2015 at 8:10 AM, Reid Kleckner <rnk at google.com> wrote:
> After reconfiguring LLVM this morning, it no longer builds compiler-rt.
> The CMakeCache.txt has LLVM_TOOL_COMPILER_RT_BUILD:BOOL=ON, but it
> evaluates to false at runtime.
>
> Any idea what's up?
>
> On Mon, Jul 20, 2015 at 1:36 PM, Chris Bieneman <beanz at apple.com> wrote:
>
>> Author: cbieneman
>> Date: Mon Jul 20 15:36:06 2015
>> New Revision: 242705
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=242705&view=rev
>> Log:
>> [CMake] Cleanup tools/CMakeLists.txt to take advantage of the
>> auto-registration that was already partially working.
>>
>> Re-landing r242059 which re-landed r241621... I'm really bad at this.
>>
>> Summary (r242059):
>> This change re-lands r241621, with an additional fix that was required to
>> allow tool sources to live outside the llvm checkout. It also no longer
>> renames LLVM_EXTERNAL_*_SOURCE_DIR. This change was reverted in r241663,
>> because it renamed several variables of the format LLVM_EXTERNAL_*_* to
>> LLVM_TOOL_*_*.
>>
>> Summary (r241621):
>> The tools CMakeLists file already had implicit tool registration, but
>> there were a few things off about it that needed to be altered to make it
>> work. This change addresses all that. The changes in this patch are:
>>
>> * factored out canonicalizing tool names from paths to CMake variables *
>> removed the LLVM_IMPLICIT_PROJECT_IGNORE mechanism in favor of
>> LLVM_EXTERNAL_${nameUPPER}_BUILD which I renamed to
>> LLVM_TOOL_${nameUPPER}_BUILD because it applies to internal and external
>> tools
>> * removed ignore_llvm_tool_subdirectory() in favor of just setting
>> LLVM_TOOL_${nameUPPER}_BUILD to Off
>> * Added create_llvm_tool_options() to resolve a bug in
>> add_llvm_external_project() - the old LLVM_EXTERNAL_${nameUPPER}_BUILD
>> would not work on a clean CMake directory because the option could be
>> created after it was set in code.
>> * Removed all but the minimum required calls to add_llvm_external_project
>> from tools/CMakeLists.txt
>>
>> Differential Revision: http://reviews.llvm.org/D10665
>>
>> Modified:
>> llvm/trunk/cmake/modules/AddLLVM.cmake
>> llvm/trunk/tools/CMakeLists.txt
>>
>> Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=242705&r1=242704&r2=242705&view=diff
>>
>>
>> ==============================================================================
>> --- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
>> +++ llvm/trunk/cmake/modules/AddLLVM.cmake Mon Jul 20 15:36:06 2015
>> @@ -676,6 +676,13 @@ 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
>> @@ -686,56 +693,84 @@ macro(add_llvm_external_project name)
>> if("${add_llvm_external_dir}" STREQUAL "")
>> set(add_llvm_external_dir ${name})
>> endif()
>> - list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE
>> "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}")
>> - string(REPLACE "-" "_" nameUNDERSCORE ${name})
>> - string(TOUPPER ${nameUNDERSCORE} nameUPPER)
>> - #TODO: Remove this check in a few days once it has circulated through
>> - # buildbots and people's checkouts (cbieneman - July 14, 2015)
>> - if("${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}" STREQUAL
>> "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}")
>> - unset(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR CACHE)
>> - endif()
>> - if(NOT LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR)
>> - set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR
>> "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}")
>> - else()
>> - set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR
>> + 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")
>> - endif()
>> - if (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)
>> + mark_as_advanced(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR)
>> 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)
>> - list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE
>> "${CMAKE_CURRENT_SOURCE_DIR}/${name}")
>> - add_subdirectory(${name})
>> + add_llvm_external_project(${name})
>> endmacro(add_llvm_tool_subdirectory)
>>
>> -macro(ignore_llvm_tool_subdirectory name)
>> - list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE
>> "${CMAKE_CURRENT_SOURCE_DIR}/${name}")
>> -endmacro(ignore_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)
>>
>> -function(add_llvm_implicit_external_projects)
>> +function(add_llvm_implicit_projects)
>> set(list_of_implicit_subdirs "")
>> file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*")
>> foreach(dir ${sub-dirs})
>> - 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")
>> + if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt")
>> + canonicalize_tool_name(${dir} name)
>> + if (LLVM_TOOL_${name}_BUILD)
>> 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_external_projects)
>> +endfunction(add_llvm_implicit_projects)
>>
>> # Generic support for adding a unittest.
>> function(add_unittest test_suite test_name)
>>
>> Modified: llvm/trunk/tools/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/CMakeLists.txt?rev=242705&r1=242704&r2=242705&view=diff
>>
>>
>> ==============================================================================
>> --- llvm/trunk/tools/CMakeLists.txt (original)
>> +++ llvm/trunk/tools/CMakeLists.txt Mon Jul 20 15:36:06 2015
>> @@ -1,85 +1,37 @@
>> -add_llvm_tool_subdirectory(llvm-config)
>> +# 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()
>>
>> # 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()
>> - ignore_llvm_tool_subdirectory(llvm-shlib)
>> + set(LLVM_TOOL_POLLY_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)
>> -
>> -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)
>> -
>> -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)
>> +if(NOT LLVM_BUILD_LLVM_DYLIB )
>> + set(LLVM_TOOL_LLVM_SHLIB_BUILD Off)
>> endif()
>>
>> -add_llvm_tool_subdirectory(gold)
>> +if(NOT LLVM_USE_INTEL_JITEVENTS )
>> + set(LLVM_TOOL_LLVM_JITLISTENER_BUILD Off)
>> +endif()
>>
>> -add_llvm_external_project(clang)
>> -add_llvm_external_project(llgo)
>> -add_llvm_external_project(lld)
>> -add_llvm_external_project(lldb)
>> +if(CYGWIN OR NOT LLVM_ENABLE_PIC)
>> + set(LLVM_TOOL_LTO_BUILD Off)
>> + set(LLVM_TOOL_LLVM_LTO_BUILD Off)
>> +endif()
>>
>> # Automatically add remaining sub-directories containing a
>> 'CMakeLists.txt'
>> # file as external projects.
>> -add_llvm_implicit_external_projects()
>> +add_llvm_implicit_projects()
>>
>> set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} PARENT_SCOPE)
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150721/5090a39d/attachment.html>
More information about the llvm-commits
mailing list