<div dir="ltr">Hopefully r208632 should reduce the noise.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, May 12, 2014 at 4:00 AM, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Btw, this made "ninja check-all" very noisy with all the "--<br>
Installing:" messages for libcxx_msan headers. They should be<br>
suppressed somehow.<br>
<div class="HOEnZb"><div class="h5"><br>
On Mon, May 12, 2014 at 12:31 PM, Evgeniy Stepanov<br>
<<a href="mailto:eugeni.stepanov@gmail.com">eugeni.stepanov@gmail.com</a>> wrote:<br>
> On Mon, May 12, 2014 at 12:20 PM, Kostya Serebryany <<a href="mailto:kcc@google.com">kcc@google.com</a>> wrote:<br>
>> Can we use this for clang-msan bootstrap now?<br>
><br>
> We should, but this does not build libcxxabi, as far as I can see.<br>
> This is fine for unit tests, but not enough for bootstrap. And<br>
> libcxxabi does not have a cmake build at all :(<br>
><br>
>><br>
>> On Sat, May 10, 2014 at 2:11 AM, Alexey Samsonov <<a href="mailto:samsonov@google.com">samsonov@google.com</a>><br>
>> wrote:<br>
>>><br>
>>> Author: samsonov<br>
>>> Date: Fri May  9 17:11:03 2014<br>
>>> New Revision: 208451<br>
>>><br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=208451&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=208451&view=rev</a><br>
>>> Log:<br>
>>> [CMake] Use ExternalProject to build MSan-ified version of libcxx for unit<br>
>>> tests.<br>
>>><br>
>>> This change lets MSan rely on libcxx's own build system instead of<br>
>>> manually<br>
>>> compiling its sources and setting up all the necessary compile flags. It<br>
>>> would<br>
>>> also simplify compiling libcxx with another sanitizers (in particular,<br>
>>> TSan).<br>
>>><br>
>>> The tricky part is to make sure libcxx is reconfigured/rebuilt when Clang<br>
>>> or<br>
>>> MSan runtime library is changed. "clobber" step used in this patch works<br>
>>> well<br>
>>> for me, but it's possible it would break for other configurations - will<br>
>>> watch the buildbots.<br>
>>><br>
>>> Modified:<br>
>>>     compiler-rt/trunk/cmake/Modules/AddCompilerRT.cmake<br>
>>>     compiler-rt/trunk/lib/msan/CMakeLists.txt<br>
>>>     compiler-rt/trunk/lib/msan/tests/CMakeLists.txt<br>
>>><br>
>>> Modified: compiler-rt/trunk/cmake/Modules/AddCompilerRT.cmake<br>
>>> URL:<br>
>>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/Modules/AddCompilerRT.cmake?rev=208451&r1=208450&r2=208451&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/Modules/AddCompilerRT.cmake?rev=208451&r1=208450&r2=208451&view=diff</a><br>

>>><br>
>>> ==============================================================================<br>
>>> --- compiler-rt/trunk/cmake/Modules/AddCompilerRT.cmake (original)<br>
>>> +++ compiler-rt/trunk/cmake/Modules/AddCompilerRT.cmake Fri May  9<br>
>>> 17:11:03 2014<br>
>>> @@ -1,4 +1,5 @@<br>
>>>  include(AddLLVM)<br>
>>> +include(ExternalProject)<br>
>>>  include(LLVMParseArguments)<br>
>>>  include(CompilerRTUtils)<br>
>>><br>
>>> @@ -167,3 +168,48 @@ macro(add_compiler_rt_script name)<br>
>>>      PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ<br>
>>> GROUP_EXECUTE WORLD_READ WORLD_EXECUTE<br>
>>>      DESTINATION ${COMPILER_RT_INSTALL_PATH}/bin)<br>
>>>  endmacro(add_compiler_rt_script src name)<br>
>>> +<br>
>>> +# Builds custom version of libc++ and installs it in <prefix>.<br>
>>> +# Can be used to build sanitized versions of libc++ for running unit<br>
>>> tests.<br>
>>> +# add_custom_libcxx(<name> <prefix><br>
>>> +#                   DEPS <list of build deps><br>
>>> +#                   CFLAGS <list of compile flags>)<br>
>>> +macro(add_custom_libcxx name prefix)<br>
>>> +  if(NOT COMPILER_RT_HAS_LIBCXX_SOURCES)<br>
>>> +    message(FATAL_ERROR "libcxx not found!")<br>
>>> +  endif()<br>
>>> +<br>
>>> +  parse_arguments(LIBCXX "DEPS;CFLAGS" "" ${ARGN})<br>
>>> +  foreach(flag ${LIBCXX_CFLAGS})<br>
>>> +    set(flagstr "${flagstr} ${flag}")<br>
>>> +  endforeach()<br>
>>> +  set(LIBCXX_CFLAGS ${flagstr})<br>
>>> +<br>
>>> +  if(NOT COMPILER_RT_STANDALONE_BUILD)<br>
>>> +    list(APPEND LIBCXX_DEPS clang)<br>
>>> +  endif()<br>
>>> +<br>
>>> +  ExternalProject_Add(${name}<br>
>>> +    PREFIX ${prefix}<br>
>>> +    SOURCE_DIR ${COMPILER_RT_LIBCXX_PATH}<br>
>>> +    CMAKE_ARGS -DCMAKE_C_COMPILER=${COMPILER_RT_TEST_COMPILER}<br>
>>> +               -DCMAKE_CXX_COMPILER=${COMPILER_RT_TEST_COMPILER}<br>
>>> +               -DCMAKE_C_FLAGS=${LIBCXX_CFLAGS}<br>
>>> +               -DCMAKE_CXX_FLAGS=${LIBCXX_CFLAGS}<br>
>>> +               -DCMAKE_BUILD_TYPE=Release<br>
>>> +               -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR><br>
>>> +    )<br>
>>> +<br>
>>> +  ExternalProject_Add_Step(${name} force-reconfigure<br>
>>> +    DEPENDERS configure<br>
>>> +    ALWAYS 1<br>
>>> +    )<br>
>>> +<br>
>>> +  ExternalProject_Add_Step(${name} clobber<br>
>>> +    COMMAND ${CMAKE_COMMAND} -E remove_directory <BINARY_DIR><br>
>>> +    COMMAND ${CMAKE_COMMAND} -E make_directory <BINARY_DIR><br>
>>> +    COMMENT "Clobberring ${name} build directory..."<br>
>>> +    DEPENDERS configure<br>
>>> +    DEPENDS ${LIBCXX_DEPS}<br>
>>> +    )<br>
>>> +endmacro()<br>
>>><br>
>>> Modified: compiler-rt/trunk/lib/msan/CMakeLists.txt<br>
>>> URL:<br>
>>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/CMakeLists.txt?rev=208451&r1=208450&r2=208451&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/CMakeLists.txt?rev=208451&r1=208450&r2=208451&view=diff</a><br>

