[uClibc]stlport

Erik Andersen andersen at codepoet.org
Fri Apr 19 09:31:34 UTC 2002


On Wed Apr 17, 2002 at 11:31:35AM -0500, Chris H. wrote:
> I'm trying to build a project that makes heavy use of c++ and stlport. 
> I'm slowly making my way through the process of setting up the 
> toolchain and stl/stlport to build this project, but I keep running into 
> errors.
> My question is, has anyone done this successfully? (gotten stlport to 

I have now and it works just fine...  :-)

Earlier today Greg Nutt (spudmonkey at racsa.co.cr) started things
off and got a fair way along.   I then took his work and finished
it.  Attached you can find a patch to compile and install STLport
with uClibc and a simple test app that is setup to compile and 
run vs both gcc and uClibc...  libstdc++ weighs in at 400k, which
is a bit heavy for my tastes, but it seems to work just great...

$ ldd ./test
        libstdc++.so.0 => /usr/i386-linux-uclibc/lib/libstdc++.so.0 (0x0x40006000)
        libc.so.0 => /usr/i386-linux-uclibc/lib/libc.so.0 (0x0x4006c000)
        libpthread.so.0 => /usr/i386-linux-uclibc/lib/libpthread.so.0 (0x0x4009e000)
        libm.so.0 => /usr/i386-linux-uclibc/lib/libm.so.0 (0x0x400af000)
        ld-uClibc.so.0 => /usr/i386-linux-uclibc/lib/ld-uClibc.so.0 (0x0x40000000)
$ ./test
hello from a global constructor
hello from a normal constructor
hello from test 1
hello from test 2
hello from test 3
Cool, things seem to be working!
goodbye from a normal destructor
goodbye from a global destructor

$ cd /usr/i386-linux-uclibc/lib 
$ ls -lh libstd*
lrwxrwxrwx    1 andersen andersen       16 Apr 19 03:08 libstdc++.so -> libstdc++.so.4.5*
lrwxrwxrwx    1 andersen andersen       16 Apr 19 03:08 libstdc++.so.0 -> libstdc++.so.4.5*
-rwxr-xr-x    1 andersen andersen     403k Apr 19 03:07 libstdc++.so.4.5*

 -Erik

