[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