diff --git a/.gitignore b/.gitignore index dda4116..1d0a4aa 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/0001-Use-interface-library-for-libcxx-abi-shared.patch b/0001-Use-interface-library-for-libcxx-abi-shared.patch deleted file mode 100644 index 36758f8..0000000 --- a/0001-Use-interface-library-for-libcxx-abi-shared.patch +++ /dev/null @@ -1,72 +0,0 @@ -From e844d6741aba16cf8b9371bbcd6607b9d7992da3 Mon Sep 17 00:00:00 2001 -From: Nikita Popov -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 - diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cf07074 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 3.13.4) +project(Runtimes C CXX ASM) +add_subdirectory(libcxxabi) +add_subdirectory(libcxx) diff --git a/libcxx.spec b/libcxx.spec index ba69040..5a634f0 100644 --- a/libcxx.spec +++ b/libcxx.spec @@ -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 < - 15.0.0-4 +- Combine with libcxxabi build + * Tue Sep 13 2022 Nikita Popov - 15.0.0-3 - Rebuild diff --git a/sources b/sources index a56f5b0..9ae1160 100644 --- a/sources +++ b/sources @@ -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