nuttx/libs/libxx
chao an 6ee9ec7656 build: add initial cmake build system
1. Update all CMakeLists.txt to adapt to new layout
2. Fix cmake build break
3. Update all new file license
4. Fully compatible with current compilation environment(use configure.sh or cmake as you choose)

------------------

How to test

From within nuttx/. Configure:

cmake -B build -DBOARD_CONFIG=sim/nsh -GNinja
cmake -B build -DBOARD_CONFIG=sim:nsh -GNinja
cmake -B build -DBOARD_CONFIG=sabre-6quad/smp -GNinja
cmake -B build -DBOARD_CONFIG=lm3s6965-ek/qemu-flat -GNinja

(or full path in custom board) :
cmake -B build -DBOARD_CONFIG=$PWD/boards/sim/sim/sim/configs/nsh -GNinja

This uses ninja generator (install with sudo apt install ninja-build). To build:

$ cmake --build build

menuconfig:

$ cmake --build build -t menuconfig

--------------------------

2. cmake/build: reformat the cmake style by cmake-format

https://github.com/cheshirekow/cmake_format

$ pip install cmakelang

$ for i in `find -name CMakeLists.txt`;do cmake-format $i -o $i;done
$ for i in `find -name *\.cmake`;do cmake-format $i -o $i;done

Co-authored-by: Matias N <matias@protobits.dev>
Signed-off-by: chao an <anchao@xiaomi.com>
2023-07-08 13:50:48 +08:00
..
libcxxmini libs/libxx: remove redundant code 2023-05-03 19:54:19 +08:00
.gitignore build: add initial cmake build system 2023-07-08 13:50:48 +08:00
0001-libc-abi-avoid-the-waring-__EXCEPTIONS-is-not-define.patch
0001-libc-avoid-the-waring-__EXCEPTIONS-is-not-defined-ev.patch
0001-libcxx-Rename-PS-macro-to-avoid-clashing-with-Xtensa.patch
0001-Remove-the-locale-fallback-for-NuttX.patch
0001-uClibcxx-basic_definitions-fix-GCC-specific-definiti.patch
0001-uclibxx-use-overload-constructor-of-filebuf-ostream.patch
0002-Omit-atomic_-un-signed_lock_free-if-unsupported.patch libcxx: Fix libc++ for archs without conditional load/store support 2022-03-30 11:19:29 +08:00
CMakeLists.txt build: add initial cmake build system 2023-07-08 13:50:48 +08:00
etl.defs treewide: add DOWNLOAD variable as unification of curl call 2023-03-08 17:05:05 +08:00
Kconfig c++: Change the default value of CXX_STANDARD from c++17 to gnu++17 2023-01-19 08:21:48 +01:00
libcxx.cmake build: add initial cmake build system 2023-07-08 13:50:48 +08:00
libcxx.defs arch/arm: relax compiler check for workaround with "GCC 12.2" 2023-04-24 19:00:52 +03:00
libcxxabi.cmake build: add initial cmake build system 2023-07-08 13:50:48 +08:00
libcxxabi.defs treewide: add DOWNLOAD variable as unification of curl call 2023-03-08 17:05:05 +08:00
libcxxmini.cmake build: add initial cmake build system 2023-07-08 13:50:48 +08:00
libcxxmini.defs
Makefile Minor style clean up 2023-01-28 19:53:20 +02:00
README.txt
system_configuration.h libc/wchar: remove unnecessary config 2022-07-27 00:36:49 +08:00
uClibc++.defs Don't download tarballs if a local git repo found 2022-12-05 10:47:36 +01:00

libs/libxx/README.txt
^^^^^^^^^^^^^^^^^^^^^

This directory contains three C++ library:

 - A fragmentary C++ library that will allow to build only the simplest of
   C++ applications. In the deeply embedded world, that is probably all
   that is necessary.

   At present, only the following are supported here:

     - void *operator new(std::size_t nbytes);
     - void operator delete(void* ptr);
     - void operator delete[](void *ptr);
     - void __cxa_pure_virtual(void);
     - int __aeabi_atexit(void* object, void (*destroyer)(void*),
                          void *dso_handle);
     - int __cxa_atexit(__cxa_exitfunc_t func, FAR void *arg,
                        FAR void *dso_handle);

   This implementation is selected when neither of the following
   two options are enabled.

 - LLVM "libc++" C++ library (http://libcxx.llvm.org/)
   This implementation is selected with CONFIG_LIBCXX=y.

 - uClibc++ C++ library (http://cxx.uclibc.org/)
   This implementation is selected with CONFIG_UCLIBCXX=y.

operator new
------------

  This operator should take a type of size_t.  But size_t has an unknown underlying
  type.  In the nuttx sys/types.h header file, size_t is typed as uint32_t
  (which is determined by architecture-specific logic).  But the C++
  compiler may believe that size_t is of a different type resulting in
  compilation errors in the operator.  Using the underlying integer type
  instead of size_t seems to resolve the compilation issues. Need to
  REVISIT this.

  Once some C++ compilers, this will cause an error:

    Problem:     "'operator new' takes size_t ('...') as first parameter"
    Workaround:  Add -fpermissive to the compilation flags