--
Erik B. Andersen             http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--
-------------- next part --------------
diff -urN STLport-4.5.3.orig/Makefile STLport-4.5.3/Makefile
--- STLport-4.5.3.orig/Makefile	Wed Dec 31 17:00:00 1969
+++ STLport-4.5.3/Makefile	Fri Apr 19 03:20:39 2002
@@ -0,0 +1,43 @@
+# Makefile to compile stlport with uClibc
+#
+# Copyright (C) 2002 Erik Andersen <andersee at debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+PREFIX:=/usr/i386-linux-uclibc
+CROSS:= $(PREFIX)/usr/bin/i386-uclibc-
+CC=$(CROSS)gcc
+CXX=$(CROSS)g++
+AR = $(CROSS)ar
+STRIP = $(CROSS)strip --remove-section=.comment --remove-section=.note --strip-unneeded
+.EXPORT_ALL_VARIABLES:
+
+all:
+	rm -f lib/lib*
+	make -C src -f gcc-uClibc.mak all
+	(cd lib; rm -f libstdc++_debug.so; \
+	ln -fs libstdc++.so.4.5 libstdc++.so; \
+	ln -fs libstdc++.so.4.5 libstdc++.so.0;)
+	$(STRIP) lib/libstdc++.so.4.5; 
+
+clean:
+	make -C src -f gcc-uClibc.mak clean
+	rm -rf lib/*
+
+install:
+	(cd lib; \
+	cp -a libstdc++.a $(PREFIX)/lib; \
+	cp -a libstdc++.so libstdc++.so.0 libstdc++.so.4.5 $(PREFIX)/lib;)
+	cp -a stlport $(PREFIX)/include/g++-3
diff -urN STLport-4.5.3.orig/src/gcc-uClibc.mak STLport-4.5.3/src/gcc-uClibc.mak
--- STLport-4.5.3.orig/src/gcc-uClibc.mak	Wed Dec 31 17:00:00 1969
+++ STLport-4.5.3/src/gcc-uClibc.mak	Fri Apr 19 03:22:49 2002
@@ -0,0 +1,58 @@
+#
+# Basename for libraries
+#
+LIB_BASENAME:=libstdc++
+LIB_SHAREDNAME:=$(LIB_BASENAME).so
+LIB_SHAREDNAME_FULL:=$(LIB_SHAREDNAME).0
+
+#
+# guts for common stuff
+#
+#
+LINK:=$(AR) crv
+DYN_LINK:=$(CC) -fno-exceptions -lpthread -lm -shared -Wl,-soname=$(LIB_SHAREDNAME_FULL) -o
+
+OBJEXT=o
+DYNEXT=so
+STEXT=a
+RM=rm -rf
+PATH_SEP=/
+MKDIR=mkdir -p
+COMP=GCC$(ARCH)
+INSTALL_STEP = install_unix 
+
+all: release_dynamic release_static
+#all: all_dynamic all_static symbolic_links 
+
+include common_macros.mak
+STLDEBUG_NAME:=$(LIB_BASENAME).debug
+
+# Lets disable exception support, since this saves over 200k...
+DEFINE_FLAGS:= -D_STLP_NO_EXCEPTIONS -fno-exceptions
+
+DEFINE_FLAGS+= -D_STLP_USE_UCLIBC -D_STLP_NO_WCHAR_T \
+	-DUSE_SPRINTF_INSTEAD -D_ISOC99_SOURCE
+WARNING_FLAGS:= -W -Wno-sign-compare -Wno-unused -Wno-uninitialized
+INCLUDE_FLAGS = -I${STLPORT_DIR}
+CXXFLAGS_COMMON = $(WARNING_FLAGS)  $(DEFINE_FLAGS) $(INCLUDE_FLAGS)
+
+CXXFLAGS_RELEASE_static = $(CXXFLAGS_COMMON) -Os
+CXXFLAGS_RELEASE_dynamic = $(CXXFLAGS_COMMON) -Os -fPIC
+
+CXXFLAGS_DEBUG_static = $(CXXFLAGS_COMMON) -O -g
+CXXFLAGS_DEBUG_dynamic = $(CXXFLAGS_COMMON) -O -g -fPIC
+
+CXXFLAGS_STLDEBUG_static = $(CXXFLAGS_DEBUG_static) -D_STLP_DEBUG
+CXXFLAGS_STLDEBUG_dynamic = $(CXXFLAGS_DEBUG_dynamic) -D_STLP_DEBUG -fPIC
+
+include common_percent_rules.mak
+include common_rules.mak
+
+
+#install: all
+#	cp -p $(LIB_TARGET) ${D_LIB_TARGET} ../lib
+
+#%.s: %.cpp
+#	$(CXX) $(CXXFLAGS) -O4 -S -pto $<  -o $@
+
+
diff -urN STLport-4.5.3.orig/src/num_put_float.cpp STLport-4.5.3/src/num_put_float.cpp
--- STLport-4.5.3.orig/src/num_put_float.cpp	Fri Jan 18 15:06:52 2002
+++ STLport-4.5.3/src/num_put_float.cpp	Fri Apr 19 00:04:38 2002
@@ -67,7 +67,7 @@
 
 # include <cstdlib>
 
-#if defined (_MSC_VER) || defined (__MINGW32__) || defined (__BORLANDC__) || defined (__DJGPP)  || defined (_STLP_SCO_OPENSERVER) || defined (__NCR_SVR)
+#if defined (_MSC_VER) || defined (__MINGW32__) || defined (__BORLANDC__) || defined (__DJGPP)  || defined (_STLP_SCO_OPENSERVER) || defined (__NCR_SVR) || defined(_STLP_USE_UCLIBC)
 # include <float.h>
 #endif
 
@@ -209,7 +209,7 @@
 
 #ifdef USE_SPRINTF_INSTEAD
 
-#elif defined (__hpux) || defined (__DJGPP) || ( defined(_STLP_USE_GLIBC) && ! defined (__MSL__) )
+#elif defined (__hpux) || defined (__DJGPP) || ( defined(_STLP_USE_GLIBC) && ! defined (__MSL__) ) || defined (_STLP_USE_UCLIBC)
 #  if defined (isfinite) 
 inline bool _Stl_is_nan_or_inf(double x) { return !isfinite(x); }
 #  else
@@ -238,7 +238,7 @@
 }
 inline bool _Stl_is_neg_inf(double x)    { return _fpclass(x) == _FPCLASS_NINF; }
 inline bool _Stl_is_neg_nan(double x)    { return _isnan(x) && _copysign(1., x) < 0 ; } 
-#elif defined(__MRC__) || defined(__SC__)		//*TY 02/24/2000 - added support for MPW
+#elif defined(__MRC__) || defined(__SC__)
 bool _Stl_is_nan_or_inf(double x) { return isnan(x) || !isfinite(x); }
 bool _Stl_is_inf(double x)        { return !isfinite(x); }
 bool _Stl_is_neg_inf(double x)    { return !isfinite(x) && signbit(x); }
diff -urN STLport-4.5.3.orig/src/stdio_streambuf.cpp STLport-4.5.3/src/stdio_streambuf.cpp
--- STLport-4.5.3.orig/src/stdio_streambuf.cpp	Thu Jan 10 11:41:52 2002
+++ STLport-4.5.3/src/stdio_streambuf.cpp	Thu Apr 18 23:11:00 2002
@@ -82,7 +82,7 @@
     _STLP_VENDOR_CSTD::fgetpos(_M_file, &pos);
     // added 21 june 00 mdb,rjf,wjs: glibc 2.2 changed fpos_t to be a struct instead
     // of a primitive type
-#if (defined(__GLIBC__) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) )
+#if defined(_STLP_USE_UCLIBC) || (defined(__GLIBC__) && defined(_STLP_USE_GLIBC) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) )
     return pos_type((streamoff)pos.__pos);
 #elif defined(__ISCPP__) || defined(__MVS__) || (__OS400__)
      return pos_type(pos.__fpos_elem[ 0 ]);
@@ -101,13 +101,16 @@
 
   // added 21 june 00 mdb,rjf,wjs: glibc 2.2 changed fpos_t to be a struct instead
   // of a primitive type
-#if (defined(__GLIBC__) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) )
+#if (defined(__GLIBC__) && defined(_STLP_USE_GLIBC) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) )
   fpos_t p;
   p.__pos = pos;
   memset( &(p.__state), 0, sizeof(p.__state) );
 #elif defined(__MVS__) || (__OS400__)
   fpos_t p;
   p.__fpos_elem[0] = pos;
+#elif defined(_STLP_USE_UCLIBC)
+  fpos_t p;
+  p.__pos = pos;
 #else
   fpos_t p(pos);
 #endif
diff -urN STLport-4.5.3.orig/stlport/config/_prolog.h STLport-4.5.3/stlport/config/_prolog.h
--- STLport-4.5.3.orig/stlport/config/_prolog.h	Sun Oct 28 13:26:44 2001
+++ STLport-4.5.3/stlport/config/_prolog.h	Fri Apr 19 02:43:17 2002
@@ -1,3 +1,8 @@
+/* Evil hack to make sure everything behaves itself */
+#define _STLP_USE_UCLIBC
+#define _STLP_NO_WCHAR_T
+#define _ISOC99_SOURCE
+#define USE_SPRINTF_INSTEAD
 
 #if defined (_STLP_MSVC) || defined (__ICL) || defined (__BORLANDC__)
 
diff -urN STLport-4.5.3.orig/stlport/config/stl_gcc.h STLport-4.5.3/stlport/config/stl_gcc.h
--- STLport-4.5.3.orig/stlport/config/stl_gcc.h	Thu Jan 10 11:41:58 2002
+++ STLport-4.5.3/stlport/config/stl_gcc.h	Fri Apr 19 02:40:17 2002
@@ -3,7 +3,7 @@
  */
 
 /* Systems having GLIBC installed have different traits */
-#if ! defined (_STLP_USE_GLIBC) && ( defined (__linux__) || defined (__CYGWIN__) )
+#if ! defined (_STLP_USE_GLIBC)  && ! defined (_STLP_USE_UCLIBC) && ( defined (__linux__) || defined (__CYGWIN__) )
 # define _STLP_USE_GLIBC
 #endif
 
diff -urN STLport-4.5.3.orig/stlport/cstdlib STLport-4.5.3/stlport/cstdlib
--- STLport-4.5.3.orig/stlport/cstdlib	Thu Aug 23 15:51:54 2001
+++ STLport-4.5.3/stlport/cstdlib	Thu Apr 18 16:23:25 2002
@@ -55,9 +55,11 @@
 using _STLP_VENDOR_CSTD::atof;
 using _STLP_VENDOR_CSTD::atoi;
 using _STLP_VENDOR_CSTD::atol;
+# ifndef _STLP_USE_UCLIBC
 using _STLP_VENDOR_CSTD::mblen;
 using _STLP_VENDOR_CSTD::mbstowcs;
 using _STLP_VENDOR_CSTD::mbtowc;
+# endif
 using _STLP_VENDOR_CSTD::strtod;
 using _STLP_VENDOR_CSTD::strtol;
 using _STLP_VENDOR_CSTD::strtoul;
diff -urN STLport-4.5.3.orig/stlport/stl/_config.h STLport-4.5.3/stlport/stl/_config.h
--- STLport-4.5.3.orig/stlport/stl/_config.h	Fri Jan 18 15:08:36 2002
+++ STLport-4.5.3/stlport/stl/_config.h	Thu Apr 18 16:23:25 2002
@@ -164,7 +164,7 @@
 /* Operating system recognition (basic) */
 # if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX)  || defined (__NetBSD__) || defined (__Lynx__)
 #  define _STLP_UNIX 1
-#  if defined (__linux__) && ! defined (_STLP_USE_GLIBC)
+#  if defined (__linux__) && ! defined (_STLP_USE_GLIBC) && ! defined (_STLP_USE_UCLIBC)
 #   define _STLP_USE_GLIBC 1
 #  endif
 # elif defined(macintosh) || defined (_MAC)
diff -urN STLport-4.5.3.orig/stlport/stl/_stdio_file.h STLport-4.5.3/stlport/stl/_stdio_file.h
--- STLport-4.5.3.orig/stlport/stl/_stdio_file.h	Fri Jan 18 15:07:00 2002
+++ STLport-4.5.3/stlport/stl/_stdio_file.h	Thu Apr 18 22:34:16 2002
@@ -634,6 +634,59 @@
 }
 # define _STLP_FILE_I_O_IDENTICAL
 
+#elif defined(_STLP_USE_UCLIBC)
+
+inline int   _FILE_fd(const FILE *__f) { return __f->filedes; }
+
+//       Returns a pointer to the beginning of the buffer.
+inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->bufstart; }
+
+//       Returns the current read/write position within the buffer.
+//       FIXME:  uClibc has separate values for read and write position...
+inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->bufrpos; }
+
+//       Returns a pointer immediately past the end of the buffer.
+inline char* _FILE_I_end(const FILE *__f) { return (char*)__f->bufend; }
+
+//       Returns the number of characters remaining in the buffer, i.e.
+//       _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f).
+inline ptrdiff_t _FILE_I_avail(const FILE *__f) 
+  { return __f->bufgetc - __f->bufrpos; }
+
+//       Increments the current read/write position by 1, returning the 
+//       character at the old position.
+inline char& _FILE_I_preincr(FILE *__f)  { return *(char*)(++__f->bufrpos); }
+
+//       Increments the current read/write position by 1, returning the 
+//       character at the old position.
+inline char& _FILE_I_postincr(FILE *__f)  { return *(char*)(__f->bufrpos++); }
+
+//       Decrements the current read/write position by 1, returning the 
+//       character at the old position.
+inline char& _FILE_I_predecr(FILE *__f)  { return *(char*)(--__f->bufrpos); }
+
+//       Decrements the current read/write position by 1, returning the 
+//       character at the old position.
+inline char& _FILE_I_postdecr(FILE *__f)  { return *(char*)(__f->bufrpos--); }
+
+//       Increments the current read/write position by __n.
+inline void  _FILE_I_bump(FILE *__f, int __n) { __f->bufrpos += __n; }
+
+//       Sets the beginning of the bufer to __begin, the current read/write
+//       position to __next, and the buffer's past-the-end pointer to __end.
+//       If any of those pointers is null, then all of them must be null.
+inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end)
+{
+	__f->bufstart = (unsigned char*)__begin;
+	__f->bufrpos  =  (unsigned char*)__next;
+	__f->bufwpos  =  (unsigned char*)__next;
+	__f->bufend  =  (unsigned char*)__end;
+	__f->bufgetc  = (unsigned char*)__begin;
+	__f->bufputc = (unsigned char*)__end;
+}
+
+# define _STLP_FILE_I_O_IDENTICAL
+
 #else  /* A C library that we don't have an implementation for. */
 
 # error The C++ I/O library is not configured for this compiler
diff -urN STLport-4.5.3.orig/stlport/stl/c_locale.h STLport-4.5.3/stlport/stl/c_locale.h
--- STLport-4.5.3.orig/stlport/stl/c_locale.h	Fri Jan 18 15:07:00 2002
+++ STLport-4.5.3/stlport/stl/c_locale.h	Thu Apr 18 16:23:25 2002
@@ -326,6 +326,19 @@
 # define _Locale_PRINT _R
 # define _Locale_ALPHA _A
 
+# elif defined (_STLP_USE_UCLIBC)
+ 
+# include <linux/ctype.h>
+# define _Locale_CNTRL _C
+# define _Locale_UPPER _U
+# define _Locale_LOWER _L
+# define _Locale_DIGIT _D
+# define _Locale_XDIGIT _X
+# define _Locale_PUNCT _P
+# define _Locale_SPACE _S
+# define _Locale_PRINT (_P|_U|_L|_D|_SP)
+# define _Locale_ALPHA (_U|_L)
+
 # elif defined (__hpux) || defined (__osf__)
  
 #   if defined(__HP_aCC) && !defined(_INCLUDE_HPUX_SOURCE)
@@ -401,6 +414,8 @@
 #  define _Locale_SPACE _S
 #  define _Locale_PRINT (_P | _U | _L | _N | _B)
 #  define _Locale_ALPHA (_U | _L)
+#else
+#  error Unknown Locale
 #endif
 
 # endif /* _STLP_C_LOCALE_H */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.tar
Type: application/x-tar
Size: 10240 bytes
Desc: not available
Url : http://lists.busybox.net/pipermail/uclibc/attachments/20020419/ca969edc/attachment.tar 


More information about the uClibc mailing list