cmake build of LLVM: HAVE_CXX_ATOMICS_WITHOUT_LIB test failure

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

cmake build of LLVM: HAVE_CXX_ATOMICS_WITHOUT_LIB test failure

SC Warrior
I watched Chris Bieneman's talk about the transition of LLVM from autoconf to cmake and he raved about how friendly / vibrant the cmake community is so I thought I'd ask this here.  I posted it to stack overflow but it's fairly involved so I hope it's cool that I post (my first) in this forum.

I'm getting this failure trying to cross compile LLVM v3.7 (linux x64 -> Aarch64) w/ cmake:
<path to clang>/clang++  -DHAVE_CXX_ATOMICS_WITHOUT_LIB -std=c++11  -rdynamic CMakeFiles/cmTC_82a21.dir/src.cxx.o  -o cmTC_82a21  -lm -ldl && :
ld.lld: error: undefined symbol: pthread_once
referenced by cxa_exception_storage.cpp

this is then followed by numerous other "undefined symbol: pthread_blah" errors in the CMakeError.log file.

I have four questions:

(1) What is this phase of operation that cmake is performing to determine the capabilities of the build environment / platform called ? (i.e. the configure-like phase that performs numerous small compilation tests to see if they succeed, looks to see if it can find header files in expected paths, etc).

(2) It looks to me that including -lpthread as part of the test compilation line would fix this problem. (a) Is there a way to tell cmake to do that and (b) is that a smart approach to solving this problem ? Seems like if I could tell cmake to do this it would pass these tests.

(3) The cmake command seems to succeed as it finishes with "Build files have been written to ...". What should I make of that when one of these pre-tests has a failure condition as cited above and reports "Configuring incomplete, errors occurred!".

(4) I'm trying to get this cmake cross compile build to work with the stock LLVM v3.7 cmake files so I'm trying to control cmake using command line options only. This gets a little ugly and I'm wondering if there's a simple way to put all of these settings in a cmake file instead. One problem with that approach is that I'm not familiar with all of the targets in LLVM so if I were, to say, attempt to add libraries to targets to fix a linking problem, I wouldn't know offhand what targets to add them to. I'm hoping that in this case I can hit it with a bigger hammer and have them added everywhere with hopes of them being ignored if not used.

I gratefully thank you for your patience and time reading all of that ^^^.


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: cmake build of LLVM: HAVE_CXX_ATOMICS_WITHOUT_LIB test failure

Shoaib Meenai

[hidden email] would also be a good place to ask questions about the LLVM build system :)

 

  1. I believe it’s just called the configure phase. (There’s also the generation phase, where CMake actually generates the build system.)
  2. How have you set up your cross-compilation? LLVM’s build system has logic to link pthread if needed, so I’m wondering why that’s failing.
  3. LLVM’s cross-compilation runs a sub-configure for some native build components (e.g. TableGen) – perhaps one of those sub-configures is succeeding but the main configure is failing? I’ve never seen the “Build files have been written to” and “Configuring incomplete, errors occurred” messages from the same configure.
  4. You can use a CMake cache file – see “-C <initial-cache>” in https://cmake.org/cmake/help/latest/manual/cmake.1.html#options

 

How come you’re working with LLVM 3.7, btw? That’s pretty old at this point, and newer versions will have improved the build system (and it’s also a lot easier to provide assistance for them).

 

From: CMake <[hidden email]> on behalf of SC Warrior <[hidden email]>
Date: Wednesday, April 10, 2019 at 5:09 PM
To: "[hidden email]" <[hidden email]>
Subject: [CMake] cmake build of LLVM: HAVE_CXX_ATOMICS_WITHOUT_LIB test failure

 

I watched Chris Bieneman's talk about the transition of LLVM from autoconf to cmake and he raved about how friendly / vibrant the cmake community is so I thought I'd ask this here.  I posted it to stack overflow but it's fairly involved so I hope it's cool that I post (my first) in this forum.



I'm getting this failure trying to cross compile LLVM v3.7 (linux x64 -> Aarch64) w/ cmake:

<path to clang>/clang++  -DHAVE_CXX_ATOMICS_WITHOUT_LIB -std=c++11  -rdynamic CMakeFiles/cmTC_82a21.dir/src.cxx.o  -o cmTC_82a21  -lm -ldl && :
ld.lld: error: undefined symbol: pthread_once
referenced by cxa_exception_storage.cpp

this is then followed by numerous other "undefined symbol: pthread_blah" errors in the CMakeError.log file.

I have four questions:

(1) What is this phase of operation that cmake is performing to determine the capabilities of the build environment / platform called ? (i.e. the configure-like phase that performs numerous small compilation tests to see if they succeed, looks to see if it can find header files in expected paths, etc).

