summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2016-11-07 22:13:38 +0000
committerMehdi Amini <mehdi.amini@apple.com>2016-11-07 22:13:38 +0000
commit1eed06a3795d01a843d9ec0bc81f436da8d03779 (patch)
tree9280c4d160b036e054c6cad9e1f8c5915095dbe0
parentc1f152d8d1e778be594b3ebe7eeac3428c030fd4 (diff)
downloadbcm5719-llvm-1eed06a3795d01a843d9ec0bc81f436da8d03779.tar.gz
bcm5719-llvm-1eed06a3795d01a843d9ec0bc81f436da8d03779.zip
Add experimental support for unofficial monorepo-like directory layout
Summary: This allows to have clang and llvm and the other subprojects side-by-side instead of nested. This can be used with the monorepo or multiple repos. It will help having a single set of sources checked out but allows to have a build directory with llvm and another one with llvm+clang. Basically it abstracts LLVM_EXTERNAL_xxxx_SOURCE_DIR making it more convenient by adopting a convention. Reviewers: bogner, beanz, jlebar Subscribers: mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D26365 llvm-svn: 286162
-rw-r--r--llvm/CMakeLists.txt25
-rw-r--r--llvm/docs/CMake.rst8
2 files changed, 33 insertions, 0 deletions
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index 7a70ebcf4b4..9fcb30a5b20 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -93,6 +93,31 @@ if(CMAKE_HOST_APPLE AND APPLE)
endif()
endif()
+# Side-by-side subprojects layout: automatically set the
+# LLVM_EXTERNAL_${project}_SOURCE_DIR using LLVM_ALL_PROJECTS
+# This allows an easy way of setting up a build directory for llvm and another
+# one for llvm+clang+... using the same sources.
+set(LLVM_ALL_PROJECTS "clang;libcxx;libcxxabi;lldb;compiler-rt;lld;polly")
+set(LLVM_ENABLE_PROJECTS "" CACHE STRING
+ "Semicolon-separated list of projects to build (${LLVM_ALL_PROJECTS}), or \"all\".")
+if( LLVM_ENABLE_PROJECTS STREQUAL "all" )
+ set( LLVM_ENABLE_PROJECTS ${LLVM_ALL_PROJECTS})
+endif()
+foreach(proj ${LLVM_ENABLE_PROJECTS})
+ set(PROJ_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}")
+ if(NOT EXISTS "${PROJ_DIR}" OR NOT IS_DIRECTORY "${PROJ_DIR}")
+ message(FATAL_ERROR "LLVM_ENABLE_PROJECTS requests ${proj} but directory not found: ${PROJ_DIR}")
+ endif()
+ string(TOUPPER "${proj}" upper_proj)
+ set(LLVM_EXTERNAL_${upper_proj}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}")
+ # There is a widely spread opinion that clang-tools-extra should be merged
+ # into clang. The following simulates it by always enabling clang-tools-extra
+ # when enabling clang.
+ if (proj STREQUAL "clang")
+ set(LLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../clang-tools-extra")
+ endif()
+endforeach()
+
# The following only works with the Ninja generator in CMake >= 3.0.
set(LLVM_PARALLEL_COMPILE_JOBS "" CACHE STRING
"Define the maximum number of concurrent compilation jobs.")
diff --git a/llvm/docs/CMake.rst b/llvm/docs/CMake.rst
index 7dc475be70b..b8a5b3112ed 100644
--- a/llvm/docs/CMake.rst
+++ b/llvm/docs/CMake.rst
@@ -336,6 +336,14 @@ LLVM-specific variables
will not be used. If the variable for an external project does not point
to a valid path, then that project will not be built.
+**LLVM_ENABLE_PROJECTS**:STRING
+ Semicolon-separated list of projects to build, or *all* for building all
+ (clang, libcxx, libcxxabi, lldb, compiler-rt, lld, polly) projects.
+ This flag assumes that projects are checked out side-by-side and not nested,
+ i.e. clang needs to be in parallel of llvm instead of nested in `llvm/tools`.
+ This feature allows to have one build for only LLVM and another for clang+llvm
+ using the same source checkout.
+
**LLVM_EXTERNAL_PROJECTS**:STRING
Semicolon-separated list of additional external projects to build as part of
llvm. For each project LLVM_EXTERNAL_<NAME>_SOURCE_DIR have to be specified
OpenPOWER on IntegriCloud