[llvm] r361513 - [CMake] Copy C++ headers before configuring runtimes build

Chris Bieneman via llvm-commits llvm-commits at lists.llvm.org
Fri May 24 09:20:33 PDT 2019


HI Mikael,

I see what is going on here. I hadn't anticipated anyone would build compiler-rt without libcxx since compiler-rt depends on libcxx headers. You may have build correctness issues without libcxx being present, but I have pushed r361646 which should resolve your configuration issue.

-Chris

> On May 24, 2019, at 1:14 AM, Mikael Holmén <mikael.holmen at ericsson.com> wrote:
> 
> Hi,
> 
> When I'm having runtimes/compiler-rt present I get the following with 
> this patch (even when including the fix in r361535):
> 
> CMake Error at 
> /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:2097 
> (get_property):
>   get_property could not find TARGET runtime-libcxx-headers.  Perhaps 
> it has
>   not yet been created.
> Call Stack (most recent call first):
>   /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:2433 
> (_ep_add_configure_command)
>   cmake/modules/LLVMExternalProjectUtils.cmake:217 (ExternalProject_Add)
>   runtimes/CMakeLists.txt:412 (llvm_ExternalProject_Add)
>   runtimes/CMakeLists.txt:535 (runtime_default_target)
> 
> 
> CMake Error at 
> /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:2099 
> (get_property):
>   get_property could not find TARGET runtime-libcxx-headers.  Perhaps 
> it has
>   not yet been created.
> Call Stack (most recent call first):
>   /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:2433 
> (_ep_add_configure_command)
>   cmake/modules/LLVMExternalProjectUtils.cmake:217 (ExternalProject_Add)
>   runtimes/CMakeLists.txt:412 (llvm_ExternalProject_Add)
>   runtimes/CMakeLists.txt:535 (runtime_default_target)
> 
> 
> CMake Error at 
> /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:1169 
> (get_property):
>   get_property could not find TARGET runtime-libcxx-headers.  Perhaps 
> it has
>   not yet been created.
> Call Stack (most recent call first):
>   /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:1388 
> (ExternalProject_Get_Property)
>   /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:2101 
> (_ep_get_step_stampfile)
>   /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:2433 
> (_ep_add_configure_command)
>   cmake/modules/LLVMExternalProjectUtils.cmake:217 (ExternalProject_Add)
>   runtimes/CMakeLists.txt:412 (llvm_ExternalProject_Add)
>   runtimes/CMakeLists.txt:535 (runtime_default_target)
> 
> 
> CMake Error at 
> /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:1171 (message):
>   External project "runtime-libcxx-headers" has no stamp_dir
> Call Stack (most recent call first):
>   /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:1388 
> (ExternalProject_Get_Property)
>   /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:2101 
> (_ep_get_step_stampfile)
>   /usr/local/share/cmake-3.4/Modules/ExternalProject.cmake:2433 
> (_ep_add_configure_command)
>   cmake/modules/LLVMExternalProjectUtils.cmake:217 (ExternalProject_Add)
>   runtimes/CMakeLists.txt:412 (llvm_ExternalProject_Add)
>   runtimes/CMakeLists.txt:535 (runtime_default_target)
> 
> 
> -- Configuring incomplete, errors occurred!
> See also 
> "/data/repo/dev-master/build-all-builtins/CMakeFiles/CMakeOutput.log".
> See also 
> "/data/repo/dev-master/build-all-builtins/CMakeFiles/CMakeError.log".
> FAILED: build.ninja
> /usr/local/bin/cmake -H/data/repo/dev-master 
> -B/data/repo/dev-master/build-all-builtins
> ninja: error: rebuilding 'build.ninja': subcommand failed
> 
> 
> -----------
> 
> 
> I can't see that LLVM_EXTERNAL_LIBCXX_SOURCE_DIR is set anywhere, so 
> does that mean runtime-libcxx-headers isn't set either, so that's why it 
> fails since there is a dependency towards runtime-libcxx-headers anyway?
> 
> If I remove runtime-libcxx-headers from
> 
>     llvm_ExternalProject_Add(runtimes
>                              ${CMAKE_CURRENT_SOURCE_DIR}
>                              DEPENDS ${ARG_DEPENDS} runtime-libcxx-headers
> 
> then it compiles.
> 
> Any idea?
> 
> Regards,
> Mikael
> 
> On 5/23/19 7:06 PM, Chris Bieneman via llvm-commits wrote:
>> Author: cbieneman
>> Date: Thu May 23 10:06:46 2019
>> New Revision: 361513
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=361513&view=rev
>> Log:
>> [CMake] Copy C++ headers before configuring runtimes build
>> 
>> Summary: On some platforms C++ headers are packaged with the compiler not the sysroot. If you don't copy C++ headers into the build include directory during configuraiton of the outer build the C++ check during the runtime configuration may get inaccurate results.
>> 
>> Reviewers: phosek, compnerd, smeenai, EricWF
>> 
>> Reviewed By: compnerd
>> 
>> Subscribers: EricWF, christof, libcxx-commits, mgorny, llvm-commits
>> 
>> Tags: #llvm, #libc
>> 
>> Differential Revision: https://reviews.llvm.org/D62155
>> 
>> Modified:
>>     llvm/trunk/runtimes/CMakeLists.txt
>> 
>> Modified: llvm/trunk/runtimes/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/runtimes/CMakeLists.txt?rev=361513&r1=361512&r2=361513&view=diff
>> ==============================================================================
>> --- llvm/trunk/runtimes/CMakeLists.txt (original)
>> +++ llvm/trunk/runtimes/CMakeLists.txt Thu May 23 10:06:46 2019
>> @@ -4,8 +4,12 @@
>>  # should be built with the LLVM toolchain from the build directory. This file is
>>  # a first step to formalizing runtime build interfaces.
>> 
>> -# In the current state this file only works with compiler-rt, other runtimes
>> -# will work as the runtime build interface standardizes.
>> +# Setting CMake minimum required version should be at the very top of the file
>> +# if this is the entry point.
>> +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
>> +  cmake_minimum_required(VERSION 3.4.3)
>> +  project(Runtimes C CXX ASM)
>> +endif()
>> 
>>  # Find all subdirectories containing CMake projects
>>  file(GLOB entries *)
>> @@ -205,6 +209,11 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_
>> 
>>  else() # if this is included from LLVM's CMake
>>    include(LLVMExternalProjectUtils)
>> +  if (LLVM_EXTERNAL_LIBCXX_SOURCE_DIR)
>> +    set(LIBCXX_HEADER_DIR ${LLVM_INCLUDE_DIR}/c++/v1/)
>> +    set(CXX_HEADER_TARGET runtime-libcxx-headers)
>> +    add_subdirectory(${LLVM_EXTERNAL_LIBCXX_SOURCE_DIR}/include ${CXX_HEADER_TARGET})
>> +  endif()
>> 
>>    if(NOT LLVM_BUILD_RUNTIMES)
>>      set(EXTRA_ARGS EXCLUDE_FROM_ALL)
>> @@ -354,7 +363,7 @@ else() # if this is included from LLVM's
>> 
>>      llvm_ExternalProject_Add(runtimes
>>                               ${CMAKE_CURRENT_SOURCE_DIR}
>> -                             DEPENDS ${ARG_DEPENDS}
>> +                             DEPENDS ${ARG_DEPENDS} runtime-libcxx-headers
>>                               # Builtins were built separately above
>>                               CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off
>>                                          -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
>> @@ -445,7 +454,7 @@ else() # if this is included from LLVM's
>> 
>>      llvm_ExternalProject_Add(runtimes-${name}
>>                               ${CMAKE_CURRENT_SOURCE_DIR}
>> -                             DEPENDS ${${name}_deps}
>> +                             DEPENDS ${${name}_deps} runtime-libcxx-headers
>>                               # Builtins were built separately above
>>                               CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off
>>                                          -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS}
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>> 



More information about the llvm-commits mailing list