Combine with libcxxabi build

This commit is contained in:
Nikita Popov 2022-09-28 14:38:36 +02:00
parent 67e331f762
commit 18977449c9
5 changed files with 70 additions and 119 deletions

2
.gitignore vendored
View File

@ -93,3 +93,5 @@
/libcxx-14.0.5.src.tar.xz
/libcxx-15.0.0.src.tar.xz
/libcxx-15.0.0.src.tar.xz.sig
/libcxxabi-15.0.0.src.tar.xz
/libcxxabi-15.0.0.src.tar.xz.sig

View File

@ -1,72 +0,0 @@
From e844d6741aba16cf8b9371bbcd6607b9d7992da3 Mon Sep 17 00:00:00 2001
From: Nikita Popov <npopov@redhat.com>
Date: Fri, 9 Sep 2022 11:15:53 +0200
Subject: [PATCH] Use interface library for libcxx-abi-shared
The libc++.so linker script generation uses the IMPORTED_LIBNAME
target property on libcxx-abi-shared. However, libcxx-abi-shared
is not an interface library and as such cannot have an
IMPORTED_LIBNAME target property.
Converted libcxx-abi-shared into an imported interface library
and use IMPORTED_LIBNAME in place of IMPORTED_LOCATION. This makes
linker script generation work correctly with system-libcxxabi.
---
libcxx/cmake/Modules/HandleLibCXXABI.cmake | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/libcxx/cmake/Modules/HandleLibCXXABI.cmake b/libcxx/cmake/Modules/HandleLibCXXABI.cmake
index e77a4156071b..c390c589617a 100644
--- a/libcxx/cmake/Modules/HandleLibCXXABI.cmake
+++ b/libcxx/cmake/Modules/HandleLibCXXABI.cmake
@@ -79,6 +79,11 @@ function(imported_library target kind path name)
set_target_properties(${target} PROPERTIES IMPORTED_LOCATION "${file}")
endfunction()
+function(interface_library target name)
+ add_library(${target} INTERFACE IMPORTED GLOBAL)
+ set_target_properties(${target} PROPERTIES IMPORTED_LIBNAME "${name}")
+endfunction()
+
# Link against a system-provided libstdc++
if ("${LIBCXX_CXX_ABI}" STREQUAL "libstdc++")
add_library(libcxx-abi-headers INTERFACE)
@@ -86,7 +91,7 @@ if ("${LIBCXX_CXX_ABI}" STREQUAL "libstdc++")
"cxxabi.h;bits/c++config.h;bits/os_defines.h;bits/cpu_defines.h;bits/cxxabi_tweaks.h;bits/cxxabi_forced.h")
target_compile_definitions(libcxx-abi-headers INTERFACE "-DLIBSTDCXX" "-D__GLIBCXX__")
- imported_library(libcxx-abi-shared SHARED "${LIBCXX_CXX_ABI_LIBRARY_PATH}" stdc++)
+ interface_library(libcxx-abi-shared stdc++)
target_link_libraries(libcxx-abi-shared INTERFACE libcxx-abi-headers)
imported_library(libcxx-abi-static STATIC "${LIBCXX_CXX_ABI_LIBRARY_PATH}" stdc++)
@@ -99,7 +104,7 @@ elseif ("${LIBCXX_CXX_ABI}" STREQUAL "libsupc++")
"cxxabi.h;bits/c++config.h;bits/os_defines.h;bits/cpu_defines.h;bits/cxxabi_tweaks.h;bits/cxxabi_forced.h")
target_compile_definitions(libcxx-abi-headers INTERFACE "-D__GLIBCXX__")
- imported_library(libcxx-abi-shared SHARED "${LIBCXX_CXX_ABI_LIBRARY_PATH}" supc++)
+ interface_library(libcxx-abi-shared supc++)
target_link_libraries(libcxx-abi-shared INTERFACE libcxx-abi-headers)
imported_library(libcxx-abi-static STATIC "${LIBCXX_CXX_ABI_LIBRARY_PATH}" supc++)
@@ -133,7 +138,7 @@ elseif ("${LIBCXX_CXX_ABI}" STREQUAL "system-libcxxabi")
import_private_headers(libcxx-abi-headers "${LIBCXX_CXX_ABI_INCLUDE_PATHS}" "cxxabi.h;__cxxabi_config.h")
target_compile_definitions(libcxx-abi-headers INTERFACE "-DLIBCXX_BUILDING_LIBCXXABI")
- imported_library(libcxx-abi-shared SHARED "${LIBCXX_CXX_ABI_LIBRARY_PATH}" c++abi)
+ interface_library(libcxx-abi-shared c++abi)
target_link_libraries(libcxx-abi-shared INTERFACE libcxx-abi-headers)
imported_library(libcxx-abi-static STATIC "${LIBCXX_CXX_ABI_LIBRARY_PATH}" c++abi)
@@ -154,7 +159,7 @@ elseif ("${LIBCXX_CXX_ABI}" STREQUAL "libcxxrt")
"cxxabi.h;unwind.h;unwind-arm.h;unwind-itanium.h")
target_compile_definitions(libcxx-abi-headers INTERFACE "-DLIBCXXRT")
- imported_library(libcxx-abi-shared SHARED "${LIBCXX_CXX_ABI_LIBRARY_PATH}" cxxrt)
+ interface_library(libcxx-abi-shared cxxrt)
target_link_libraries(libcxx-abi-shared INTERFACE libcxx-abi-headers)
imported_library(libcxx-abi-static STATIC "${LIBCXX_CXX_ABI_LIBRARY_PATH}" cxxrt)
--
2.37.2

