[llvm-branch-commits] [clang] [llvm] release/23.x: [cmake] Build libxml from source in release (#221365) (PR #225481)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Sep 22 11:46:19 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-github-workflow

Author: llvmbot

<details>
<summary>Changes</summary>

Backport 5ae71ec799917c67e9e72510e68831602fc60699

Requested by: @<!-- -->keith

---
Full diff: https://github.com/llvm/llvm-project/pull/225481.diff


3 Files Affected:

- (modified) .github/workflows/release-binaries.yml (+47) 
- (modified) clang/cmake/caches/Release.cmake (+1) 
- (modified) llvm/cmake/modules/FindLibXml2.cmake (+13-7) 


``````````diff
diff --git a/.github/workflows/release-binaries.yml b/.github/workflows/release-binaries.yml
index 6d89a03f47e231..2d9b546bb1a161 100644
--- a/.github/workflows/release-binaries.yml
+++ b/.github/workflows/release-binaries.yml
@@ -258,6 +258,41 @@ jobs:
         fi
         echo "build-prefix=$build_prefix" >> $GITHUB_OUTPUT
 
+    - name: Build libxml2 (Linux)
+      if: runner.os == 'Linux'
+      env:
+        BUILD_PREFIX: ${{ steps.setup-stage.outputs.build-prefix }}
+      shell: bash
+      run: |
+        libxml2_prefix="$BUILD_PREFIX/libxml2-install"
+        libxml2_build_dir="$BUILD_PREFIX/libxml2-build"
+        libxml2_version=2.15.1
+        libxml2_archive="libxml2-$libxml2_version.tar.xz"
+        libxml2_checksum=c008bac08fd5c7b4a87f7b8a71f283fa581d80d80ff8d2efd3b26224c39bc54c
+
+        mkdir -p "$libxml2_build_dir" "$libxml2_prefix"
+        cd "$libxml2_build_dir" || exit
+        curl --fail --location --retry 3 \
+          "https://download.gnome.org/sources/libxml2/2.15/$libxml2_archive" -o "$libxml2_archive"
+        echo "$libxml2_checksum  $libxml2_archive" | sha256sum --check
+        tar -xf "$libxml2_archive"
+
+        cmake -G Ninja -S "libxml2-$libxml2_version" -B build \
+          -DCMAKE_BUILD_TYPE=Release \
+          -DCMAKE_INSTALL_PREFIX="$libxml2_prefix" \
+          -DCMAKE_INSTALL_LIBDIR=lib \
+          -DBUILD_SHARED_LIBS=OFF \
+          -DLIBXML2_WITH_ICU=OFF \
+          -DLIBXML2_WITH_ICONV=OFF \
+          -DLIBXML2_WITH_MODULES=OFF \
+          -DLIBXML2_WITH_PROGRAMS=OFF \
+          -DLIBXML2_WITH_TESTS=OFF \
+          -DLIBXML2_WITH_ZLIB=ON
+        cmake --build build --parallel
+        cmake --install build --component development
+
+        echo "PKG_CONFIG_PATH=$libxml2_prefix/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" >> "$GITHUB_ENV"
+
     - name: Configure Linux/MacOS
       id: build
       if: runner.os != 'Windows'
@@ -266,10 +301,22 @@ jobs:
         TARGET_CMAKE_FLAGS: ${{ needs.prepare.outputs.target-cmake-flags }}
       shell: bash
       run: |
+        libxml2_cmake_flags=()
+        if [ "$RUNNER_OS" = "Linux" ]; then
+          libxml2_prefix="$BUILD_PREFIX/libxml2-install"
+          for stage in "" BOOTSTRAP_ BOOTSTRAP_BOOTSTRAP_; do
+            libxml2_cmake_flags+=(
+              "-D${stage}LIBXML2_INCLUDE_DIR=$libxml2_prefix/include/libxml2"
+              "-D${stage}LIBXML2_LIBRARY=$libxml2_prefix/lib/libxml2.a"
+              "-D${stage}LIBXML2_STATIC_LIBRARY=$libxml2_prefix/lib/libxml2.a"
+            )
+          done
+        fi
         # There were some issues on the ARM64 MacOS runners with trying to build x86 object,
         # so we need to set some extra cmake flags to disable this.
         cmake -G Ninja -S llvm -B "$BUILD_PREFIX/build" \
             $TARGET_CMAKE_FLAGS \
+            "${libxml2_cmake_flags[@]}" \
             -C clang/cmake/caches/Release.cmake
 
     - name: Build Linux/MacOS
diff --git a/clang/cmake/caches/Release.cmake b/clang/cmake/caches/Release.cmake
index b0bc3ebfe5cb61..7279923c36b988 100644
--- a/clang/cmake/caches/Release.cmake
+++ b/clang/cmake/caches/Release.cmake
@@ -173,6 +173,7 @@ set_final_stage_var(CPACK_ARCHIVE_THREADS "0" STRING)
 
 set_final_stage_var(LLVM_USE_STATIC_ZSTD "ON" BOOL)
 if (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Linux")
+  set_final_stage_var(LLVM_ENABLE_LIBXML2 "FORCE_ON" STRING)
   set_final_stage_var(LLVM_USE_STATIC_LIBXML2 "ON" BOOL)
 endif()
 
diff --git a/llvm/cmake/modules/FindLibXml2.cmake b/llvm/cmake/modules/FindLibXml2.cmake
index f3f761606260da..f78ff327afc176 100644
--- a/llvm/cmake/modules/FindLibXml2.cmake
+++ b/llvm/cmake/modules/FindLibXml2.cmake
@@ -75,12 +75,25 @@ find_package_handle_standard_args(LibXml2
 )
 
 if(LibXml2_FOUND)
+  # Static libraries need their transitive dependencies for linking.
+  set(LIBXML2_STATIC_DEPS)
+  foreach(lib IN LISTS PC_LIBXML_STATIC_LIBRARIES)
+    if(NOT lib STREQUAL "xml2")
+      list(APPEND LIBXML2_STATIC_DEPS ${lib})
+    endif()
+  endforeach()
+
   if(NOT TARGET LibXml2::LibXml2)
     add_library(LibXml2::LibXml2 UNKNOWN IMPORTED)
     set_target_properties(LibXml2::LibXml2 PROPERTIES
         INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIR}"
         INTERFACE_COMPILE_OPTIONS "${LIBXML2_DEFINITIONS}"
         IMPORTED_LOCATION "${LIBXML2_LIBRARY}")
+    # A prefix containing only a static libxml2 also supplies the default target.
+    if(LIBXML2_LIBRARY STREQUAL LIBXML2_STATIC_LIBRARY)
+      set_property(TARGET LibXml2::LibXml2 PROPERTY
+        INTERFACE_LINK_LIBRARIES "${LIBXML2_STATIC_DEPS}")
+    endif()
   endif()
   if(LIBXML2_STATIC_LIBRARY AND NOT TARGET LibXml2::LibXml2Static)
     add_library(LibXml2::LibXml2Static STATIC IMPORTED)
@@ -88,13 +101,6 @@ if(LibXml2_FOUND)
         INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIR}"
         INTERFACE_COMPILE_OPTIONS "${LIBXML2_DEFINITIONS}"
         IMPORTED_LOCATION "${LIBXML2_STATIC_LIBRARY}")
-    # Static libraries need their transitive dependencies for linking.
-    set(LIBXML2_STATIC_DEPS)
-    foreach(lib IN LISTS PC_LIBXML_STATIC_LIBRARIES)
-      if(NOT lib STREQUAL "xml2")
-        list(APPEND LIBXML2_STATIC_DEPS ${lib})
-      endif()
-    endforeach()
     if(LIBXML2_STATIC_DEPS)
       set_target_properties(LibXml2::LibXml2Static PROPERTIES
           INTERFACE_LINK_LIBRARIES "${LIBXML2_STATIC_DEPS}")

``````````

</details>


https://github.com/llvm/llvm-project/pull/225481


More information about the llvm-branch-commits mailing list