Fix uClibc++ wstrlen bug

git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5289 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo
2012-11-01 13:45:30 +00:00
parent 76e6bb67a1
commit 3ceeb8f9f0
4 changed files with 128 additions and 112 deletions
+124 -100
View File
@@ -1,100 +1,124 @@
misc/uClib++ README misc/uClib++ README
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
This directory contains a version of the uClibc++ C++ library. This code This directory contains a version of the uClibc++ C++ library. This code
originates from http://cxx.uclibc.org/ and has been adapted for NuttX by the originates from http://cxx.uclibc.org/ and has been adapted for NuttX by the
RGMP team (http://rgmp.sourceforge.net/wiki/index.php/Main_Page). RGMP team (http://rgmp.sourceforge.net/wiki/index.php/Main_Page).
uClibc++ resides in the misc/ directory rather than in the main NuttX source uClibc++ resides in the misc/ directory rather than in the main NuttX source
tree due to licensing issues: NuttX is licensed under the permissiv tree due to licensing issues: NuttX is licensed under the permissiv
modified BSD License; uClibc, on the other hand, islicensed under the modified BSD License; uClibc, on the other hand, islicensed under the
stricter GNU LGPL Version 3 license. stricter GNU LGPL Version 3 license.
Installation of uClibc++ Installation of uClibc++
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
If you wish to use uClibc++ with NuttX, you will be required to comply with If you wish to use uClibc++ with NuttX, you will be required to comply with
the licensing requires of the GNU LGPL Version 3 license. A simple the licensing requires of the GNU LGPL Version 3 license. A simple
installation script is provided at misc/uClibc++/install.sh that can be used installation script is provided at misc/uClibc++/install.sh that can be used
to install the uClibc++ components into the NuttX source tree. to install the uClibc++ components into the NuttX source tree.
The install script takes only a single arguement: The path to the nuttx The install script takes only a single arguement: The path to the nuttx
directory. If your directory structure is the same as the SVN structure directory. If your directory structure is the same as the SVN structure
(with misc/ and nuttx/ at the same level), then uClibc++ can be installed (with misc/ and nuttx/ at the same level), then uClibc++ can be installed
using this command executed from the misc/uClibc++ directory: using this command executed from the misc/uClibc++ directory:
./install.sh ../../nuttx ./install.sh ../../nuttx
If you run the install.sh like this, then it will (1) make sure you If you run the install.sh like this, then it will (1) make sure you
understand that you have tainted the NuttX BSD license with LGPLv3, and (2) understand that you have tainted the NuttX BSD license with LGPLv3, and (2)
copy the uClibc++ sources files into nuttx/libxx/uClibc++, include/, and copy the uClibc++ sources files into nuttx/libxx/uClibc++, include/, and
include/uClibc++. include/uClibc++.
Make.defs File Changes Dependencies
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
The new files that appear in nuttx/include/uClibc++ must be include-able 1. The C++ runtime support is provided by GCC libgcc_eh.a and libsupc++.a
as system header files. So you will need to add 'isystem $(TOPDIR)/include/uClibc++' libraries.
to the ARCHINCLUDESXX definition in the NuttX Make.defs file, perhap like: 2. NuttX C++ support
3. Math library
-ARCHINCLUDESXX = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx 4. TLS support is currenly provided only under RGMP
+ARCHINCLUDESXX = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx -isystem $(TOPDIR)/include/uClibc++
NuttX Configuration File Changes
And, of course, you no long need to suppress exceptions or run-time typing: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-ARCHCPUFLAGSXX = -fno-builtin -fno-exceptions -fno-rtti In order to build libxx (and hence libxx/uClibc++), C++ support must be
+ARCHCPUFLAGSXX = -fno-builtin enabled. The following must be defined in your NuttX configuration file.
Building NuttX with uClibc++ CONFIG_HAVE_CXX=y
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
There are many ways to provide math library support (see nuttx/README.txt).
After installing uClibc++ in this way, no additional steps should be If you choose to use the NuttX math library, that is enabled as follows:
required to build NuttX with the uClibc++ library incorporated:
$ cd ../../nuttx CONFIG_LIBM=y
$ . ./setenv.sh
$ make The math libraries depend on the float.h header file that is normally
provided by your tooltchain. A dummy (and probably wrong) fload.h file
Here is how it works: can be installed by setting:
There is a new file called Make.defs in misc/uClibc/libxx/uClibc++. After CONFIG_ARCH_FLOAT_H=y
installation, it will reside at nuttx/libxx/uClibc++. The
nuttx/libxx/Makefile will (conditionally) include this Make.defs file: Make.defs File Changes
^^^^^^^^^^^^^^^^^^^^^^
-include uClibc++/Make.defs
The new files that appear in nuttx/include/uClibc++ must be include-able
This Make.defs file, if present, will add the uClibc++ source files to the as system header files. So you will need to add 'isystem $(TOPDIR)/include/uClibc++'
build, add the uClibc++ subdirectory to the dependency list, and add the to the ARCHINCLUDESXX definition in the NuttX Make.defs file, perhap like:
uClibc++ subdirectory to the VPATH. That should, in principle, be all it
takes. -ARCHINCLUDESXX = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
+ARCHINCLUDESXX = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx -isystem $(TOPDIR)/include/uClibc++
Dependencies
^^^^^^^^^^^^ And, of course, you no long need to suppress exceptions or run-time typing:
In order to build libxx (and hence libxx/uClibc++), CONFIG_HAVE_CXX must be -ARCHCPUFLAGSXX = -fno-builtin -fno-exceptions -fno-rtti
defined in your NuttX configuration file. +ARCHCPUFLAGSXX = -fno-builtin
The C++ runtime support is provided by GCC libgcc_eh.a and libsupc++.a
libraries. I create the nuttx/configs/rgmp/x86/cxxtest/Make.def, add the two libs to EXTRA_LIBS to be linked
to NUTTX. The code.
RGMP
^^^^ Building NuttX with uClibc++
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The target platform is RGMP X86, it is also updated for TLS support which is
needed by these two libraries. So application can also use TLS on RGMP NuttX After installing uClibc++ in this way, no additional steps should be
port. required to build NuttX with the uClibc++ library incorporated:
Command to compile and install RGMP: $ cd ../../nuttx
$ . ./setenv.sh
$ make $ make
$ make install
$ /usr/rgmp/setup Here is how it works:
$ exit
There is a new file called Make.defs in misc/uClibc/libxx/uClibc++. After
Command to compile and run NUTTX: installation, it will reside at nuttx/libxx/uClibc++. The
nuttx/libxx/Makefile will (conditionally) include this Make.defs file:
$ cd nuttx/tools
$ ./configure rgmp/x86/cxxtest -include uClibc++/Make.defs
$ cd ..
$ make This Make.defs file, if present, will add the uClibc++ source files to the
$ rgmp_run build, add the uClibc++ subdirectory to the dependency list, and add the
uClibc++ subdirectory to the VPATH. That should, in principle, be all it
takes.
RGMP
^^^^
The target platform is RGMP X86, it is also updated for TLS support which is
needed by these two libraries. So application can also use TLS on RGMP NuttX
port.
Command to compile and install RGMP:
$ make
$ make install
$ /usr/rgmp/setup
$ exit
Command to compile and run NUTTX:
$ cd nuttx/tools
$ ./configure rgmp/x86/cxxtest
$ cd ..
$ make
$ rgmp_run
+1 -1
View File
@@ -108,7 +108,7 @@ namespace std{
} }
inline static size_t length(const char_type* s){ inline static size_t length(const char_type* s){
return wstrlen(s); return strlen(s);
} }
static const char_type* find(const char_type* s, int n, const char_type& a); static const char_type* find(const char_type* s, int n, const char_type& a);
+2 -2
View File
@@ -38,7 +38,7 @@
CXXSRCS += algorithm.cxx associative_base.cxx bitset.cxx char_traits.cxx CXXSRCS += algorithm.cxx associative_base.cxx bitset.cxx char_traits.cxx
CXXSRCS += complex.cxx del_op.cxx del_opnt.cxx del_opv.cxx del_opvnt.cxx CXXSRCS += complex.cxx del_op.cxx del_opnt.cxx del_opv.cxx del_opvnt.cxx
CXXSRCS += deque.cxx eh_alloc.cxx eh_globals.cxx exception.cxx CXXSRCS += deque.cxx eh_alloc.cxx eh_globals.cxx exception.cxx
CXXSRCS += stream.cxx func_exception.cxx iomanip.cxx ios.cxx CXXSRCS += fstream.cxx func_exception.cxx iomanip.cxx ios.cxx
CXXSRCS += iostream.cxx istream.cxx iterator.cxx limits.cxx list.cxx CXXSRCS += iostream.cxx istream.cxx iterator.cxx limits.cxx list.cxx
CXXSRCS += locale.cxx map.cxx new_handler.cxx new_op.cxx new_opnt.cxx CXXSRCS += locale.cxx map.cxx new_handler.cxx new_op.cxx new_opnt.cxx
CXXSRCS += new_opv.cxx new_opvnt.cxx numeric.cxx ostream.cxx queue.cxx CXXSRCS += new_opv.cxx new_opvnt.cxx numeric.cxx ostream.cxx queue.cxx
@@ -48,5 +48,5 @@ CXXSRCS += vector.cxx
# Add the path to the uClibc++ subdirectory # Add the path to the uClibc++ subdirectory
DEPPATH += --dep-path . DEPPATH += --dep-path uClibc++
VPATH += uClibc++ VPATH += uClibc++
+1 -9
View File
@@ -32,7 +32,7 @@ nuttx/
(0) ARM/LPC43x (arch/arm/src/lpc43xx/) (0) ARM/LPC43x (arch/arm/src/lpc43xx/)
(3) ARM/STR71x (arch/arm/src/str71x/) (3) ARM/STR71x (arch/arm/src/str71x/)
(3) ARM/LM3S6918 (arch/arm/src/lm3s/) (3) ARM/LM3S6918 (arch/arm/src/lm3s/)
(7) ARM/STM32 (arch/arm/src/stm32/) (6) ARM/STM32 (arch/arm/src/stm32/)
(3) AVR (arch/avr) (3) AVR (arch/avr)
(0) Intel x86 (arch/x86) (0) Intel x86 (arch/x86)
(4) 8051 / MCS51 (arch/8051/) (4) 8051 / MCS51 (arch/8051/)
@@ -1417,14 +1417,6 @@ o ARM/STM32 (arch/arm/src/stm32/)
Status: Open Status: Open
Priority: Low (I am not even sure if this is a problem yet). Priority: Low (I am not even sure if this is a problem yet).
Status: UNFINISHED STM32 F4 OTG FS HOST DRIVER
Description: A quick-n-dirty leverage of the the LPC17xx host driver was put into
the STM32 source to support development of the STM32 F4 OTG FS host
driver. It is non-functional and still waiting for STM32 F4 logic
to be added. Don't use it!
Status: Open
Priority: Low (unless you need a host driver).
o AVR (arch/avr) o AVR (arch/avr)
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^