summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorPetr Hosek <phosek@chromium.org>2018-03-07 18:14:09 +0000
committerPetr Hosek <phosek@chromium.org>2018-03-07 18:14:09 +0000
commit7bcd41f70ccc1b88195ea8804e88ac89d30b6e46 (patch)
tree0e9a0385254185605c167849255abadbbeaf8f9a /cmake
parentdf0d7bf4bc073d15b096b88a26ec7e7871c942d4 (diff)
[Fuzzer] Avoid the unnecessary rebuild of the custom libc++
This changes the add_custom_libcxx macro to resemble the llvm_ExternalProject_Add. The primary motivation is to avoid unnecessary libFuzzer rebuilds that are being done on every Ninja/Make invocation. The libc++ should be only rebuilt whenever the libc++ source itself changes. Differential Revision: https://reviews.llvm.org/D43213 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@326921 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Modules/AddCompilerRT.cmake81
1 files changed, 61 insertions, 20 deletions
diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake
index f81eb3342..2383670a9 100644
--- a/cmake/Modules/AddCompilerRT.cmake
+++ b/cmake/Modules/AddCompilerRT.cmake
@@ -477,56 +477,97 @@ macro(add_custom_libcxx name prefix)
foreach(flag ${LIBCXX_CFLAGS})
set(flagstr "${flagstr} ${flag}")
endforeach()
- set(LIBCXX_CFLAGS ${flagstr})
+ set(LIBCXX_C_FLAGS ${flagstr})
+ set(LIBCXX_CXX_FLAGS ${flagstr})
if(LIBCXX_USE_TOOLCHAIN)
set(compiler_args -DCMAKE_C_COMPILER=${COMPILER_RT_TEST_COMPILER}
-DCMAKE_CXX_COMPILER=${COMPILER_RT_TEST_CXX_COMPILER})
if(NOT COMPILER_RT_STANDALONE_BUILD)
- set(force_deps DEPENDS clang)
+ set(toolchain_deps $<TARGET_FILE:clang>)
+ set(force_deps DEPENDS $<TARGET_FILE:clang>)
endif()
else()
set(compiler_args -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
endif()
+ set(STAMP_DIR ${prefix}-stamps/)
+ set(BINARY_DIR ${prefix}-bins/)
+
+ add_custom_target(${name}-clear
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${BINARY_DIR}
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${STAMP_DIR}
+ COMMENT "Clobbering ${name} build and stamp directories"
+ USES_TERMINAL
+ )
+
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp
+ DEPENDS ${LIBCXX_DEPS} ${toolchain_deps}
+ COMMAND ${CMAKE_COMMAND} -E touch ${BINARY_DIR}/CMakeCache.txt
+ COMMAND ${CMAKE_COMMAND} -E touch ${STAMP_DIR}/${name}-mkdir
+ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp
+ COMMENT "Clobbering bootstrap build and stamp directories"
+ )
+
+ add_custom_target(${name}-clobber
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp)
+
if(CMAKE_SYSROOT)
set(sysroot_arg -DCMAKE_SYSROOT=${CMAKE_SYSROOT})
endif()
ExternalProject_Add(${name}
- DEPENDS ${LIBCXX_DEPS}
+ DEPENDS ${name}-clobber ${LIBCXX_DEPS}
PREFIX ${prefix}
SOURCE_DIR ${COMPILER_RT_LIBCXX_PATH}
+ STAMP_DIR ${STAMP_DIR}
+ BINARY_DIR ${BINARY_DIR}
CMAKE_ARGS -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
${compiler_args}
${sysroot_arg}
- -DCMAKE_C_FLAGS=${LIBCXX_CFLAGS}
- -DCMAKE_CXX_FLAGS=${LIBCXX_CFLAGS}
+ -DCMAKE_C_FLAGS=${LIBCXX_C_FLAGS}
+ -DCMAKE_CXX_FLAGS=${LIBCXX_CXX_FLAGS}
-DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DLLVM_PATH=${LLVM_MAIN_SRC_DIR}
- -DLIBCXX_STANDALONE_BUILD=On
+ -DLLVM_BINARY_DIR=${prefix}
+ -DLLVM_LIBRARY_OUTPUT_INTDIR=${prefix}/lib
+ -DLIBCXX_STANDALONE_BUILD=ON
${LIBCXX_CMAKE_ARGS}
- STEP_TARGETS configure build install
- LOG_BUILD 1
- LOG_CONFIGURE 1
- LOG_INSTALL 1
+ INSTALL_COMMAND ""
+ STEP_TARGETS configure build
+ BUILD_ALWAYS 1
+ USES_TERMINAL_CONFIGURE 1
+ USES_TERMINAL_BUILD 1
+ USES_TERMINAL_INSTALL 1
EXCLUDE_FROM_ALL TRUE
)
- ExternalProject_Add_Step(${name} force-reconfigure
- DEPENDERS configure
- ALWAYS 1
- )
+ if (CMAKE_GENERATOR MATCHES "Make")
+ set(run_clean "$(MAKE)" "-C" "${BINARY_DIR}" "clean")
+ else()
+ set(run_clean ${CMAKE_COMMAND} --build ${BINARY_DIR} --target clean
+ --config "$<CONFIGURATION>")
+ endif()
- ExternalProject_Add_Step(${name} clobber
- COMMAND ${CMAKE_COMMAND} -E remove_directory <BINARY_DIR>
- COMMAND ${CMAKE_COMMAND} -E make_directory <BINARY_DIR>
- COMMENT "Clobberring ${name} build directory..."
- DEPENDERS configure
+ ExternalProject_Add_Step(${name} clean
+ COMMAND ${run_clean}
+ COMMENT "Cleaning ${name}..."
+ DEPENDEES configure
${force_deps}
+ WORKING_DIRECTORY ${BINARY_DIR}
+ EXCLUDE_FROM_MAIN 1
+ USES_TERMINAL 1
)
+ ExternalProject_Add_StepTargets(${name} clean)
+
+ if(LIBCXX_USE_TOOLCHAIN)
+ add_dependencies(${name}-clean ${name}-clobber)
+ set_target_properties(${name}-clean PROPERTIES
+ SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp)
+ endif()
endmacro()
function(rt_externalize_debuginfo name)