new file mode 100644
@@ -0,0 +1,48 @@
+From 20132d8eaa68a6c53e152718beda1dc0f4c9ff6c Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Wed, 19 Oct 2022 20:12:10 +0100
+Subject: [PATCH] Link libclangBasic against libatomic when necessary.
+
+This is necessary at least on PPC32.
+
+Depends on D136280.
+
+Bug: https://bugs.gentoo.org/874024
+Thanks-to: Arfrever Frehtes Taifersar Arahesis <Arfrever@Apache.Org>
+Tested-by: erhard_f@mailbox.org <erhard_f@mailbox.org>
+
+Differential Revision: https://reviews.llvm.org/D136282
+Upstream: https://github.com/llvm/llvm-project/commit/20132d8eaa68a6c53e152718beda1dc0f4c9ff6c
+Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
+---
+ CMakeLists.txt | 1 +
+ lib/Basic/CMakeLists.txt | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2ca81e506338..236e6fbaca28 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -63,6 +63,7 @@ if(CLANG_BUILT_STANDALONE)
+ include(TableGen)
+ include(HandleLLVMOptions)
+ include(VersionFromVCS)
++ include(CheckAtomic)
+ include(GetErrcMessages)
+ include(LLVMDistributionSupport)
+
+diff --git a/lib/Basic/CMakeLists.txt b//lib/Basic/CMakeLists.txt
+index 5d197f59ac4f..f0f3839a7e2c 100644
+--- a/lib/Basic/CMakeLists.txt
++++ b/lib/Basic/CMakeLists.txt
+@@ -111,3 +111,7 @@ add_clang_library(clangBasic
+ omp_gen
+ )
+
++target_link_libraries(clangBasic
++ PRIVATE
++ ${LLVM_ATOMIC_LIB}
++)
+--
+2.45.2
+
@@ -105,6 +105,11 @@ ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y)
HOST_CLANG_CONF_OPTS += -DGCC_INSTALL_PREFIX:PATH=`realpath --relative-to=$(HOST_DIR)/bin/ $(TOOLCHAIN_EXTERNAL_INSTALL_DIR)`
endif
+ifeq ($(BR2_PACKAGE_HOST_PYTHON3),y)
+HOST_CLANG_DEPENDENCIES += host-python3
+HOST_CLANG_CONF_OPTS += -DCLANG_PYTHON_BINDINGS_VERSIONS=$(PYTHON3_VERSION_MAJOR)
+endif
+
define HOST_CLANG_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
$(Q)cd $(HOST_DIR)/bin; \
rm -f clang-$(CLANG_VERSION_MAJOR).br_real; \
new file mode 100644
@@ -0,0 +1,91 @@
+From fa981b541365190ae646d2dce575706cd0626cf7 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Wed, 19 Oct 2022 19:50:20 +0100
+Subject: [PATCH] Set LLVM_ATOMIC_LIB variable for convenient linking against
+ libatomic
+
+* Set LLVM_ATOMIC_LIB to keep track of when we need to link against libatomic.
+* Add detection of mold linker which is required for this.
+* Use --as-needed when linking against libatomic as a bonus. On some platforms,
+ libatomic may be required only sometimes.
+
+Bug: https://bugs.gentoo.org/832675
+Thanks-to: Arfrever Frehtes Taifersar Arahesis <Arfrever@Apache.Org>
+Tested-by: erhard_f@mailbox.org <erhard_f@mailbox.org>
+
+Differential Revision: https://reviews.llvm.org/D136280
+Upstream: https://github.com/llvm/llvm-project/commit/fa981b541365190ae646d2dce575706cd0626cf7
+Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
+---
+ cmake/modules/AddLLVM.cmake | 1 +
+ cmake/modules/CheckAtomic.cmake | 13 +++++++++++++
+ lib/Support/CMakeLists.txt | 4 +---
+ tools/dsymutil/CMakeLists.txt | 4 +---
+ 4 files changed, 16 insertions(+), 6 deletions(-)
+
+diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake
+index 30ac0040e565..428a22422e28 100644
+--- a/cmake/modules/AddLLVM.cmake
++++ b/cmake/modules/AddLLVM.cmake
+@@ -219,6 +219,7 @@ if (NOT DEFINED LLVM_LINKER_DETECTED AND NOT WIN32)
+ else()
+ if("${stdout}" MATCHES "^mold")
+ set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
++ set(LLVM_LINKER_IS_MOLD YES CACHE INTERNAL "")
+ message(STATUS "Linker detection: mold")
+ elseif("${stdout}" MATCHES "GNU gold")
+ set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
+diff --git a/cmake/modules/CheckAtomic.cmake b/cmake/modules/CheckAtomic.cmake
+index 3c5ba72993a3..f11cadf39ff6 100644
+--- a/cmake/modules/CheckAtomic.cmake
++++ b/cmake/modules/CheckAtomic.cmake
+@@ -82,6 +82,19 @@ elseif(LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL")
+ endif()
+ endif()
+
++# Set variable LLVM_ATOMIC_LIB specifying flags for linking against libatomic.
++if(HAVE_CXX_ATOMICS_WITH_LIB OR HAVE_CXX_ATOMICS64_WITH_LIB)
++ # Use options --push-state, --as-needed and --pop-state if linker is known to support them.
++ # Use single option -Wl of compiler driver to avoid incorrect re-ordering of options by CMake.
++ if(LLVM_LINKER_IS_GNULD OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD OR LLVM_LINKER_IS_MOLD)
++ set(LLVM_ATOMIC_LIB "-Wl,--push-state,--as-needed,-latomic,--pop-state")
++ else()
++ set(LLVM_ATOMIC_LIB "-latomic")
++ endif()
++else()
++ set(LLVM_ATOMIC_LIB)
++endif()
++
+ ## TODO: This define is only used for the legacy atomic operations in
+ ## llvm's Atomic.h, which should be replaced. Other code simply
+ ## assumes C++11 <atomic> works.
+diff --git a/lib/Support/CMakeLists.txt b/lib/Support/CMakeLists.txt
+index bc19b5be2140..023d50793eff 100644
+--- a/lib/Support/CMakeLists.txt
++++ b/lib/Support/CMakeLists.txt
+@@ -59,9 +59,7 @@ elseif( CMAKE_HOST_UNIX )
+ if( LLVM_ENABLE_TERMINFO )
+ set(imported_libs ${imported_libs} Terminfo::terminfo)
+ endif()
+- if( LLVM_ENABLE_THREADS AND (HAVE_LIBATOMIC OR HAVE_CXX_LIBATOMICS64) )
+- set(system_libs ${system_libs} atomic)
+- endif()
++ set(system_libs ${system_libs} ${LLVM_ATOMIC_LIB})
+ set(system_libs ${system_libs} ${LLVM_PTHREAD_LIB})
+ if( UNIX AND NOT (BEOS OR HAIKU) )
+ set(system_libs ${system_libs} m)
+diff --git a/tools/dsymutil/CMakeLists.txt b/tools/dsymutil/CMakeLists.txt
+index a255c1c5daf5..38028cd3d80a 100644
+--- a/tools/dsymutil/CMakeLists.txt
++++ b/tools/dsymutil/CMakeLists.txt
+@@ -40,6 +40,4 @@ if(APPLE)
+ target_link_libraries(dsymutil PRIVATE "-framework CoreFoundation")
+ endif(APPLE)
+
+-if(HAVE_CXX_ATOMICS_WITH_LIB OR HAVE_CXX_ATOMICS64_WITH_LIB)
+- target_link_libraries(dsymutil PRIVATE atomic)
+-endif()
++target_link_libraries(dsymutil PRIVATE ${LLVM_ATOMIC_LIB})
+--
+2.34.1
+
Add two upstream patches that were required for building and enable the bindings for our python version. It should be noted that because the python bindings have wrong default include dirs, they are useless if the includes are not provided externally. Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be> --- Changes v1 -> v2: - Remove BR2_PACKAGE_HOST_CLANG_PYTHON_BINDINGS (use BR2_PACKAGE_HOST_PYTHON3). --- ...sic-against-libatomic-when-necessary.patch | 48 ++++++++++ package/llvm-project/clang/clang.mk | 5 + ...LIB-variable-for-convenient-linking-.patch | 91 +++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 package/llvm-project/clang/0001-Link-libclangBasic-against-libatomic-when-necessary.patch create mode 100644 package/llvm-project/llvm/0001-Set-LLVM_ATOMIC_LIB-variable-for-convenient-linking-.patch