<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I think you may be misaligning the if statements. I've only used it when doing full LLVM+clang builds. In fact, some of the more advanced knobs depend on LLVM being built in-tree (which is a bug that I should fix). If you’re having problems making it work, let me know. It is still largely untested outside darwin and a handful of users, so I expect there will be bugs.<div class=""><br class=""></div><div class="">-Chris</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 3, 2016, at 4:33 PM, Chandler Carruth <<a href="mailto:chandlerc@google.com" class="">chandlerc@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hey Chris, I just noticed that this option is only available when you build Clang as a standalone project, as opposed to building all of LLVM. Was that intentional? Is there any plan to support this in more normal whole-LLVM builds? It seems substantially more useful for stuff like picking up miscompiles...<div class=""><br class=""></div><div class="">-Chandler<br class=""><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Wed, Aug 5, 2015 at 10:39 AM Chris Bieneman <<a href="mailto:beanz@apple.com" class="">beanz@apple.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: cbieneman<br class="">
Date: Wed Aug  5 12:38:12 2015<br class="">
New Revision: 244070<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=244070&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=244070&view=rev</a><br class="">
Log:<br class="">
[CMake] First pass at adding support for clang bootstrap builds to CMake<br class="">
<br class="">
Summary:<br class="">
This patch adds a new CLANG_ENABLE_BOOTSTRAP option to CMake which adds targets for building a stage2 bootstrap compiler. The targets are:<br class="">
<br class="">
bootstrap-configure<br class="">
bootstrap-build<br class="">
bootstrap (same as bootstrap-configure and bootstrap-build)<br class="">
bootstrap-install<br class="">
bootstrap-check-llvm<br class="">
bootstrap-check-clang<br class="">
bootstrap-check-all<br class="">
<br class="">
If you are using 3.3.20150708 or greater it utilizes the ninja USES_TERMINAL_* settings on the external project so that the output is properly buffered.<br class="">
<br class="">
Reviewers: bogner, chandlerc<br class="">
<br class="">
Subscribers: filcab, cfe-commits<br class="">
<br class="">
Differential Revision: <a href="http://reviews.llvm.org/D11743" rel="noreferrer" target="_blank" class="">http://reviews.llvm.org/D11743</a><br class="">
<br class="">
Modified:<br class="">
    cfe/trunk/CMakeLists.txt<br class="">
<br class="">
Modified: cfe/trunk/CMakeLists.txt<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/CMakeLists.txt?rev=244070&r1=244069&r2=244070&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/CMakeLists.txt?rev=244070&r1=244069&r2=244070&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/CMakeLists.txt (original)<br class="">
+++ cfe/trunk/CMakeLists.txt Wed Aug  5 12:38:12 2015<br class="">
@@ -96,6 +96,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURR<br class="">
<br class="">
   option(LLVM_FORCE_USE_OLD_HOST_TOOLCHAIN<br class="">
     "Set to ON to force using an old, unsupported host toolchain." OFF)<br class="">
+  option(CLANG_ENABLE_BOOTSTRAP "Generate the clang bootstrap target" OFF)<br class="">
<br class="">
   include(AddLLVM)<br class="">
   include(TableGen)<br class="">
@@ -551,3 +552,76 @@ if (CLANG_BUILT_STANDALONE)<br class="">
     ${CLANG_BINARY_DIR}/share/clang/cmake/ClangConfig.cmake<br class="">
     COPYONLY)<br class="">
 endif ()<br class="">
+<br class="">
+if (CLANG_ENABLE_BOOTSTRAP)<br class="">
+  include(ExternalProject)<br class="">
+<br class="">
+  if(CMAKE_VERSION VERSION_LESS 3.3.20150708)<br class="">
+    set(cmake_3_4_USES_TERMINAL_OPTIONS)<br class="">
+  else()<br class="">
+    set(cmake_3_4_USES_TERMINAL_OPTIONS<br class="">
+      USES_TERMINAL_CONFIGURE 1<br class="">
+      USES_TERMINAL_BUILD 1<br class="">
+      USES_TERMINAL_INSTALL 1<br class="">
+      )<br class="">
+  endif()<br class="">
+<br class="">
+  set(STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-stamps/)<br class="">
+  set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-bins/)<br class="">
+<br class="">
+  add_custom_target(bootstrap-clear<br class="">
+    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-cleared<br class="">
+    )<br class="">
+  add_custom_command(<br class="">
+    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-cleared<br class="">
+    DEPENDS clang<br class="">
+    COMMAND ${CMAKE_COMMAND} -E remove_directory ${BINARY_DIR}<br class="">
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${BINARY_DIR}<br class="">
+    COMMAND ${CMAKE_COMMAND} -E remove_directory ${STAMP_DIR}<br class="">
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${STAMP_DIR}<br class="">
+    COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-cleared<br class="">
+    COMMENT "Clobberring bootstrap build and stamp directories"<br class="">
+    )<br class="">
+<br class="">
+  ExternalProject_Add(bootstrap<br class="">
+    DEPENDS clang<br class="">
+    PREFIX bootstrap<br class="">
+    SOURCE_DIR ${CMAKE_SOURCE_DIR}<br class="">
+    STAMP_DIR ${STAMP_DIR}<br class="">
+    BINARY_DIR ${BINARY_DIR}<br class="">
+    CMAKE_ARGS<br class="">
+                # We shouldn't need to set this here, but INSTALL_DIR doesn't<br class="">
+                # seem to work, so instead I'm passing this through<br class="">
+                -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}<br class="">
+                ${CLANG_BOOTSTRAP_CMAKE_ARGS}<br class="">
+                -DCMAKE_CXX_COMPILER=${CMAKE_BINARY_DIR}/bin/clang++<br class="">
+                -DCMAKE_C_COMPILER=${CMAKE_BINARY_DIR}/bin/clang<br class="">
+    INSTALL_COMMAND ""<br class="">
+    STEP_TARGETS configure build<br class="">
+    ${cmake_3_4_USES_TERMINAL_OPTIONS}<br class="">
+    )<br class="">
+<br class="">
+  # exclude really-install from main target<br class="">
+  set_target_properties(bootstrap PROPERTIES _EP_really-install_EXCLUDE_FROM_MAIN On)<br class="">
+  ExternalProject_Add_Step(bootstrap really-install<br class="">
+    COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target install<br class="">
+    COMMENT "Performing install step for 'bootstrap'"<br class="">
+    DEPENDEES build<br class="">
+  )<br class="">
+  ExternalProject_Add_StepTargets(bootstrap really-install)<br class="">
+  add_custom_target(bootstrap-install DEPENDS bootstrap-really-install)<br class="">
+<br class="">
+<br class="">
+  set(ADDITIONAL_TARGETS_TO_ADD check-llvm check-clang check-all)<br class="">
+  foreach(target ${ADDITIONAL_TARGETS_TO_ADD})<br class="">
+    # exclude from main target<br class="">
+    set_target_properties(bootstrap PROPERTIES _EP_${target}_EXCLUDE_FROM_MAIN On)<br class="">
+<br class="">
+    ExternalProject_Add_Step(bootstrap ${target}<br class="">
+      COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target ${target}<br class="">
+      COMMENT "Performing ${target} for 'bootstrap'"<br class="">
+      DEPENDEES configure<br class="">
+    )<br class="">
+    ExternalProject_Add_StepTargets(bootstrap ${target})<br class="">
+  endforeach()<br class="">
+endif()<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
cfe-commits mailing list<br class="">
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank" class="">cfe-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="">
</blockquote></div></div></div>
</div></blockquote></div><br class=""></div></body></html>