>>><br>
>>> ==============================================================================<br>
>>> --- compiler-rt/trunk/lib/msan/CMakeLists.txt (original)<br>
>>> +++ compiler-rt/trunk/lib/msan/CMakeLists.txt Fri May  9 17:11:03 2014<br>
>>> @@ -17,6 +17,8 @@ append_if(COMPILER_RT_HAS_FPIE_FLAG -fPI<br>
>>>  # Prevent clang from generating libc calls.<br>
>>>  append_if(COMPILER_RT_HAS_FFREESTANDING_FLAG -ffreestanding<br>
>>> MSAN_RTL_CFLAGS)<br>
>>><br>
>>> +set(MSAN_RUNTIME_LIBRARIES)<br>
>>> +<br>
>>>  # Static runtime library.<br>
>>>  add_custom_target(msan)<br>
>>>  set(arch "x86_64")<br>
>>> @@ -28,6 +30,7 @@ if(CAN_TARGET_${arch})<br>
>>>              $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}><br>
>>>      CFLAGS ${MSAN_RTL_CFLAGS})<br>
>>>    add_dependencies(msan clang_rt.msan-${arch})<br>
>>> +  list(APPEND MSAN_RUNTIME_LIBRARIES clang_rt.msan-${arch})<br>
>>>    if(UNIX)<br>
>>>      add_sanitizer_rt_symbols(clang_rt.msan-${arch} msan.syms.extra)<br>
>>>      add_dependencies(msan clang_rt.msan-${arch}-symbols)<br>
>>><br>
>>> Modified: compiler-rt/trunk/lib/msan/tests/CMakeLists.txt<br>
>>> URL:<br>
>>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/CMakeLists.txt?rev=208451&r1=208450&r2=208451&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/CMakeLists.txt?rev=208451&r1=208450&r2=208451&view=diff</a><br>

