r255813 - [CMake] Name the bootstrap stages stage[0-9]

Chris Bieneman via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 16 12:17:08 PST 2015


Author: cbieneman
Date: Wed Dec 16 14:17:07 2015
New Revision: 255813

URL: http://llvm.org/viewvc/llvm-project?rev=255813&view=rev
Log:
[CMake] Name the bootstrap stages stage[0-9]

When you start chaining bootstrap stages the CMake-generated targets get unwieldy. This change supports naming the bootstrap targets and creating wrapper targets in the top-level build file.

Without this patch the default target generated for a second stage build was "bootstrap" with it the target is "stage2".

Also with some CMake goop setting CLANG_BOOTSTRAP_TARGETS, you can expose third stage targets as "stage3" instead of "bootstrap-bootstrap"

Modified:
    cfe/trunk/CMakeLists.txt

Modified: cfe/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CMakeLists.txt?rev=255813&r1=255812&r2=255813&view=diff
==============================================================================
--- cfe/trunk/CMakeLists.txt (original)
+++ cfe/trunk/CMakeLists.txt Wed Dec 16 14:17:07 2015
@@ -623,9 +623,24 @@ if (CLANG_ENABLE_BOOTSTRAP)
       )
     set(cmake_3_4_USES_TERMINAL USES_TERMINAL 1)
   endif()
+
+  if(NOT CLANG_STAGE)
+    set(CLANG_STAGE stage1)
+    message(STATUS "Setting current clang stage to: ${CLANG_STAGE}")
+  endif()
+
+  string(REGEX MATCH "stage([0-9]*)" MATCHED_STAGE "${CLANG_STAGE}")
+  if(MATCHED_STAGE)
+    math(EXPR STAGE_NUM "${MATCHED_STAGE} + 1")
+    set(NEXT_CLANG_STAGE stage${STAGE_NUM})
+  else()
+    set(NEXT_CLANG_STAGE bootstrap)
+  endif()
+  message(STATUS "Setting next clang stage to: ${NEXT_CLANG_STAGE}")
   
-  set(STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-stamps/)
-  set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-bins/)
+  
+  set(STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NEXT_CLANG_STAGE}-stamps/)
+  set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NEXT_CLANG_STAGE}-bins/)
 
   # If on Darwin we need to make bootstrap depend on LTO and pass
   # DARWIN_LTO_LIBRARY so that -flto will work using the just-built compiler
@@ -636,17 +651,17 @@ if (CLANG_ENABLE_BOOTSTRAP)
     set(LTO_RANLIB -DCMAKE_RANLIB=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ranlib)
   endif()
 
-  add_custom_target(bootstrap-clear
-    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-cleared
+  add_custom_target(${NEXT_CLANG_STAGE}-clear
+    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${NEXT_CLANG_STAGE}-cleared
     )
   add_custom_command(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-cleared
+    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NEXT_CLANG_STAGE}-cleared
     DEPENDS clang ${LTO_DEP}
     COMMAND ${CMAKE_COMMAND} -E remove_directory ${BINARY_DIR}
     COMMAND ${CMAKE_COMMAND} -E make_directory ${BINARY_DIR}
     COMMAND ${CMAKE_COMMAND} -E remove_directory ${STAMP_DIR}
     COMMAND ${CMAKE_COMMAND} -E make_directory ${STAMP_DIR}
-    COMMENT "Clobberring bootstrap build and stamp directories"
+    COMMENT "Clobberring ${NEXT_CLANG_STAGE} build and stamp directories"
     )
 
   if(CMAKE_VERBOSE_MAKEFILE)
@@ -687,9 +702,9 @@ if (CLANG_ENABLE_BOOTSTRAP)
     endif()
   endforeach()
 
-  ExternalProject_Add(bootstrap
+  ExternalProject_Add(${NEXT_CLANG_STAGE}
     DEPENDS clang ${LTO_DEP} ${RUNTIME_DEP}
-    PREFIX bootstrap
+    PREFIX ${NEXT_CLANG_STAGE}
     SOURCE_DIR ${CMAKE_SOURCE_DIR}
     STAMP_DIR ${STAMP_DIR}
     BINARY_DIR ${BINARY_DIR}
@@ -703,6 +718,7 @@ if (CLANG_ENABLE_BOOTSTRAP)
                 -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++
                 -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
                 -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
+                -DCLANG_STAGE=${NEXT_CLANG_STAGE}
                 ${LTO_LIBRARY} ${LTO_AR} ${LTO_RANLIB} ${verbose}
     INSTALL_COMMAND ""
     STEP_TARGETS configure build
@@ -710,29 +726,34 @@ if (CLANG_ENABLE_BOOTSTRAP)
     )
 
   # exclude really-install from main target
-  set_target_properties(bootstrap PROPERTIES _EP_really-install_EXCLUDE_FROM_MAIN On)
-  ExternalProject_Add_Step(bootstrap really-install
+  set_target_properties(${NEXT_CLANG_STAGE} PROPERTIES _EP_really-install_EXCLUDE_FROM_MAIN On)
+  ExternalProject_Add_Step(${NEXT_CLANG_STAGE} really-install
     COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target install
-    COMMENT "Performing install step for 'bootstrap'"
+    COMMENT "Performing install step for '${NEXT_CLANG_STAGE}'"
     DEPENDEES build
     ${cmake_3_4_USES_TERMINAL}
   )
-  ExternalProject_Add_StepTargets(bootstrap really-install)
-  add_custom_target(bootstrap-install DEPENDS bootstrap-really-install)
+  ExternalProject_Add_StepTargets(${NEXT_CLANG_STAGE} really-install)
+  add_custom_target(${NEXT_CLANG_STAGE}-install DEPENDS ${NEXT_CLANG_STAGE}-really-install)
 
   if(NOT CLANG_BOOTSTRAP_TARGETS)
     set(CLANG_BOOTSTRAP_TARGETS check-llvm check-clang check-all)
   endif()
   foreach(target ${CLANG_BOOTSTRAP_TARGETS})
     # exclude from main target
-    set_target_properties(bootstrap PROPERTIES _EP_${target}_EXCLUDE_FROM_MAIN On)
+    set_target_properties(${NEXT_CLANG_STAGE} PROPERTIES _EP_${target}_EXCLUDE_FROM_MAIN On)
 
-    ExternalProject_Add_Step(bootstrap ${target}
+    ExternalProject_Add_Step(${NEXT_CLANG_STAGE} ${target}
       COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target ${target}
-      COMMENT "Performing ${target} for 'bootstrap'"
+      COMMENT "Performing ${target} for '${NEXT_CLANG_STAGE}'"
       DEPENDEES configure
       ${cmake_3_4_USES_TERMINAL}
     )
-    ExternalProject_Add_StepTargets(bootstrap ${target})
+
+    if(target MATCHES "^stage[0-9]*")
+      add_custom_target(${target} DEPENDS ${NEXT_CLANG_STAGE}-${target})
+    endif()
+
+    ExternalProject_Add_StepTargets(${NEXT_CLANG_STAGE} ${target})
   endforeach()
 endif()




More information about the cfe-commits mailing list