summaryrefslogtreecommitdiff
path: root/sys-libs/libcxx/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /sys-libs/libcxx/files
reinit the tree, so we can have metadata
Diffstat (limited to 'sys-libs/libcxx/files')
-rw-r--r--sys-libs/libcxx/files/Makefile38
-rw-r--r--sys-libs/libcxx/files/libcxx-3.8.1-musl-support.patch15
-rw-r--r--sys-libs/libcxx/files/libcxx-3.9-cmake-link-flags.patch23
-rw-r--r--sys-libs/libcxx/files/libcxx-3.9-cmake-static-lib.patch196
-rwxr-xr-xsys-libs/libcxx/files/prepare_snapshot.sh16
5 files changed, 288 insertions, 0 deletions
diff --git a/sys-libs/libcxx/files/Makefile b/sys-libs/libcxx/files/Makefile
new file mode 100644
index 000000000000..029e7295b889
--- /dev/null
+++ b/sys-libs/libcxx/files/Makefile
@@ -0,0 +1,38 @@
+CXXFLAGS+=-std=c++11 -fstrict-aliasing -Wall -Wextra -Wshadow -Wconversion \
+ -Wpadded -Wstrict-aliasing=2 -Wstrict-overflow=4
+
+SRCDIR=..
+LIB=libc++
+STATIC=libc++.a
+MAJOR=1
+MINOR=0
+SHEXT?=.so
+SHLIB=$(LIB)$(SHEXT).$(MAJOR).$(MINOR)
+SONAME=$(LIB)$(SHEXT).$(MAJOR)
+
+SRC=$(wildcard $(SRCDIR)/src/*.cpp)
+OBJ=$(SRC:$(SRCDIR)/src/%.cpp=%.o)
+SOBJ=$(SRC:$(SRCDIR)/src/%.cpp=%.So)
+
+
+%.So: $(SRCDIR)/src/%.cpp
+ $(CXX) -I$(SRCDIR)/include $(CPPFLAGS) $(CXXFLAGS) -fPIC -nostdinc++ -c $< -o $@
+
+%.o: $(SRCDIR)/src/%.cpp
+ $(CXX) -I$(SRCDIR)/include $(CPPFLAGS) $(CXXFLAGS) -nostdinc++ -c $< -o $@
+
+$(STATIC): $(OBJ)
+ $(AR) cr $@ $^
+
+static: $(STATIC)
+
+$(SHLIB): $(SOBJ)
+ $(CXX) -fPIC -nodefaultlibs $(CXXFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(SONAME) -o $@ $^ $(LIBS)
+
+$(SONAME): $(SHLIB)
+ ln -s $< $@
+
+$(LIB)$(SHEXT): $(SONAME)
+ ln -s $< $@
+
+shared: $(SHLIB) $(SONAME) $(LIB)$(SHEXT)
diff --git a/sys-libs/libcxx/files/libcxx-3.8.1-musl-support.patch b/sys-libs/libcxx/files/libcxx-3.8.1-musl-support.patch
new file mode 100644
index 000000000000..ef86254dff17
--- /dev/null
+++ b/sys-libs/libcxx/files/libcxx-3.8.1-musl-support.patch
@@ -0,0 +1,15 @@
+diff --git a/include/__config b/include/__config
+index db5a832..f463557 100644
+--- a/include/__config
++++ b/include/__config
+@@ -11,6 +11,10 @@
+ #ifndef _LIBCPP_CONFIG
+ #define _LIBCPP_CONFIG
+
++// Normally this definition is handled by cmake; but since we're not using
++// cmake, we have to hardcode it here.
++#define _LIBCPP_HAS_MUSL_LIBC
++
+ #if defined(_MSC_VER) && !defined(__clang__)
+ #define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
+ #endif
diff --git a/sys-libs/libcxx/files/libcxx-3.9-cmake-link-flags.patch b/sys-libs/libcxx/files/libcxx-3.9-cmake-link-flags.patch
new file mode 100644
index 000000000000..bef5bc187547
--- /dev/null
+++ b/sys-libs/libcxx/files/libcxx-3.9-cmake-link-flags.patch
@@ -0,0 +1,23 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d618e83..0e76525 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -293,6 +293,18 @@ remove_flags(-DNDEBUG -UNDEBUG -D_DEBUG
+ # so they don't get transformed into -Wno and -errors respectivly.
+ remove_flags(-Wno-pedantic -pedantic-errors -pedantic)
+
++# FIXME: this is cribbed from HandleLLVMOptions.cmake.
++if(LIBCXX_STANDALONE_BUILD)
++ # Pass -Wl,-z,defs. This makes sure all symbols are defined. Otherwise a DSO
++ # build might work on ELF but fail on MachO/COFF.
++ if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR WIN32 OR CYGWIN OR
++ ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR
++ ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") AND
++ NOT LLVM_USE_SANITIZER)
++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")
++ endif()
++endif()
++
+ # Required flags ==============================================================
+ add_compile_flags_if_supported(-std=c++11)
+ if (NOT MSVC AND NOT LIBCXX_SUPPORTS_STD_EQ_CXX11_FLAG)
diff --git a/sys-libs/libcxx/files/libcxx-3.9-cmake-static-lib.patch b/sys-libs/libcxx/files/libcxx-3.9-cmake-static-lib.patch
new file mode 100644
index 000000000000..5f0e31864dfd
--- /dev/null
+++ b/sys-libs/libcxx/files/libcxx-3.9-cmake-static-lib.patch
@@ -0,0 +1,196 @@
+From b640da0b315ead39690d4d65c76938ab8aeb5449 Mon Sep 17 00:00:00 2001
+From: Petr Hosek <phosek@chromium.org>
+Date: Mon, 8 Aug 2016 22:57:25 +0000
+Subject: [PATCH] Allow building both shared and static library
+
+This change allows building both shared and static version of libc++
+in a single build, sharing object files between both versions.
+
+Differential Revision: https://reviews.llvm.org/D23232
+
+git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@278068 91177308-0d34-0410-b5e6-96231b3b80d8
+---
+ CMakeLists.txt | 5 ++++
+ docs/BuildingLibcxx.rst | 11 ++++++--
+ lib/CMakeLists.txt | 71 ++++++++++++++++++++++++++++++++++---------------
+ 3 files changed, 63 insertions(+), 24 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 950070d..98886b0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -52,6 +52,7 @@ MACRO_ENSURE_OUT_OF_SOURCE_BUILD(
+ # Basic options ---------------------------------------------------------------
+ option(LIBCXX_ENABLE_ASSERTIONS "Enable assertions independent of build mode." ON)
+ option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON)
++option(LIBCXX_ENABLE_STATIC "Build libc++ as a static library." ON)
+ option(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY "Build libc++experimental.a" ON)
+ option(LIBCXX_ENABLE_FILESYSTEM
+ "Build filesystem as part of libc++experimental.a" ${LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY})
+@@ -68,6 +69,10 @@ option(LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY "Install libc++experimental.a" OFF)
+ set(LIBCXX_ABI_VERSION 1 CACHE STRING "ABI version of libc++.")
+ option(LIBCXX_ABI_UNSTABLE "Unstable ABI of libc++." OFF)
+
++if (NOT LIBCXX_ENABLE_SHARED AND NOT LIBCXX_ENABLE_STATIC)
++ message(FATAL_ERROR "libc++ must be built as either a shared or static library.")
++endif()
++
+ # ABI Library options ---------------------------------------------------------
+ set(LIBCXX_CXX_ABI "${LIBCXX_CXX_ABI}" CACHE STRING
+ "Specify C++ ABI library to use." FORCE)
+diff --git a/docs/BuildingLibcxx.rst b/docs/BuildingLibcxx.rst
+index 5dd174a..6709352 100644
+--- a/docs/BuildingLibcxx.rst
++++ b/docs/BuildingLibcxx.rst
+@@ -150,8 +150,15 @@ libc++ specific options
+
+ **Default**: ``ON``
+
+- Build libc++ as a shared library. If ``OFF`` is specified then libc++ is
+- built as a static library.
++ Build libc++ as a shared library. Either :option:`LIBCXX_ENABLE_SHARED` or
++ :option:`LIBCXX_ENABLE_STATIC` has to be enabled.
++
++.. option:: LIBCXX_ENABLE_STATIC:BOOL
++
++ **Default**: ``ON``
++
++ Build libc++ as a static library. Either :option:`LIBCXX_ENABLE_SHARED` or
++ :option:`LIBCXX_ENABLE_STATIC` has to be enabled.
+
+ .. option:: LIBCXX_LIBDIR_SUFFIX:STRING
+
+diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
+index afc388e..cabf2e6 100644
+--- a/lib/CMakeLists.txt
++++ b/lib/CMakeLists.txt
+@@ -28,16 +28,6 @@ if(NOT LIBCXX_INSTALL_LIBRARY)
+ set(exclude_from_all EXCLUDE_FROM_ALL)
+ endif()
+
+-if (LIBCXX_ENABLE_SHARED)
+- add_library(cxx SHARED ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
+-else()
+- add_library(cxx STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
+-endif()
+-
+-if (DEFINED LIBCXX_CXX_ABI_DEPS)
+- add_dependencies(cxx LIBCXX_CXX_ABI_DEPS)
+-endif()
+-
+ #if LIBCXX_CXX_ABI_LIBRARY_PATH is defined we want to add it to the search path.
+ add_link_flags_if(LIBCXX_CXX_ABI_LIBRARY_PATH "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
+
+@@ -139,18 +129,51 @@ if ( APPLE AND (LIBCXX_CXX_ABI_LIBNAME STREQUAL "libcxxabi" OR
+ endif()
+ endif()
+
+-target_link_libraries(cxx ${LIBCXX_LIBRARIES})
+ split_list(LIBCXX_COMPILE_FLAGS)
+ split_list(LIBCXX_LINK_FLAGS)
+
+-set_target_properties(cxx
++# Add a object library that contains the compiled source files.
++add_library(cxx_objects OBJECT ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
++
++set_target_properties(cxx_objects
+ PROPERTIES
+ COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
+- LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
+- OUTPUT_NAME "c++"
+- VERSION "${LIBCXX_ABI_VERSION}.0"
+- SOVERSION "${LIBCXX_ABI_VERSION}"
++)
++
++set(LIBCXX_TARGETS)
++
++# Build the shared library.
++if (LIBCXX_ENABLE_SHARED)
++ add_library(cxx_shared SHARED $<TARGET_OBJECTS:cxx_objects>)
++ target_link_libraries(cxx_shared ${LIBCXX_LIBRARIES})
++ set_target_properties(cxx_shared
++ PROPERTIES
++ LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
++ OUTPUT_NAME "c++"
++ VERSION "${LIBCXX_ABI_VERSION}.0"
++ SOVERSION "${LIBCXX_ABI_VERSION}"
+ )
++ list(APPEND LIBCXX_TARGETS "cxx_shared")
++endif()
++
++# Build the static library.
++if (LIBCXX_ENABLE_STATIC)
++ add_library(cxx_static STATIC $<TARGET_OBJECTS:cxx_objects>)
++ target_link_libraries(cxx_static ${LIBCXX_LIBRARIES})
++ set_target_properties(cxx_static
++ PROPERTIES
++ LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
++ OUTPUT_NAME "c++"
++ )
++ list(APPEND LIBCXX_TARGETS "cxx_static")
++endif()
++
++# Add a meta-target for both libraries.
++add_custom_target(cxx DEPENDS ${LIBCXX_TARGETS})
++
++if (DEFINED LIBCXX_CXX_ABI_DEPS)
++ add_dependencies(cxx LIBCXX_CXX_ABI_DEPS)
++endif()
+
+ if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY)
+ file(GLOB LIBCXX_EXPERIMENTAL_SOURCES ../src/experimental/*.cpp)
+@@ -158,7 +181,11 @@ if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY)
+ file(GLOB LIBCXX_FILESYSTEM_SOURCES ../src/experimental/filesystem/*.cpp)
+ endif()
+ add_library(cxx_experimental STATIC ${LIBCXX_EXPERIMENTAL_SOURCES} ${LIBCXX_FILESYSTEM_SOURCES})
+- target_link_libraries(cxx_experimental cxx)
++ if (LIBCXX_ENABLE_SHARED)
++ target_link_libraries(cxx_experimental cxx_shared)
++ else()
++ target_link_libraries(cxx_experimental cxx_static)
++ endif()
+
+ set(experimental_flags "${LIBCXX_COMPILE_FLAGS}")
+ check_flag_supported(-std=c++14)
+@@ -174,7 +201,7 @@ endif()
+
+ # Generate a linker script inplace of a libc++.so symlink. Rerun this command
+ # after cxx builds.
+-if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
++if (LIBCXX_ENABLE_SHARED AND LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
+ # Get the name of the ABI library and handle the case where CXXABI_LIBNAME
+ # is a target name and not a library. Ex cxxabi_shared.
+ set(SCRIPT_ABI_LIBNAME "${LIBCXX_CXX_ABI_LIBRARY}")
+@@ -183,11 +210,11 @@ if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
+ endif()
+ # Generate a linker script inplace of a libc++.so symlink. Rerun this command
+ # after cxx builds.
+- add_custom_command(TARGET cxx POST_BUILD
++ add_custom_command(TARGET cxx_shared POST_BUILD
+ COMMAND
+ ${PYTHON_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/gen_link_script/gen_link_script.py
+ ARGS
+- "$<TARGET_LINKER_FILE:cxx>"
++ "$<TARGET_LINKER_FILE:cxx_shared>"
+ "${SCRIPT_ABI_LIBNAME}"
+ WORKING_DIRECTORY ${LIBCXX_BUILD_DIR}
+ )
+@@ -197,13 +224,13 @@ if (LIBCXX_INSTALL_LIBRARY)
+ if (LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY)
+ set(experimental_lib cxx_experimental)
+ endif()
+- install(TARGETS cxx ${experimental_lib}
++ install(TARGETS ${LIBCXX_TARGETS} ${experimental_lib}
+ LIBRARY DESTINATION lib${LIBCXX_LIBDIR_SUFFIX} COMPONENT libcxx
+ ARCHIVE DESTINATION lib${LIBCXX_LIBDIR_SUFFIX} COMPONENT libcxx
+ )
+ # NOTE: This install command must go after the cxx install command otherwise
+ # it will not be executed after the library symlinks are installed.
+- if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
++ if (LIBCXX_ENABLE_SHARED AND LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
+ # Replace the libc++ filename with $<TARGET_LINKER_FILE:cxx>
+ # after we required CMake 3.0.
+ install(FILES "${LIBCXX_LIBRARY_DIR}/libc++${CMAKE_SHARED_LIBRARY_SUFFIX}"
+--
+2.4.10
+
diff --git a/sys-libs/libcxx/files/prepare_snapshot.sh b/sys-libs/libcxx/files/prepare_snapshot.sh
new file mode 100755
index 000000000000..3de5a97a8096
--- /dev/null
+++ b/sys-libs/libcxx/files/prepare_snapshot.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+VERSION=$(date +%Y%m%d)
+BASE_VERSION="0.0"
+PACKAGE="libcxx-${BASE_VERSION}_p${VERSION}"
+
+svn co http://llvm.org/svn/llvm-project/libcxx/trunk ${PACKAGE}
+
+find "${PACKAGE}" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
+find "${PACKAGE}" -type d -name '.git' -prune -print0 | xargs -0 rm -rf
+
+tar cJf ${PACKAGE}.tar.xz ${PACKAGE}
+rm -rf ${PACKAGE}/
+
+echo "Tarball: \"${PACKAGE}.tar.xz\""
+
+echo "** all done **"