4
CMakeLists.txt Normal file
View File

@ -0,0 +1,4 @@
cmake_minimum_required(VERSION 3.13.4)
project(Runtimes C CXX ASM)
add_subdirectory(libcxxabi)
add_subdirectory(libcxx)

View File

@ -1,37 +1,27 @@
# If you need to bootstrap this, turn this on.
# Otherwise, you have a loop with libcxxabi
%global toolchain clang
%global bootstrap 0
%global libcxx_version 15.0.0
#global rc_ver 3
%global libcxx_srcdir libcxx-%{libcxx_version}%{?rc_ver:rc%{rc_ver}}.src
%global libcxxabi_srcdir libcxxabi-%{libcxx_version}%{?rc_ver:rc%{rc_ver}}.src
Name: libcxx
Version: %{libcxx_version}%{?rc_ver:~rc%{rc_ver}}
Release: 3%{?dist}
Release: 4%{?dist}
Summary: C++ standard library targeting C++11
License: MIT or NCSA
URL: http://libcxx.llvm.org/
Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{libcxx_version}%{?rc_ver:-rc%{rc_ver}}/%{libcxx_srcdir}.tar.xz
Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{libcxx_version}%{?rc_ver:-rc%{rc_ver}}/%{libcxx_srcdir}.tar.xz.sig
Source2: release-keys.asc
Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{libcxx_version}%{?rc_ver:-rc%{rc_ver}}/%{libcxxabi_srcdir}.tar.xz
Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{libcxx_version}%{?rc_ver:-rc%{rc_ver}}/%{libcxxabi_srcdir}.tar.xz.sig
Source4: release-keys.asc
Source5: CMakeLists.txt
Patch0: 0001-Use-interface-library-for-libcxx-abi-shared.patch
BuildRequires: clang llvm-devel cmake llvm-static ninja-build
BuildRequires: clang llvm-devel cmake ninja-build
# We need python3-devel for %%py3_shebang_fix
BuildRequires: python3-devel
# The static libc++ links the static abi library in as well
BuildRequires: libcxxabi-static
BuildRequires: libcxxabi-devel
%if %{bootstrap} < 1
BuildRequires: python3
%endif
# For origin certification
BuildRequires: gnupg2
@ -48,9 +38,7 @@ libc++ is a new implementation of the C++ standard library, targeting C++11.
%package devel
Summary: Headers and libraries for libcxx devel
Requires: %{name}%{?_isa} = %{version}-%{release}
%if %{bootstrap} < 1
Requires: libcxxabi-devel
%endif
%description devel
%{summary}.
@ -61,32 +49,47 @@ Summary: Static libraries for libcxx
%description static
%{summary}.
%prep
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%autosetup -n %{libcxx_srcdir} -p2
%package -n libcxxabi
Summary: Low level support for a standard C++ library
%py3_shebang_fix utils/
%description -n libcxxabi
libcxxabi provides low level support for a standard C++ library.
%package -n libcxxabi-devel
Summary: Headers and libraries for libcxxabi devel
Requires: %{name}%{?_isa} = %{version}-%{release}
%description -n libcxxabi-devel
%{summary}.
%package -n libcxxabi-static
Summary: Static libraries for libcxxabi
%description -n libcxxabi-static
%{summary}.
%prep
%{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE3}' --data='%{SOURCE2}'
%setup -T -q -b 0 -n %{libcxx_srcdir}
%setup -T -q -b 2 -n %{libcxxabi_srcdir}
%setup -T -c -n build
cp %{SOURCE5} .
mv ../%{libcxx_srcdir} libcxx
mv ../%{libcxxabi_srcdir} libcxxabi
%py3_shebang_fix libcxx/utils/
%build
# The location of this header changed.
if [[ -f %{_includedir}/cxxabi.h ]]; then
LIBCXX_ABI_PATH=%{_includedir}
else
LIBCXX_ABI_PATH=%{_includedir}/c++/v1
fi
%cmake -GNinja \
-DCMAKE_MODULE_PATH=%{_libdir}/cmake/llvm \
%cmake -GNinja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_MODULE_PATH=%{_libdir}/cmake/llvm \
%if 0%{?__isa_bits} == 64
-DLIBCXX_LIBDIR_SUFFIX:STRING=64 \
%endif
%if %{bootstrap} < 1
-DLIBCXX_CXX_ABI=system-libcxxabi \
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=$LIBCXX_ABI_PATH \
-DLIBCXX_CXX_ABI_LIBRARY_PATH=%{_libdir} \
-DPython3_EXECUTABLE=%{_bindir}/python3 \
-DLIBCXXABI_LIBDIR_SUFFIX:STRING=64 \
%endif
-DLIBCXX_INCLUDE_BENCHMARKS=OFF \
-DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON \
@ -100,7 +103,7 @@ fi
# Manually link libc++.a against libc++abi.a, because the libcxx build system is currently
# broken when system-libcxxabi is used.
ar cqT tmp.a %{buildroot}%{_libdir}/libc++.a %{_libdir}/libc++abi.a
ar cqT tmp.a %{buildroot}%{_libdir}/libc++.a %{buildroot}%{_libdir}/libc++abi.a
# Convert thin archive into normal archive.
ar -M <<EOM
CREATE tmp.a
@ -112,27 +115,39 @@ mv tmp.a %{buildroot}%{_libdir}/libc++.a
%ldconfig_scriptlets
# Install header files that libcxxabi needs
mkdir -p %{buildroot}%{_includedir}/libcxx-internal/
install -m 0644 src/include/*.h %{buildroot}%{_includedir}/libcxx-internal/
%files
%license LICENSE.TXT
%doc CREDITS.TXT TODO.TXT
%license libcxx/LICENSE.TXT
%doc libcxx/CREDITS.TXT libcxx/TODO.TXT
%{_libdir}/libc++.so.*
%files devel
%{_includedir}/libcxx-internal/
%{_includedir}/c++/
%exclude %{_includedir}/c++/v1/cxxabi.h
%exclude %{_includedir}/c++/v1/__cxxabi_config.h
%{_libdir}/libc++.so
%files static
%license LICENSE.TXT
%license libcxx/LICENSE.TXT
%{_libdir}/libc++.a
%{_libdir}/libc++experimental.a
%files -n libcxxabi
%license libcxxabi/LICENSE.TXT
%doc libcxxabi/CREDITS.TXT
%{_libdir}/libc++abi.so.*
%files -n libcxxabi-devel
%{_includedir}/c++/v1/cxxabi.h
%{_includedir}/c++/v1/__cxxabi_config.h
%{_libdir}/libc++abi.so
%files -n libcxxabi-static
%{_libdir}/libc++abi.a
%changelog
* Wed Oct 05 2022 Nikita Popov <npopov@redhat.com> - 15.0.0-4
- Combine with libcxxabi build
* Tue Sep 13 2022 Nikita Popov <npopov@redhat.com> - 15.0.0-3
- Rebuild

View File

@ -1,2 +1,4 @@
SHA512 (libcxx-15.0.0.src.tar.xz) = bfc8dcde5f89d3890e32579b2f894075b49bd8e50633b7bb2469864ddf26afb42ff65201e476451eeeaf5f15235891e8031979d78e3b30a3d641bfc85adbbaad
SHA512 (libcxx-15.0.0.src.tar.xz.sig) = d038afbcd143fcfdea4033e37771aa659b95519e74bc0cd55537085a9ce68d2b5f471db2ad2567766ada7bf82d3014c36f55461e2847efa48a688334eaf2b11a
SHA512 (libcxxabi-15.0.0.src.tar.xz) = fff6563f4c3d204a6f7a9c95358d109a52c57ffa7e60a9255f3357f6065dedf9644af9d9be2fbc3a319e385499da05f89af634475a2736e83325ec210499043b
SHA512 (libcxxabi-15.0.0.src.tar.xz.sig) = 64a51f78c9da013570dbff0d18f75eaf71fb98998069d1f1424f467e3e7ec239a306f79cd73a21b7e5ae0763bc9de356742cd3d4929889a987d879ac1c3e2a26