forked from openwrt/openwrt
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Currently in OpenWrt, there are two libc++: libstdcpp and uClibc++. The former is huge and the latter supports only C++98 with some basic support for C++11. Those C++ versions seem to be specific to the compiler version libcxx supports C++11 and above while being much smaller than libstdcpp. On mt7621, these are the sizes of the ipks that I get: libstdcpp: 460786 libcxx: 182881 uClibc++:67720 libcxx is faster than uClibc++ and is under active development as part of the LLVM project while uClibc++ is effectively dead. This PR modifies uclibc++.mk to expose the make menuconfig option. Further cleanup is beyond the scope of this PR. What that means is, this is not used by default. A g++-libcxx wrapper based on the uClibc++ one was added. Works the same way. Compile tested with all packages that use uclibc++.mk in their Makefiles under mipsel_24kc. kismet fails compilation but that package needs to be cleaned up and updated. Runtime tested with gddrescue, gdisk, dcwapd, bonnie++, and aircrack-ng on a TP-Link Archer C7v2. Signed-off-by: Rosen Penev <[email protected]>
- Loading branch information
Showing
4 changed files
with
94 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
# | ||
# This is free software, licensed under the GNU General Public License v2. | ||
# See /LICENSE for more information. | ||
# | ||
|
||
include $(TOPDIR)/rules.mk | ||
|
||
PKG_NAME:=libcxx | ||
PKG_VERSION:=9.0.1 | ||
PKG_RELEASE:=1 | ||
|
||
PKG_SOURCE_PROTO:=git | ||
PKG_SOURCE_URL:=https://git.llvm.org/git/libcxx | ||
PKG_SOURCE_VERSION:=2076f539f410805ef88692b9c0ce0a0b882a7680 | ||
PKG_MIRROR_HASH:=6dff036660d478bfaa14e407fc5de26d22da1087118c897b1a3ad2e90cb7bf39 | ||
|
||
PKG_MAINTAINER:=Rosen Penev <[email protected]> | ||
PKG_LICENSE:=MIT | ||
PKG_LICENSE_FILES:=LICENSE.txt | ||
|
||
PKG_BUILD_PARALLEL:=1 | ||
CMAKE_BINARY_SUBDIR:=build | ||
|
||
include $(INCLUDE_DIR)/package.mk | ||
include $(INCLUDE_DIR)/cmake.mk | ||
|
||
define Package/libcxx | ||
SECTION:=libs | ||
CATEGORY:=Libraries | ||
TITLE:=LLVM libstdc++ | ||
URL:=https://libcxx.llvm.org/ | ||
DEPENDS:=+libatomic +libpthread | ||
endef | ||
|
||
define Package/libcxx/description | ||
LLVM C++ library targeting C++11 and above | ||
endef | ||
|
||
CMAKE_OPTIONS += \ | ||
-DLIBCXX_ENABLE_ASSERTIONS=OFF \ | ||
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \ | ||
-DLIBCXX_INCLUDE_BENCHMARKS=OFF \ | ||
-DLIBCXX_INCLUDE_DOCS=OFF \ | ||
-DLIBCXX_INCLUDE_TESTS=OFF \ | ||
-DLIBCXX_HAS_MUSL_LIBC=ON \ | ||
-DLIBCXX_STANDALONE_BUILD=ON | ||
|
||
TARGET_CXXFLAGS += -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS -Wno-attributes -flto | ||
TARGET_LDFLAGS += -Wl,--as-needed | ||
|
||
define Build/InstallDev | ||
$(call Build/InstallDev/cmake,$(1)) | ||
$(CP) files/g++-libcxx $(TOOLCHAIN_DIR)/bin/ | ||
$(SED) 's,CXX,$(TARGET_CXX),g' $(TOOLCHAIN_DIR)/bin/g++-libcxx | ||
endef | ||
|
||
define Package/libcxx/install | ||
$(INSTALL_DIR) $(1)/usr/lib | ||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libc++.so.* $(1)/usr/lib/ | ||
endef | ||
|
||
$(eval $(call BuildPackage,libcxx)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#!/bin/sh | ||
|
||
WRAPPER_INCLUDEDIR="-I$STAGING_DIR/usr/include/c++/v1" | ||
WRAPPER_LIBDIR="-L$STAGING_DIR/usr/lib" | ||
WRAPPER_LIBS="-lc -lgcc_s -lssp_nonshared" | ||
|
||
WRAPPER_OPTIONS="" | ||
WRAPPER_INCLIB="Y" | ||
for arg | ||
do | ||
case "$arg" in | ||
-c|-E|-S) WRAPPER_INCLIB="N" ;; | ||
-static) [ "$WRAPPER_LIBS" != "-lc -lgcc_s -lssp_nonshared -lgcc_eh" ] && WRAPPER_LIBS="-lc -lgcc_s -lssp_nonshared -lgcc_eh" ;; | ||
esac | ||
done | ||
[ "$WRAPPER_INCLIB" = "Y" ] && WRAPPER_OPTIONS="-nodefaultlibs $WRAPPER_LIBDIR -lc++ -lsupc++ $WRAPPER_LIBS" | ||
|
||
exec CXX -fno-builtin -nostdinc++ -DGCC_HASCLASSVISIBILITY "$WRAPPER_INCLUDEDIR" "$@" $WRAPPER_OPTIONS | ||
|