>>><br>
>>> ==============================================================================<br>
>>> --- compiler-rt/trunk/lib/msan/tests/CMakeLists.txt (original)<br>
>>> +++ compiler-rt/trunk/lib/msan/tests/CMakeLists.txt Fri May  9 17:11:03<br>
>>> 2014<br>
>>> @@ -5,29 +5,10 @@ include(CompilerRTLink)<br>
>>>  include_directories(..)<br>
>>>  include_directories(../..)<br>
>>><br>
>>> -# Instrumented libcxx sources and build flags.<br>
>>> -file(GLOB MSAN_LIBCXX_SOURCES ${COMPILER_RT_LIBCXX_PATH}/src/*.cpp)<br>
>>>  set(MSAN_LIBCXX_CFLAGS<br>
>>> -  -I${COMPILER_RT_LIBCXX_PATH}/include<br>
>>>    -fsanitize=memory<br>
>>>    -fsanitize-memory-track-origins<br>
>>> -  -fPIC<br>
>>> -  -Wno-\#warnings<br>
>>> -  -Wno-pedantic<br>
>>> -  -g<br>
>>> -  -O2<br>
>>> -  -fstrict-aliasing<br>
>>> -  -fno-exceptions<br>
>>> -  -nostdinc++<br>
>>> -  -fno-omit-frame-pointer<br>
>>> -  -mno-omit-leaf-frame-pointer)<br>
>>> -set(MSAN_LIBCXX_LINK_FLAGS<br>
>>> -  -nodefaultlibs<br>
>>> -  -lrt<br>
>>> -  -lc<br>
>>> -  -lstdc++<br>
>>> -  -fsanitize=memory)<br>
>>> -append_if(COMPILER_RT_HAS_LIBPTHREAD -lpthread MSAN_LIBCXX_LINK_FLAGS)<br>
>>> +  -Wno-pedantic)<br>
>>><br>
>>>  # Unittest sources and build flags.<br>
>>>  set(MSAN_UNITTEST_SOURCES msan_test.cc msan_test_main.cc)<br>
>>> @@ -103,46 +84,23 @@ macro(msan_link_shared so_list so_name a<br>
>>>    list(APPEND ${so_list} ${output_so})<br>
>>>  endmacro()<br>
>>><br>
>>> -# Link MSan unit test for a given architecture from a set<br>
>>> -# of objects in ${ARGN}.<br>
>>> -macro(add_msan_test test_suite test_name arch)<br>
>>> -  get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)<br>
>>> -  set(TEST_DEPS ${ARGN} ${MSAN_LOADABLE_SO})<br>
>>> -  if(NOT COMPILER_RT_STANDALONE_BUILD)<br>
>>> -    list(APPEND TEST_DEPS msan)<br>
>>> -  endif()<br>
>>> -  add_compiler_rt_test(${test_suite} ${test_name}<br>
>>> -                       OBJECTS ${ARGN}<br>
>>> -                       DEPS ${TEST_DEPS}<br>
>>> -                       LINK_FLAGS ${MSAN_UNITTEST_LINK_FLAGS}<br>
>>> -                                  ${TARGET_LINK_FLAGS}<br>
>>> -<br>
>>> "-Wl,-rpath=${CMAKE_CURRENT_BINARY_DIR}")<br>
>>> -endmacro()<br>
>>> -<br>
>>>  # Main MemorySanitizer unit tests.<br>
>>>  add_custom_target(MsanUnitTests)<br>
>>>  set_target_properties(MsanUnitTests PROPERTIES FOLDER "MSan unit tests")<br>
>>><br>
>>>  # Adds MSan unit tests and benchmarks for architecture.<br>
>>>  macro(add_msan_tests_for_arch arch kind)<br>
>>> +  set(LIBCXX_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/../libcxx_msan${kind})<br>
>>> +  add_custom_libcxx(libcxx_msan${kind} ${LIBCXX_PREFIX}<br>
>>> +    DEPS ${MSAN_RUNTIME_LIBRARIES}<br>
>>> +    CFLAGS ${MSAN_LIBCXX_CFLAGS} ${ARGN})<br>
>>> +  set(MSAN_LIBCXX_SO ${LIBCXX_PREFIX}/lib/libc++.so)<br>
>>> +<br>
>>>    # Build gtest instrumented with MSan.<br>
>>>    set(MSAN_INST_GTEST)<br>
>>>    msan_compile(MSAN_INST_GTEST ${COMPILER_RT_GTEST_SOURCE} ${arch}<br>
>>> "${kind}"<br>
>>>                                 ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS}<br>
>>> ${ARGN})<br>
>>><br>
>>> -  # Build libcxx instrumented with MSan.<br>
>>> -  set(MSAN_INST_LIBCXX_OBJECTS)<br>
>>> -  foreach(SOURCE ${MSAN_LIBCXX_SOURCES})<br>
>>> -    msan_compile(MSAN_INST_LIBCXX_OBJECTS ${SOURCE} ${arch} "${kind}"<br>
>>> -                 ${MSAN_LIBCXX_CFLAGS} ${ARGN})<br>
>>> -  endforeach(SOURCE)<br>
>>> -<br>
>>> -  set(MSAN_INST_LIBCXX)<br>
>>> -  msan_link_shared(MSAN_INST_LIBCXX "libcxx" ${arch} "${kind}"<br>
>>> -                   OBJECTS ${MSAN_INST_LIBCXX_OBJECTS}<br>
>>> -                   LINKFLAGS ${MSAN_LIBCXX_LINK_FLAGS}<br>
>>> -                   DEPS ${MSAN_INST_LIBCXX_OBJECTS})<br>
>>> -<br>
>>>    # Instrumented tests.<br>
>>>    set(MSAN_INST_TEST_OBJECTS)<br>
>>>    foreach (SOURCE ${MSAN_UNITTEST_SOURCES})<br>
>>> @@ -172,10 +130,21 @@ macro(add_msan_tests_for_arch arch kind)<br>
>>>                     OBJECTS ${MSANDR_TEST_OBJECTS}<br>
>>>                     DEPS ${MSANDR_TEST_OBJECTS})<br>
>>><br>
>>> -  # Link everything together.<br>
>>> -  add_msan_test(MsanUnitTests "Msan-${arch}${kind}-Test" ${arch}<br>
>>> -                ${MSAN_INST_TEST_OBJECTS} ${MSAN_INST_GTEST}<br>
>>> -                ${MSAN_INST_LIBCXX} ${MSANDR_TEST_SO})<br>
>>> +  set(MSAN_TEST_OBJECTS ${MSAN_INST_TEST_OBJECTS} ${MSAN_INST_GTEST}<br>
>>> +                        ${MSANDR_TEST_SO})<br>
>>> +  set(MSAN_TEST_DEPS ${MSAN_TEST_OBJECTS} libcxx_msan${kind}<br>
>>> +                     ${MSAN_LOADABLE_SO})<br>
>>> +  if(NOT COMPILER_RT_STANDALONE_BUILD)<br>
>>> +    list(APPEND MSAN_TEST_DEPS msan)<br>
>>> +  endif()<br>
>>> +  get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)<br>
>>> +  add_compiler_rt_test(MsanUnitTests "Msan-${arch}${kind}-Test" ${arch}<br>
>>> +         OBJECTS ${MSAN_TEST_OBJECTS} ${MSAN_LIBCXX_SO}<br>
>>> +         DEPS ${MSAN_TEST_DEPS}<br>
>>> +         LINK_FLAGS ${MSAN_UNITTEST_LINK_FLAGS}<br>
>>> +                     ${TARGET_LINK_FLAGS}<br>
>>> +                     "-Wl,-rpath=${CMAKE_CURRENT_BINARY_DIR}"<br>
>>> +                     "-Wl,-rpath=${LIBCXX_PREFIX}/lib")<br>
>>>  endmacro()<br>
>>><br>
>>>  # We should only build MSan unit tests if we can build instrumented<br>
>>> libcxx.<br>
>>><br>
>>><br>
>>> _______________________________________________<br>
>>> llvm-commits mailing list<br>
>>> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
>>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
>><br>
>><br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
>><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><div>Alexey Samsonov, Mountain View, CA</div></div>
</div>