Guys, I think we should move your bitbucket libcxx to github.com/nuttx
to make it more official.

What do you think? Other (better) option should including official
support to NuttX on llvm libcxx.

BR,

Alan

On 8/14/20, Xiang Xiao <xiaoxiang781...@gmail.com> wrote:
> This is because Alan's porting isn't compatible with the NuttX's latest
> master.
> Please try this patch which integrate the latest libc++(11.0.0-rc1) into
> NuttX:
> https://github.com/apache/incubator-nuttx/pull/1592
> Note: you don't need git clone libc++ manually, Makefile will do this
> automatically.
>
>> -----Original Message-----
>> From: Matt DeWall <mdew...@gmail.com>
>> Sent: Friday, August 14, 2020 9:23 AM
>> To: dev@nuttx.apache.org
>> Subject: Re: cpp cxx help - No thread API
>>
>> Thanks Xiang.  We're definitely getting closer, I now hit some conflicting
>> declarations within libcxx:
>>
>> IN: arch/arm/src/libarch.a -> staging/libarch.a
>> make[1]: Entering directory '/nuttx/nuttx/libs/libxx'
>> CXX:  libxx_cxa_atexit.cxx
>> CXX:  libxx_eabi_atexit.cxx
>> CXX:  libcxx/algorithm.cxx
>> In file included from /nuttx/nuttx/include/string.h:45,
>>                  from /nuttx/nuttx/include/libcxx/string.h:61,
>>                  from /nuttx/nuttx/include/libcxx/cstring:61,
>>                  from /nuttx/nuttx/include/libcxx/algorithm:638,
>>                  from libcxx/algorithm.cxx:10:
>> /nuttx/nuttx/include/libcxx/stddef.h:57:21: error: conflicting declaration
>> 'typedef long double max_align_t'
>>    57 | typedef long double max_align_t;
>>       |                     ^~~~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/cstddef:43,
>>                  from /nuttx/nuttx/include/libcxx/initializer_list:47,
>>                  from /nuttx/nuttx/include/libcxx/algorithm:636,
>>                  from libcxx/algorithm.cxx:10:
>> /nuttx/nuttx/include/stddef.h:120:3: note: previous declaration as
>> 'typedef struct max_align_t max_align_t'
>>   120 | } max_align_t;
>>       |   ^~~~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/__locale:40,
>>                  from /nuttx/nuttx/include/libcxx/ios:216,
>>                  from /nuttx/nuttx/include/libcxx/ostream:138,
>>                  from /nuttx/nuttx/include/libcxx/istream:163,
>>                  from /nuttx/nuttx/include/libcxx/random:1646,
>>                  from libcxx/algorithm.cxx:11:
>> /nuttx/nuttx/include/libcxx/support/xlocale/__nop_locale_mgmt.h:20:24:
>> error: 'void* duplocale(locale_t)' was declared  extern' and later
>> 'static'
>> [-fpermissive]
>>    20 | static inline locale_t duplocale(locale_t) {
>>       |                        ^~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/__locale:21,
>>                  from /nuttx/nuttx/include/libcxx/ios:216,
>>                  from /nuttx/nuttx/include/libcxx/ostream:138,
>>                  from /nuttx/nuttx/include/libcxx/istream:163,
>>                  from /nuttx/nuttx/include/libcxx/random:1646,
>>                  from libcxx/algorithm.cxx:11:
>> /nuttx/nuttx/include/locale.h:127:10: note: previous declaration of 'void*
>> duplocale(locale_t)'
>>   127 | locale_t duplocale(locale_t locobj);
>>       |          ^~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/__locale:40,
>>                  from /nuttx/nuttx/include/libcxx/ios:216,
>>                  from /nuttx/nuttx/include/libcxx/ostream:138,
>>                  from /nuttx/nuttx/include/libcxx/istream:163,
>>                  from /nuttx/nuttx/include/libcxx/random:1646,
>>                  from libcxx/algorithm.cxx:11:
>> /nuttx/nuttx/include/libcxx/support/xlocale/__nop_locale_mgmt.h:24:20:
>> error: 'void freelocale(locale_t)' was declared  extern' and later
>> 'static'
>> [-fpermissive]
>>    24 | static inline void freelocale(locale_t) {
>>       |                    ^~~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/__locale:21,
>>                  from /nuttx/nuttx/include/libcxx/ios:216,
>>                  from /nuttx/nuttx/include/libcxx/ostream:138,
>>                  from /nuttx/nuttx/include/libcxx/istream:163,
>>                  from /nuttx/nuttx/include/libcxx/random:1646,
>>                  from libcxx/algorithm.cxx:11:
>> /nuttx/nuttx/include/locale.h:128:6: note: previous declaration of 'void
>> freelocale(locale_t)'
>>   128 | void freelocale(locale_t locobj);
>>       |      ^~~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/__locale:40,
>>                  from /nuttx/nuttx/include/libcxx/ios:216,
>>                  from /nuttx/nuttx/include/libcxx/ostream:138,
>>                  from /nuttx/nuttx/include/libcxx/istream:163,
>>                  from /nuttx/nuttx/include/libcxx/random:1646,
>>                  from libcxx/algorithm.cxx:11:
>> /nuttx/nuttx/include/libcxx/support/xlocale/__nop_locale_mgmt.h:27:24:
>> error: 'void* newlocale(int, const char*, locale_t)' was declared
>> 'extern'
>> and later 'static' [-fpermissive]
>>    27 | static inline locale_t newlocale(int, const char *, locale_t) {
>>       |                        ^~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/__locale:21,
>>                  from /nuttx/nuttx/include/libcxx/ios:216,
>>                  from /nuttx/nuttx/include/libcxx/ostream:138,
>>                  from /nuttx/nuttx/include/libcxx/istream:163,
>>                  from /nuttx/nuttx/include/libcxx/random:1646,
>>                  from libcxx/algorithm.cxx:11:
>> /nuttx/nuttx/include/locale.h:126:10: note: previous declaration of 'void*
>> newlocale(int, const char*, locale_t)'
>>   126 | locale_t newlocale(int category_mask, FAR const char *locale,
>> locale_t base);
>>       |          ^~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/__locale:40,
>>                  from /nuttx/nuttx/include/libcxx/ios:216,
>>                  from /nuttx/nuttx/include/libcxx/ostream:138,
>>                  from /nuttx/nuttx/include/libcxx/istream:163,
>>                  from /nuttx/nuttx/include/libcxx/random:1646,
>>                  from libcxx/algorithm.cxx:11:
>> /nuttx/nuttx/include/libcxx/support/xlocale/__nop_locale_mgmt.h:31:24:
>> error: 'void* uselocale(locale_t)' was declared  extern' and later
>> 'static'
>> [-fpermissive]
>>    31 | static inline locale_t uselocale(locale_t) {
>>       |                        ^~~~~~~~~
>> In file included from /nuttx/nuttx/include/libcxx/__locale:21,
>>                  from /nuttx/nuttx/include/libcxx/ios:216,
>>                  from /nuttx/nuttx/include/libcxx/ostream:138,
>>                  from /nuttx/nuttx/include/libcxx/istream:163,
>>                  from /nuttx/nuttx/include/libcxx/random:1646,
>>                  from libcxx/algorithm.cxx:11:
>> /nuttx/nuttx/include/locale.h:130:10: note: previous declaration of 'void*
>> uselocale(locale_t)'
>>   130 | locale_t uselocale(locale_t newloc);
>>       |          ^~~~~~~~~
>> make[1]: *** [Makefile:80: algorithm.o] Error 1
>> make[1]: Leaving directory '/nuttx/nuttx/libs/libxx'
>> make: *** [tools/LibTargets.mk:203: libs/libxx/libxx.a] Error 2
>>
>> On Wed, Aug 12, 2020 at 8:55 PM Xiang Xiao <xiaoxiang781...@gmail.com>
>> wrote:
>>
>> > Matt, please try the attached workaround. I will provide the real
>> > implementation later.
>> >
>> > > -----Original Message-----
>> > > From: Matt DeWall <mdew...@gmail.com>
>> > > Sent: Thursday, August 13, 2020 9:48 AM
>> > > To: dev@nuttx.apache.org
>> > > Subject: Re: cpp cxx help - No thread API
>> > >
>> > > I should add that I also tried Marc's original answer (multiple
>> > > lines to
>> > > Make.defs) with the same result.
>> > >
>> > > On Wed, Aug 12, 2020 at 6:38 PM Matt DeWall <mdew...@gmail.com>
>> > > wrote:
>> > >
>> > > > Xiang and Marc, thank you very much for your quick responses.
>> > > >
>> > > > That did get me further, I'm getting an error around
>> > > > "at_quick_exit"
>> > now.
>> > > > Based on my googles it's regarding std11 or std17 options not
>> > > > being defined.
>> > > >
>> > > > I did try adding -std=c++11 to the Make.defs but it didn't have
>> > > > any effect.  I'm using the libcxx I cloned from
>> > > > https://bitbucket.org/acassis/libcxx (per the docs) if that makes
>> > > > any difference.
>> > > >
>> > > > Error:
>> > > > make[1]: Entering directory '/nuttx/nuttx/libs/libxx'
>> > > > CXX:  libxx_cxa_atexit.cxx
>> > > > In file included from libxx.hxx:62,
>> > > >                  from libxx_cxa_atexit.cxx:44:
>> > > > /nuttx/nuttx/include/libcxx/cstdlib:155:9: error: '::at_quick_exit'
>> > > > has not been declared
>> > > >   155 | using ::at_quick_exit;
>> > > >       |         ^~~~~~~~~~~~~
>> > > > /nuttx/nuttx/include/libcxx/cstdlib:156:9: error: '::quick_exit'
>> > > > has not been declared
>> > > >   156 | using ::quick_exit;
>> > > >       |         ^~~~~~~~~~
>> > > > make[1]: *** [Makefile:80: libxx_cxa_atexit.o] Error 1
>> > > > make[1]: Leaving directory '/nuttx/nuttx/libs/libxx'
>> > > > make: *** [tools/LibTargets.mk:203: libs/libxx/libxx.a] Error 2
>> > > >
>> > > > Thanks!
>> > > >
>> > > > Matt
>> > > >
>> > > >
>> > > > On Wed, Aug 12, 2020 at 12:22 AM Xiang Xiao
>> > > > <xiaoxiang781...@gmail.com>
>> > > > wrote:
>> > > >
>> > > >> Yes, include setting is done in the recently:
>> > > >> commit d32e9c38dfb0659a7f3c0cf586ba1584cd7eb3d6
>> > > >> Author: Xiang Xiao <xiaoxi...@xiaomi.com>
>> > > >> Date:   Sat Jul 11 18:37:40 2020 +0800
>> > > >>
>> > > >>     boards: Move the C/C++ search path to the common place
>> > > >>
>> > > >>     so all boards support uClibc++/libc++ automatically
>> > > >>
>> > > >>     Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com>
>> > > >>     Change-Id: Ibe6fafbec57f7acb26ea6188a3e9923ea82295c5
>> > > >> which is part of the work to make libc++/uCLibc++ available to
>> > > >> all
>> > boards.
>> > > >>
>> > > >> > -----Original Message-----
>> > > >> > From: Marc Rosen <ma...@zeitcontrol.de>
>> > > >> > Sent: Wednesday, August 12, 2020 2:46 PM
>> > > >> > To: dev@nuttx.apache.org
>> > > >> > Subject: Re: cpp cxx help - No thread API
>> > > >> >
>> > > >> > I should look more through before starting to say stuff.
>> > > >> >
>> > > >> > So most of the stuff I mentioned is moot because it was moved
>> > > >> > to a
>> > > >> different place that I was not aware of.
>> > > >> >
>> > > >> > So Matt as Xiang mentioned the ARCHCXXFLAGS line should be
>> > > >> > enough.
>> > > >> Importend is the define of __NuttX__ because it enables the
>> > > >> > necessary options for libcpp to compile.
>> > > >> >
>> > > >> > regards
>> > > >> >
>> > > >> > Marc Rosen
>> > > >> >
>> > > >> > ZeitControl Cardsystems GmbH
>> > > >> > Siedlerweg 39
>> > > >> > D-32429 Minden
>> > > >> > Tel.    ++49 (0)571 50 52 222
>> > > >> > Fax.    ++49 (0)571 50 52 299
>> > > >> > E-Mail  ma...@zeitcontrol.de
>> > > >> >
>> > > >> > Am 12.08.2020 um 08:32 schrieb Marc Rosen:
>> > > >> > > Hi,
>> > > >> > >
>> > > >> > > i did a curiosity check on this.
>> > > >> > > No Make.defs for STM32 boards on master from some what
>> > > >> > > yesterday evening (my localtime) has any include definitions
>> > > >> > > for c++.
>> > > >> > >
>> > > >> > > So to help Matt. the following is from my current config add
>> > > >> > > this to your Make.defs in your /nuttx/nuttx folder:
>> > > >> > >
>> > > >> > > ARCHINCLUDESXX += ${shell $(INCDIR) -s "$(CC)"
>> > > >> > > $(TOPDIR)$(DELIM)include} ARCHINCLUDESXX += ${shell $(INCDIR)
>> > > >> > > -s
>> > > >> "$(CC)"
>> > > >> > > $(TOPDIR)$(DELIM)include$(DELIM)cxx}
>> > > >> > > ARCHINCLUDESXX += ${shell $(INCDIR) -s "$(CC)"
>> > > >> > > $(TOPDIR)$(DELIM)include$(DELIM)libcxx}
>> > > >> > >
>> > > >> > > ifeq ($(CONFIG_LIBCXX),y)
>> > > >> > >   ARCHCXXFLAGS += -std=c++17 -D__NuttX__
>> > > >> > > -D_LIBCPP_BUILD_STATIC
>> > > >> > >
>> > > >> > >   ifneq ($(CONFIG_CXX_EXCEPTION),y)
>> > > >> > >     ARCHCXXFLAGS += -D_LIBCPP_NO_EXCEPTIONS
>> > > >> > >   endif
>> > > >> > >
>> > > >> > >   ifeq ($(CONFIG_LIBCXX_BUILD_LIBRARY),y)
>> > > >> > >     ARCHCXXFLAGS += -D_LIBCPP_BUILDING_LIBARAY
>> > > >> > >   endif
>> > > >> > >
>> > > >> > > endif
>> > > >> > >
>> > > >> > > regards
>> > > >> > >
>> > > >> > > Marc Rosen
>> > > >> > >
>> > > >> > > ZeitControl Cardsystems GmbH
>> > > >> > > Siedlerweg 39
>> > > >> > > D-32429 Minden
>> > > >> > > Tel.    ++49 (0)571 50 52 222
>> > > >> > > Fax.    ++49 (0)571 50 52 299
>> > > >> > > E-Mail  ma...@zeitcontrol.de
>> > > >> > >
>> > > >> > > Am 12.08.2020 um 08:07 schrieb Xiang Xiao:
>> > > >> > >> Do you have this in your boards/Make.defs:
>> > > >> > >> ARCHCXXFLAGS += -D__NuttX__ -nostdinc++ Since there are many
>> > > >> > >> complex setting to make C++ library work on NuttX, but this
>> > > >> > >> setting spread
>> > > >> in different Make.defs, I plan to enhance the experience in the
>> > > >> > next couple weeks(actually, all is done in our internal
>> > > >> > development
>> > > >> branch):
>> > > >> > >> 1.Centralize the setting to arch/Toolchain.defs, so all
>> > > >> > >> boards will
>> > > >> support libc++/uClibc++ automatically.
>> > > >> > >> 2.Upgrade to the latest uClibc++(already upstream) and
>> > > >> > >> libc++ without the special NuttX hack 3.Modify Makefile to
>> > > >> > >> automatically download the package from the official
>> > > >> > >> release(uClibc++ already upstream) 4.Enable all deconfig
>> > > >> > >> related to uClibc++/libc++ in the daily build system
>> > > >> > >>
>> > > >> > >>> -----Original Message-----
>> > > >> > >>> From: Matt DeWall <mdew...@gmail.com>
>> > > >> > >>> Sent: Wednesday, August 12, 2020 10:53 AM
>> > > >> > >>> To: dev@nuttx.apache.org
>> > > >> > >>> Subject: cpp cxx help - No thread API
>> > > >> > >>>
>> > > >> > >>> Hi devs!  I'm getting started on NuttX and love the project.
>> > > >> Looking to port my cpp project to NuttX.
>> > > >> > >>>
>> > > >> > >>> I'm having trouble compiling the CPP version of the hello
>> > > >> > >>> world using the existing documentation.  I'm able to build
>> > > >> > >>> nuttx just
>> > > >> fine and flash my device using the C version of Hello World.
>> > > >> > >>>
>> > > >> > >>> The error during CXX building is "No thread API"
>> > > >> > >>>
>> > > >> > >>>
>> > > >> > >>> *Background:*
>> > > >> > >>>
>> > > >> > >>> I'm following the (latest?) directions here:
>> > > >> > >>>
>> > > >> > >>> https://github.com/apache/incubator-nuttx/
>> > > >> > >>>
>> > > >> > >>> I made my own docker image based on this Dockerfile which I
>> > > >> understand nuttx is using for some part of ci/cid/testing:
>> > > >> > >>>
>> > > >> > >>>
>> > > >> https://github.com/apache/incubator-nuttx-testing/blob/master/doc
>> > > >> ker
>> > > >> > >>> /linux/Dockerfile
>> > > >> > >>>
>> > > >> > >>> Running the following commands:
>> > > >> > >>>
>> > > >> > >>>  git clone https://github.com/apache/incubator-nuttx.git
>> > > >> > >>> nuttx git clone
>> > > >> > >>> https://github.com/apache/incubator-nuttx-apps.git
>> > > >> > >>> apps
>> > > >> > >>>
>> > > >> > >>> Then I configure for my own board (stm32f103rbt6)
>> > > >> > >>> ./configure.sh nucleo-f103rb/nsh
>> > > >> > >>>
>> > > >> > >>> After "make menuconfig" and configuring the C hello world
>> > > >> > >>> app, I'm
>> > > >> able to build and flash my board and run "hello" just fine.
>> > > >> > >>>
>> > > >> > >>> This leads me to believe my toolchain is good to go.
>> > > >> > >>>
>> > > >> > >>>
>> > > >> > >>> *Installing libcxx:*
>> > > >> > >>>
>> > > >> > >>> So moving on the c++ docs found here:
>> > > >> > >>>
>> > > >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=
>> > > >> 139
>> > > >> > >>> 629545
>> > > >> > >>> but they may be outdated?
>> > > >> > >>>
>> > > >> > >>> Running:
>> > > >> > >>>
>> > > >> > >>> git clone https://bitbucket.org/acassis/libcxx
>> > > >> > >>> cd libcxx
>> > > >> > >>> ./install /nuttx/nuttx
>> > > >> > >>>
>> > > >> > >>> "Installing LLVM/libcxx in the NuttX source
>> > > >> > >>> treeInstallation
>> > > >> succeeded"
>> > > >> > >>>
>> > > >> > >>> I skipped the other two lines in that guide because they
>> > > >> > >>> seem to
>> > > >> clone a different and older nuttx clone from Alan's repo.
>> > > >> > >>>
>> > > >> > >>>
>> > > >> > >>> *Trying to implement c++:*
>> > > >> > >>>
>> > > >> > >>> Going over to make menuconfig and enabling the following
>> > > >> > >>> options (and whatever comes with them)
>> > > >> > >>>
>> > > >> > >>> Libary Routines->Have C++ Compiler
>> > > >> > >>>
>> > > >> > >>> Libary Routines->Build LLVM libc++
>> > > >> > >>>
>> > > >> > >>> Applications->Hello World C++ example
>> > > >> > >>>
>> > > >> > >>> When I go to build I get a "No thread API"...
>> > > >> > >>>
>> > > >> > >>> make[2]: Entering directory
>> > > >> > >>> '/nuttx/apps/examples/helloxx'In file included from
>> > > >> > >>> /nuttx/nuttx/include/libcxx/cstdio:99,from
>> > > >> > >>>
>> > ./helloxx_main.cxx:42:/nuttx/nuttx/include/libcxx/__config:845:4:
>> > > >> error:
>> > > >> > >>> #error "No thread API"845 | #  error "No thread API"
>> > > >> > >>>
>> > > >> > >>> I've only seen a 3 year old post where some person was
>> > > >> > >>> using their
>> > > >> own toolchain, so I'm not clear on how to proceed.
>> > > >> > >>>
>> > > >> > >>> I think I need to include some extra things in my Make.defs
>> > > >> > >>> but I'm usually working at a higher layer, I'm a
>> > > >> > >>> medium-level linux person
>> > > >> and have next to zero experience developing c/c++ apps on
>> > > >> > linux, but I"ve written plenty of apps on Windows.
>> > > >> > >>>
>> > > >> > >>> Really appreciate any help or insight you can provide,
>> > > >> > >>> thanks!
>> > > >> > >>>
>> > > >> > >>> Matt
>> > > >> > >
>> > > >> >
>> > > >>
>> > > >>
>> > > >>
>> >
>
>

Reply via email to