[Buildroot] [PATCH 1/3] package/llvm-project: add support for clang python bindings
Raphaël Mélotte
raphael.melotte at mind.be
Mon Apr 7 10:39:56 UTC 2025
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 at mind.be>
---
...sic-against-libatomic-when-necessary.patch | 48 ++++++++++
package/llvm-project/clang/Config.in | 8 ++
package/llvm-project/clang/clang.mk | 5 +
...LIB-variable-for-convenient-linking-.patch | 91 +++++++++++++++++++
4 files changed, 152 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
diff --git a/package/llvm-project/clang/0001-Link-libclangBasic-against-libatomic-when-necessary.patch b/package/llvm-project/clang/0001-Link-libclangBasic-against-libatomic-when-necessary.patch
new file mode 100644
index 0000000000..d3068ea28b
--- /dev/null
+++ b/package/llvm-project/clang/0001-Link-libclangBasic-against-libatomic-when-necessary.patch
@@ -0,0 +1,48 @@
+From 20132d8eaa68a6c53e152718beda1dc0f4c9ff6c Mon Sep 17 00:00:00 2001
+From: Sam James <sam at 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 at Apache.Org>
+Tested-by: erhard_f at mailbox.org <erhard_f at 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 at 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
+
diff --git a/package/llvm-project/clang/Config.in b/package/llvm-project/clang/Config.in
index 2e23888720..134b8f5d9a 100644
--- a/package/llvm-project/clang/Config.in
+++ b/package/llvm-project/clang/Config.in
@@ -25,3 +25,11 @@ comment "clang needs a toolchain w/ wchar, threads, C++, gcc >= 7, dynamic libra
comment "clang needs a toolchain not affected by GCC bug 64735"
depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735
+
+if BR2_PACKAGE_CLANG
+
+config BR2_PACKAGE_HOST_CLANG_PYTHON_BINDINGS
+ bool "Python bindings for host-clang"
+ select BR2_PACKAGE_HOST_PYTHON3
+
+endif # BR2_PACKAGE_CLANG
diff --git a/package/llvm-project/clang/clang.mk b/package/llvm-project/clang/clang.mk
index 0bafd6461b..510d5b0805 100644
--- a/package/llvm-project/clang/clang.mk
+++ b/package/llvm-project/clang/clang.mk
@@ -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_CLANG_PYTHON_BINDINGS),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; \
diff --git a/package/llvm-project/llvm/0001-Set-LLVM_ATOMIC_LIB-variable-for-convenient-linking-.patch b/package/llvm-project/llvm/0001-Set-LLVM_ATOMIC_LIB-variable-for-convenient-linking-.patch
new file mode 100644
index 0000000000..07fca7710e
--- /dev/null
+++ b/package/llvm-project/llvm/0001-Set-LLVM_ATOMIC_LIB-variable-for-convenient-linking-.patch
@@ -0,0 +1,91 @@
+From fa981b541365190ae646d2dce575706cd0626cf7 Mon Sep 17 00:00:00 2001
+From: Sam James <sam at 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 at Apache.Org>
+Tested-by: erhard_f at mailbox.org <erhard_f at 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 at 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
+
--
2.34.1
More information about the buildroot
mailing list