summaryrefslogtreecommitdiffstats
path: root/llvm/cmake/modules
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2015-07-13 20:23:15 +0000
committerChris Bieneman <beanz@apple.com>2015-07-13 20:23:15 +0000
commit8ac6d119b7f690c38a4e1f6b57a9ef9121588e27 (patch)
tree172328cf53072f580000bd9ca8bb54f2cfc061ae /llvm/cmake/modules
parentcd42e7f77a788969bc9365b8b0b2f21e2308e04e (diff)
downloadbcm5719-llvm-8ac6d119b7f690c38a4e1f6b57a9ef9121588e27.tar.gz
bcm5719-llvm-8ac6d119b7f690c38a4e1f6b57a9ef9121588e27.zip
[CMake] Cleanup tools/CMakeLists.txt to take advantage of the auto-registration that was already partially working.
Summary: 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_*_*. Original Summary: 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 llvm-svn: 242059
Diffstat (limited to 'llvm/cmake/modules')
-rw-r--r--llvm/cmake/modules/AddLLVM.cmake85
1 files changed, 64 insertions, 21 deletions
diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index 752d496f74f..ebd17a0cf85 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -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,48 +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)
- 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)
+ 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)
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)
OpenPOWER on IntegriCloud