(2) It looks to me that including -lpthread as part of the test compilation line would fix this problem. (a) Is there a way to tell cmake to do that and (b) is that a smart approach to solving this problem ? Seems like if I could tell cmake to do this it would pass these tests.

(3) The cmake command seems to succeed as it finishes with "Build files have been written to ...". What should I make of that when one of these pre-tests has a failure condition as cited above and reports "Configuring incomplete, errors occurred!".

(4) I'm trying to get this cmake cross compile build to work with the stock LLVM v3.7 cmake files so I'm trying to control cmake using command line options only. This gets a little ugly and I'm wondering if there's a simple way to put all of these settings in a cmake file instead. One problem with that approach is that I'm not familiar with all of the targets in LLVM so if I were, to say, attempt to add libraries to targets to fix a linking problem, I wouldn't know offhand what targets to add them to. I'm hoping that in this case I can hit it with a bigger hammer and have them added everywhere with hopes of them being ignored if not used.

I gratefully thank you for your patience and time reading all of that ^^^.


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: cmake build of LLVM: HAVE_CXX_ATOMICS_WITHOUT_LIB test failure

SC Warrior
Thanks for your response Shoaib.  I've got it building now.  It required modifying the LLVM cmake scripts to include the libraries.  3.7 is a hard requirement.  Cache file, great.  Thanks!

On Thu, Apr 11, 2019 at 2:09 PM Shoaib Meenai <[hidden email]> wrote:

[hidden email] would also be a good place to ask questions about the LLVM build system :)

 

  1. I believe it’s just called the configure phase. (There’s also the generation phase, where CMake actually generates the build system.)
  2. How have you set up your cross-compilation? LLVM’s build system has logic to link pthread if needed, so I’m wondering why that’s failing.
  3. LLVM’s cross-compilation runs a sub-configure for some native build components (e.g. TableGen) – perhaps one of those sub-configures is succeeding but the main configure is failing? I’ve never seen the “Build files have been written to” and “Configuring incomplete, errors occurred” messages from the same configure.
  4. You can use a CMake cache file – see “-C <initial-cache>” in https://cmake.org/cmake/help/latest/manual/cmake.1.html#options

 

How come you’re working with LLVM 3.7, btw? That’s pretty old at this point, and newer versions will have improved the build system (and it’s also a lot easier to provide assistance for them).

 

From: CMake <[hidden email]> on behalf of SC Warrior <[hidden email]>
Date: Wednesday, April 10, 2019 at 5:09 PM
To: "[hidden email]" <[hidden email]>
Subject: [CMake] cmake build of LLVM: HAVE_CXX_ATOMICS_WITHOUT_LIB test failure

 

I watched Chris Bieneman's talk about the transition of LLVM from autoconf to cmake and he raved about how friendly / vibrant the cmake community is so I thought I'd ask this here.  I posted it to stack overflow but it's fairly involved so I hope it's cool that I post (my first) in this forum.



I'm getting this failure trying to cross compile LLVM v3.7 (linux x64 -> Aarch64) w/ cmake:

<path to clang>/clang++  -DHAVE_CXX_ATOMICS_WITHOUT_LIB -std=c++11  -rdynamic CMakeFiles/cmTC_82a21.dir/src.cxx.o  -o cmTC_82a21  -lm -ldl && :
ld.lld: error: undefined symbol: pthread_once
referenced by cxa_exception_storage.cpp

this is then followed by numerous other "undefined symbol: pthread_blah" errors in the CMakeError.log file.

I have four questions:

(1) What is this phase of operation that cmake is performing to determine the capabilities of the build environment / platform called ? (i.e. the configure-like phase that performs numerous small compilation tests to see if they succeed, looks to see if it can find header files in expected paths, etc).

(2) It looks to me that including -lpthread as part of the test compilation line would fix this problem. (a) Is there a way to tell cmake to do that and (b) is that a smart approach to solving this problem ? Seems like if I could tell cmake to do this it would pass these tests.

(3) The cmake command seems to succeed as it finishes with "Build files have been written to ...". What should I make of that when one of these pre-tests has a failure condition as cited above and reports "Configuring incomplete, errors occurred!".

(4) I'm trying to get this cmake cross compile build to work with the stock LLVM v3.7 cmake files so I'm trying to control cmake using command line options only. This gets a little ugly and I'm wondering if there's a simple way to put all of these settings in a cmake file instead. One problem with that approach is that I'm not familiar with all of the targets in LLVM so if I were, to say, attempt to add libraries to targets to fix a linking problem, I wouldn't know offhand what targets to add them to. I'm hoping that in this case I can hit it with a bigger hammer and have them added everywhere with hopes of them being ignored if not used.

I gratefully thank you for your patience and time reading all of that ^^^.


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake