uclibc++: remove

No package here depends on it. Furthermore, uClibc++ is a fairly buggy
C++ library and seems to be relatively inactive upstream.

It also lacks proper support for modern C++11 features.

The main benefit of it is size: 66.6 KB	vs 287.3 KB on mips24kc. Static
linking and LTO can help bring the size down of packages that need it.

Added warning message to uclibc++.mk

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Rosen Penev 2021-02-26 20:17:46 -08:00 committed by Hauke Mehrtens
parent 09465d802b
commit 6b2ed6101e
9 changed files with 2 additions and 428 deletions

View File

@ -217,20 +217,6 @@ menu "Global build settings"
make the system libraries incompatible with most of the packages that are make the system libraries incompatible with most of the packages that are
not selected during the build process. not selected during the build process.
choice
prompt "Preferred standard C++ library"
default USE_LIBSTDCXX if USE_GLIBC
default USE_UCLIBCXX
help
Select the preferred standard C++ library for all packages that support this.
config USE_UCLIBCXX
bool "uClibc++"
config USE_LIBSTDCXX
bool "libstdc++"
endchoice
comment "Hardening build options" comment "Hardening build options"
config PKG_CHECK_FORMAT_SECURITY config PKG_CHECK_FORMAT_SECURITY

View File

@ -1,16 +1,2 @@
ifndef DUMP $(warn uclibc++.mk is deprecated. Please remove it and CXX_DEPENDS)
ifdef __package_mk CXX_DEPENDS = +libstdcpp
$(error uclibc++.mk must be included before package.mk)
endif
endif
PKG_PREPARED_DEPENDS += CONFIG_USE_UCLIBCXX
CXX_DEPENDS = +USE_UCLIBCXX:uclibcxx +USE_LIBSTDCXX:libstdcpp
ifneq ($(CONFIG_USE_UCLIBCXX),)
ifneq ($(CONFIG_CCACHE),)
TARGET_CXX_NOCACHE=g++-uc
else
TARGET_CXX=g++-uc
endif
endif

View File

@ -1,105 +0,0 @@
#
# Copyright (C) 2006-2012 OpenWrt.org
# Copyright (c) 2016 LEDE project
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=uclibc++
PKG_VERSION:=0.2.5
PKG_RELEASE:=3
PKG_SOURCE:=uClibc++-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://cxx.uclibc.org/src/
PKG_HASH:=596fb9ed7295564ce4c70ae6076a18f92e72f70310d70c98520bbca85c77895a
PKG_BUILD_DIR:=$(BUILD_DIR)/uClibc++-$(PKG_VERSION)
PKG_LICENSE:=LGPL-2.1-or-later
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0
include $(INCLUDE_DIR)/package.mk
define Package/uclibcxx
NAME:=uclibc++
SECTION:=libs
CATEGORY:=Libraries
TITLE:=C++ library for embedded systems
URL:=https://cxx.uclibc.org/
endef
UCLIBC_TARGET_ARCH:=$(shell echo $(ARCH) | sed -e s'/-.*//' \
-e 's/i.86/i386/' \
-e 's/sparc.*/sparc/' \
-e 's/m68k.*/m68k/' \
-e 's/ppc/powerpc/g' \
-e 's/v850.*/v850/g' \
-e 's/sh64/sh/' \
-e 's/sh[234].*/sh/' \
-e 's/mips.*/mips/' \
-e 's/mipsel.*/mips/' \
)
TARGET_CFLAGS += $(FPIC) -nostdinc++ -std=c++11
TARGET_LDFLAGS += -Wl,--gc-sections
ifneq ($(CONFIG_CCACHE),)
TARGET_CXX=$(TARGET_CXX_NOCACHE)
endif
ifeq ($(CONFIG_USE_MUSL),y)
SSP_LIB=-lssp_nonshared
endif
ifeq (${V}, s)
MAKE_VARS+= \
V=1
else ifeq (${V}, sc)
MAKE_VARS+= \
V=2
endif
MAKE_FLAGS:= \
$(TARGET_CONFIGURE_OPTS) \
CPU_CFLAGS="$(TARGET_CFLAGS)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
LDFLAGS="$(TARGET_LDFLAGS)" \
GEN_LIBS="-lc $(LIBGCC_S) $(SSP_LIB)" \
check_as_needed=
# check_as_needed overrides dependency on libgcc_s
define Build/Configure
if [ -f ./files/config.$(UCLIBC_TARGET_ARCH) ]; then \
cp ./files/config.$(UCLIBC_TARGET_ARCH) $(PKG_BUILD_DIR)/.config; \
else \
cp ./files/config.default $(PKG_BUILD_DIR)/.config; \
fi
endef
define Build/InstallDev
$(INSTALL_DIR) $(2)/bin $(1)/usr/include/uClibc++ $(1)/usr/lib
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/
$(CP) $(PKG_INSTALL_DIR)/include/* $(1)/usr/include/uClibc++/
$(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++*.{a,so}* $(1)/usr/lib/
$(SED) 's!\(^\|[[:space:]]\)-[IL]$(TOOLCHAIN_DIR)/[^[:space:]]*!!g' $(TOOLCHAIN_DIR)/bin/g++-uc
$(SED) 's|-I/include/|-I$$$${STAGING_DIR:-$(STAGING_DIR)}/usr/include/uClibc++/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
$(SED) 's|-L/lib/|-L$$$${STAGING_DIR:-$(STAGING_DIR)}/lib/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
# add another wrapper which links against both uClibc++ and libstdc++
$(INSTALL_BIN) $(TOOLCHAIN_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/g++-uc+std
$(SED) 's|^WRAPPER_INCLUDEDIR=.*||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
$(SED) 's|-luClibc++|-Wl,-Bdynamic,-luClibc++,-Bstatic,-lstdc++,-Bdynamic|g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
$(SED) 's|-nostdinc++||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
endef
define Package/uclibcxx/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++.so.* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++-*.so $(1)/usr/lib/
endef
$(eval $(call BuildPackage,uclibcxx))

View File

@ -1,58 +0,0 @@
#
# Automatically generated make config: don't edit
#
#
# Target Features and Options
#
UCLIBCXX_HAS_FLOATS=y
# UCLIBCXX_HAS_LONG_DOUBLE is not set
# UCLIBCXX_HAS_TLS is not set
UCLIBCXX_WARNINGS=""
BUILD_EXTRA_LIBRARIES=""
HAVE_DOT_CONFIG=y
#
# String and I/O Stream Support
#
UCLIBCXX_HAS_WCHAR=y
UCLIBCXX_IOSTREAM_BUFSIZE=32
UCLIBCXX_HAS_LFS=y
UCLIBCXX_SUPPORT_CDIR=y
UCLIBCXX_SUPPORT_CIN=y
UCLIBCXX_SUPPORT_COUT=y
UCLIBCXX_SUPPORT_CERR=y
UCLIBCXX_SUPPORT_CLOG=y
# UCLIBCXX_SUPPORT_WCIN is not set
# UCLIBCXX_SUPPORT_WCOUT is not set
# UCLIBCXX_SUPPORT_WCERR is not set
# UCLIBCXX_SUPPORT_WCLOG is not set
#
# STL and Code Expansion
#
UCLIBCXX_STL_BUFFER_SIZE=32
UCLIBCXX_CODE_EXPANSION=y
UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS=y
UCLIBCXX_EXPAND_STRING_CHAR=y
UCLIBCXX_EXPAND_VECTOR_BASIC=y
UCLIBCXX_EXPAND_IOS_CHAR=y
UCLIBCXX_EXPAND_STREAMBUF_CHAR=y
UCLIBCXX_EXPAND_ISTREAM_CHAR=y
UCLIBCXX_EXPAND_OSTREAM_CHAR=y
UCLIBCXX_EXPAND_FSTREAM_CHAR=y
UCLIBCXX_EXPAND_SSTREAM_CHAR=y
#
# Library Installation Options
#
UCLIBCXX_RUNTIME_PREFIX=""
UCLIBCXX_RUNTIME_INCLUDE_SUBDIR="/include"
UCLIBCXX_RUNTIME_LIB_SUBDIR="/lib"
UCLIBCXX_RUNTIME_BIN_SUBDIR="/bin"
UCLIBCXX_EXCEPTION_SUPPORT=y
IMPORT_LIBSUP=y
# IMPORT_LIBGCC_EH is not set
BUILD_STATIC_LIB=y
# BUILD_ONLY_STATIC_LIB is not set
# DODEBUG is not set

View File

@ -1,10 +0,0 @@
--- a/Rules.mak
+++ b/Rules.mak
@@ -232,7 +232,6 @@ endif
GEN_CXXFLAGS:=-nostdinc++
GEN_CXXFLAGS+=$(if $(CXXFLAG_-fvisibility-inlines-hidden),-DGCC_HASCLASSVISIBILITY)
CXXFLAGS:=$(CFLAGS)
-CFLAGS += -ansi
LIBGCC:=$(shell $(CC) -print-libgcc-file-name)
LIBGCC_DIR:=$(dir $(LIBGCC))

View File

@ -1,35 +0,0 @@
From 8245f62c1e7aba150f666b3c3a1dda646dee6d4b Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 27 Sep 2019 13:12:44 -0700
Subject: [PATCH] cstdio: Add undef for four functions
When compiling with uClibc-ng, these functions get defined as macros and
become unavailable for std.
Fixes programs that use the std versions of these functions.
This matches libstdcpp behavior.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
include/cstdio | 9 +++++++++
1 file changed, 9 insertions(+)
--- a/include/cstdio
+++ b/include/cstdio
@@ -21,6 +21,15 @@
#ifndef __HEADER_CSTDIO
#define __HEADER_CSTDIO 1
+#undef clearerr
+#undef feof
+#undef ferror
+#undef fgetc
+#undef fputc
+#undef getc
+#undef getchar
+#undef putc
+#undef putchar
namespace std{
using ::FILE;

View File

@ -1,10 +0,0 @@
--- a/Rules.mak
+++ b/Rules.mak
@@ -185,7 +185,6 @@ export UCLIBCXX_RUNTIME_PREFIX UCLIBCXX_
WRAPPER = $(top_builddir)bin/g++-uc
OPTIMIZATION:=
-PICFLAG:=-fPIC
# use '-Os' optimization if available, else use -O2, allow Config to override
$(eval $(call check-gcc-var,-Os))

View File

@ -1,143 +0,0 @@
From 8151579eb36d9366632242415ff3f5177fa5e1e2 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Thu, 3 Oct 2019 18:58:43 -0700
Subject: [PATCH] uClibc++: Make long long available to C++11
C++11 makes long long available. It is no longer a GNU extension.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
include/istream | 4 ++--
include/istream_helpers | 2 +-
include/ostream | 8 ++++----
include/ostream_helpers | 8 ++++----
tests/sstreamtest.cpp | 4 ++--
5 files changed, 13 insertions(+), 13 deletions(-)
--- a/include/istream
+++ b/include/istream
@@ -72,7 +72,7 @@ namespace std{
basic_istream<charT,traits>& operator>>(void*& p);
basic_istream<charT,traits>& operator>>(basic_streambuf<char_type,traits>* sb);
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
basic_istream<charT,traits>& operator>>(long long& n);
basic_istream<charT,traits>& operator>>(unsigned long long& n);
#endif
@@ -455,7 +455,7 @@ namespace std{
return *this;
}
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
template <class charT, class traits> _UCXXEXPORT basic_istream<charT,traits>&
basic_istream<charT,traits>::operator>>(long long& n)
{
--- a/include/istream_helpers
+++ b/include/istream_helpers
@@ -301,7 +301,7 @@ namespace std{
};
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
template <class traits> class _UCXXEXPORT __istream_readin<traits, char, long long>{
public:
inline static void readin(basic_istream<char, traits >& stream, long long & var)
--- a/include/ostream
+++ b/include/ostream
@@ -85,7 +85,7 @@ namespace std {
basic_ostream<charT,traits>& operator<<(long double f);
basic_ostream<charT,traits>& operator<<(void* p);
basic_ostream<charT,traits>& operator<<(basic_streambuf<char_type,traits>* sb);
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
basic_ostream<charT,traits>& operator<<(long long n);
basic_ostream<charT,traits>& operator<<(unsigned long long n);
#endif
@@ -221,7 +221,7 @@ namespace std {
return *this;
}
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
template <class charT, class traits> _UCXXEXPORT basic_ostream<charT,traits>& basic_ostream<charT, traits>::operator<<(long long n)
{
sentry s(*this);
@@ -487,7 +487,7 @@ namespace std {
#endif
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
//Support for output of long long data types
@@ -509,7 +509,7 @@ template<class Ch, class Tr> _UCXXEXPORT
}
-#endif //__STRICT_ANSI__
+#endif // !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
--- a/include/ostream_helpers
+++ b/include/ostream_helpers
@@ -142,7 +142,7 @@ namespace std{
}
};
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, signed long long int>{
public:
@@ -237,7 +237,7 @@ namespace std{
};
-#endif //__STRICT_ANSI__
+#endif // !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, double>{
public:
@@ -357,7 +357,7 @@ namespace std{
}
};
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, signed long long int>{
public:
@@ -428,7 +428,7 @@ namespace std{
};
-#endif //__STRICT_ANSI__
+#endif // !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, double>{
public:
--- a/tests/sstreamtest.cpp
+++ b/tests/sstreamtest.cpp
@@ -9,7 +9,7 @@ int main(){
int i;
std::string s;
char c;
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
long long ll;
unsigned long long ull;
#endif
@@ -32,7 +32,7 @@ int main(){
-#ifndef __STRICT_ANSI__
+#if !defined(__STRICT_ANSI__) || (__cplusplus >= 201103L)
a.str("678 76 54");
a >> ll >> ull >> s;
std::cout << "ll (should be 678): " << ll << std::endl;

View File

@ -1,37 +0,0 @@
From 7f6dd860818512c0eb313320308b22ba7e2c7205 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 4 Oct 2019 20:06:53 -0700
Subject: [PATCH] istream_helpers: Fix sscanf typo
This caused readin not to work properly with long long types.
Found accidentally through a glibc warning
(declared with warn_unused_result).
Tested with gptfdisk on OpenWrt.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
include/istream_helpers | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/include/istream_helpers
+++ b/include/istream_helpers
@@ -317,7 +317,7 @@ namespace std{
sscanf(temp.c_str(), "%llo", (unsigned long long *)&var );
}else if(stream.flags() & ios_base::hex){
if(stream.flags() & ios_base::uppercase){
- scanf(temp.c_str(), "%llX", (unsigned long long *)&var );
+ sscanf(temp.c_str(), "%llX", (unsigned long long *)&var );
}else{
sscanf(temp.c_str(), "%llx", (unsigned long long *)&var);
}
@@ -344,7 +344,7 @@ namespace std{
sscanf(temp.c_str(), "%llo", &var );
}else if(stream.flags() & ios_base::hex){
if(stream.flags() & ios_base::uppercase){
- scanf(temp.c_str(), "%llX", &var );
+ sscanf(temp.c_str(), "%llX", &var );
}else{
sscanf(temp.c_str(), "%llx", &var);
}