From: Michael J. Spencer Date: Thu, 26 Apr 2012 19:43:35 +0000 (+0000) Subject: [CMake] Restructure how Clang, Polly and other external projects get included. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=3c00db75e105cf6bcd8916af9e9dff52ad13148d;p=oota-llvm.git [CMake] Restructure how Clang, Polly and other external projects get included. While making lld build under the tools directory I decided to refactor how this works. There is now a macro, add_llvm_external_project, which takes the name of the expected subdirectory. This sets up two CMake options. * LLVM_EXTERNAL_${NAME}_SOURCE_DIR This is the path to the source. It defaults to ${CMAKE_CURRENT_SOURCE_DIR}/${name}. * LLVM_EXTERNAL_${NAME}_BUILD Enable and disable building the tool as part of LLVM. I chose LLVM_EXTERNAL_${NAME} as a prefix so they all show up together in the GUI. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155654 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index 388208b6a8a..bfe5127a4b4 100755 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -130,3 +130,21 @@ macro(add_llvm_target target_name) add_llvm_library(LLVM${target_name} ${ARGN} ${TABLEGEN_OUTPUT}) set( CURRENT_LLVM_TARGET LLVM${target_name} ) endmacro(add_llvm_target) + +# 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 +# enable or disable building it with everthing else. +macro(add_llvm_external_project name) + string(TOUPPER ${name} nameUPPER) + set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}" + 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} ${name}) + endif() + endif() +endmacro(add_llvm_external_project) diff --git a/docs/CMake.html b/docs/CMake.html index ff8bf30d323..67dfef36247 100644 --- a/docs/CMake.html +++ b/docs/CMake.html @@ -353,10 +353,10 @@ installed on a custom location, you can set the variables FFI_INCLUDE_DIR and FFI_LIBRARY_DIR. Defaults to OFF. -
LLVM_CLANG_SOURCE_DIR:PATH
-
Path to Clang's source directory. Defaults to tools/clang. - Clang will not be built when it is empty or it does not point valid - path.
+
LLVM_EXTERNAL_{CLANG,LLD,POLLY}_SOURCE_DIR:PATH
+
Path to {Clang,lld,Polly}'s source directory. Defaults to + tools/{clang,lld,polly}. {Clang,lld,Polly} will not be built when it is + empty or it does not point valid path.
LLVM_USE_OPROFILE:BOOL
Enable building OProfile JIT support. Defaults to OFF
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 8294c5b232a..1bfc2fe3e86 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -2,14 +2,6 @@ # three small executables. This is done to minimize memory load in parallel # builds. Please retain this ordering. -# If polly exists and is not disabled compile it and add it to the LLVM tools. -option(LLVM_BUILD_POLLY "Compile polly" ON) -if( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/polly/CMakeLists.txt ) - if (LLVM_BUILD_POLLY) - add_subdirectory( ${CMAKE_CURRENT_SOURCE_DIR}/polly) - endif (LLVM_BUILD_POLLY) -endif( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/polly/CMakeLists.txt ) - if( NOT WIN32 OR MSYS OR CYGWIN ) # We currently require 'sed' to build llvm-config, so don't try to build it # on pure Win32. @@ -56,14 +48,8 @@ if( LLVM_ENABLE_PIC ) endif() endif() -set(LLVM_CLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/clang" CACHE PATH "Path to Clang source directory") - -if (NOT ${LLVM_CLANG_SOURCE_DIR} STREQUAL "" - AND EXISTS ${LLVM_CLANG_SOURCE_DIR}/CMakeLists.txt) - option(LLVM_BUILD_CLANG "Whether to build Clang as part of LLVM" ON) - if (${LLVM_BUILD_CLANG}) - add_subdirectory(${LLVM_CLANG_SOURCE_DIR} clang) - endif() -endif () +add_llvm_external_project(clang) +add_llvm_external_project(lld) +add_llvm_external_project(polly) set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} PARENT_SCOPE)