Slightly off topic, but related: Is NuttX’ buildroot been adopted into Apache along with NuttX? I looked for it, but couldn’t find it. I have a few updates to push (gcc 8.4, 9, 10). I’d really like to share these…
Regards, -david > On Jan 9, 2021, at 8:57 AM, Xiang Xiao <xiaoxiang781...@gmail.com> wrote: > > On Sat, Jan 9, 2021 at 8:11 AM Anthony Merlino <anth...@vergeaero.com> > wrote: > >> Thanks for the info Xiang! I was on the right track but it is good to have >> some affirmation that I'm not missing something. >> >> The issue with the Arm maintained toolchain, as Greg has warned many times, >> is its use of newlib. Are you doing anything to ensure the wrong math >> library is not used? >> >> > Yes, from the theory, the potential conflict may happen since NuttX has its > own libc/libm implementation which is totally different from newlib, but at > least the follow combination is good from the practice: > > 1. libc and libm come from NuttX, libsupc++ come from newlib > 2. libc come from NuttX, libm and libsupc++ come from newlib > > We use item 2 for all arm based products and sim develop environment. > > I will work on improving buildroot to also build and include libsupcxx.a. >> >> With Alan's modified version of libcxx, he disabled some exception logic >> and maybe some other logic that was allowing me to build without libsupxx.a >> entirely. >> >> > libcxx will turn on/off exception and rtti automatically, you just need > specify the right compiler flag(e.g. -fno-exceptions and -fno-rtti): > https://github.com/llvm/llvm-project/blob/main/libcxx/include/__config#L433-L435 > https://github.com/llvm/llvm-project/blob/main/libcxx/include/__config#L1092-L1098 > > >> Also, may I ask why we are building libcxx by manually grabbing the source >> files and building it? Are we against just driving the build from their >> existing build system? > > > libcxx uses CMake, it's hard to integrate their build system. But, it will > be great if we can find a clean solution to reuse their build script. > > >> I ask because there are options in the way libcxx is >> built that might be useful to us and we have to replicate all of that if we >> just grab the source. >> >> > Except the build system integration, all NuttX specific changes are > upstream to the llvm project. We have to apply the following patches: > https://github.com/apache/incubator-nuttx/blob/master/libs/libxx/0001-libc-Fix-a-few-warnings.patch > https://github.com/apache/incubator-nuttx/blob/master/libs/libxx/0001-libc-Fix-tests-failing-with-Clang-after-removing-GCC.patch > https://github.com/apache/incubator-nuttx/blob/master/libs/libxx/0001-libc-NFC-Fix-several-GCC-warnings-in-the-test-suite.patch > https://github.com/apache/incubator-nuttx/blob/master/libs/libxx/0001-libcxx-Check-_LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE-fir.patch > https://github.com/apache/incubator-nuttx/blob/master/libs/libxx/0001-libcxx-Port-to-NuttX-https-nuttx.apache.org-RTOS.patch > just because the new libcxx contains our change doesn't release yet. Once > the new release is out, I will remove all patches from the NuttX repo. > > >> >> Best, >> Anthony >> >> >> On Sat, Jan 9, 2021, 7:32 AM Xiang Xiao <xiaoxiang781...@gmail.com> wrote: >> >>> On Fri, Jan 8, 2021 at 9:57 AM Anthony Merlino <anth...@vergeaero.com> >>> wrote: >>> >>>> Hey all, >>>> >>>> Would someone be willing to share their experience with libcxx and >> their >>>> toolchain? >>> >>> >>> This toolchain should work: >>> >>> >> https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm >>> >>> >>>> I've now caught up to the tip of master, which now downloads >>>> and builds libcxx for me instead of using Alan's modified version. I am >>>> facing an issue I've faced before, and would really love to properly >>>> understand how this is supposed to work. >>>> >>>> My issues mostly center around libsupc++.a >>>> >>>> Currently, my build fails because it can't find libsupc++. From my >>>> understanding, this should be provided by my toolchain. But I am using >> a >>>> toolchain built by the NuttX buildroot and it does not build the C++ >>>> libraries. I am not using RTTI or exceptions, so I don't need what >>>> >>> >>> libsupc++.a doesn't only provide RTTI and exectpions, but also provide >> some >>> basic functions called by compiler: >>> >>> >> https://github.com/gcc-mirror/gcc/tree/master/libstdc%2B%2B-v3/libsupc%2B%2B >>> >>> libsupc++ provides, however the Kconfig option >>>> `[ ] Have libsupc++ (required)` >>>> says, it's required. >>>> >>>> What's the right answer here? What are others doing about this? >>>> >>>> >>> Three methods you can try: >>> >>> 1. Switch to the ARM maintained toolchain >>> 2. Build libsupc++.a for NuttX toolchain >>> 3. Enhance NuttX's libc++ runtime support >>> >>> >>> https://github.com/apache/incubator-nuttx/tree/master/libs/libxx >>> >>> >>>> Is getting NuttX buildroot to build and provide libsupc++.a the *right* >>>> solution? >>>> >>>> >>> Yes, a complete toolchain should provide libsupc++.a. libsupc++.a just >> like >>> libgcc.a should part of toolchain, not part of c/c++ library >>> implemetnation, because libsupc++.a tightly couple with the implementaion >>> detail of compiler. >>> >>> >>>> Do we need to change how libcxx is built in this case? >>>> >>>> >>> >> https://libcxx.llvm.org/docs/BuildingLibcxx.html#using-alternate-abi-libraries >>>> >>>> >>> Then you need port the libcxxrt: >>> https://github.com/libcxxrt/libcxxrt >>> >>> >>>> Thank you! >>>> >>>> Anthony >>>> >>> >>