From 6f0f9df521bbdfd56c564e4dc531222074de172c Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Wed, 7 May 2025 01:05:32 +0000 Subject: [PATCH] Bug 1963424 - Statically link libxml2 to clang on Linux too. r=firefox-build-system-reviewers,sergesanspaille Differential Revision: https://phabricator.services.mozilla.com/D247549 --- build/build-clang/build-clang.py | 7 +++ taskcluster/kinds/toolchain/clang.yml | 6 +++ taskcluster/kinds/toolchain/kind.yml | 1 + taskcluster/kinds/toolchain/libxml2.yml | 54 +++++++++++++++++++++++ taskcluster/kinds/toolchain/misc.yml | 30 ------------- taskcluster/scripts/misc/build-libxml2.sh | 32 ++++++++++---- 6 files changed, 92 insertions(+), 38 deletions(-) create mode 100644 taskcluster/kinds/toolchain/libxml2.yml diff --git a/build/build-clang/build-clang.py b/build/build-clang/build-clang.py index e1801ee245f1..050d1472cf42 100755 --- a/build/build-clang/build-clang.py +++ b/build/build-clang/build-clang.py @@ -288,6 +288,13 @@ def build_one_stage( # checks. cmake_args += ["-DCAN_TARGET_i386=1"] cmake_args += ["-DLLVM_ENABLE_TERMINFO=OFF"] + libxml2 = os.path.join(os.environ.get("MOZ_FETCHES_DIR", ""), "libxml2") + if os.path.exists(libxml2): + cmake_args += [ + "-DLIBXML2_DEFINITIONS=-DLIBXML_STATIC", + f"-DLIBXML2_INCLUDE_DIR={libxml2}/include/libxml2", + f"-DLIBXML2_LIBRARIES={libxml2}/lib/libxml2.a", + ] if is_windows(target): cmake_args.insert(-1, "-DLLVM_EXPORT_SYMBOLS_FOR_PLUGINS=ON") cmake_args.insert(-1, "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded") diff --git a/taskcluster/kinds/toolchain/clang.yml b/taskcluster/kinds/toolchain/clang.yml index 6bf6cdf11992..5170dbaae0e6 100644 --- a/taskcluster/kinds/toolchain/clang.yml +++ b/taskcluster/kinds/toolchain/clang.yml @@ -235,6 +235,7 @@ linux64-clang-19-raw: toolchain: - linux64-clang-19-stage1 - linux64-clang-19-profile + - linux64-libxml2 - linux64-toolchain-sysroot linux64-clang-19: @@ -298,6 +299,7 @@ linux64-aarch64-clang-19-raw: toolchain: - linux64-clang-19-stage1 - linux64-clang-19-profile + - linux64-aarch64-libxml2 - linux64-aarch64-toolchain-sysroot linux64-aarch64-clang-19: @@ -886,6 +888,7 @@ linux64-clang-20-raw: toolchain: - linux64-clang-20-stage1 - linux64-clang-20-profile + - linux64-libxml2 - linux64-toolchain-sysroot linux64-clang-20: @@ -945,6 +948,7 @@ linux64-aarch64-clang-20-raw: toolchain: - linux64-clang-20-stage1 - linux64-clang-20-profile + - linux64-aarch64-libxml2 - linux64-aarch64-toolchain-sysroot linux64-aarch64-clang-20: @@ -1531,6 +1535,7 @@ linux64-clang-trunk-raw: toolchain: - linux64-clang-trunk-stage1 - linux64-clang-trunk-profile + - linux64-libxml2 - linux64-toolchain-sysroot linux64-clang-trunk: @@ -1596,6 +1601,7 @@ linux64-aarch64-clang-trunk-raw: toolchain: - linux64-clang-trunk-stage1 - linux64-clang-trunk-profile + - linux64-aarch64-libxml2 - linux64-aarch64-toolchain-sysroot linux64-aarch64-clang-trunk: diff --git a/taskcluster/kinds/toolchain/kind.yml b/taskcluster/kinds/toolchain/kind.yml index 6e26de732349..77f10a9995d6 100644 --- a/taskcluster/kinds/toolchain/kind.yml +++ b/taskcluster/kinds/toolchain/kind.yml @@ -40,6 +40,7 @@ tasks-from: - grcov.yml - hostutils.yml - libunwind.yml + - libxml2.yml - llvm-symbolizer.yml - macos-sdk.yml - mingw.yml diff --git a/taskcluster/kinds/toolchain/libxml2.yml b/taskcluster/kinds/toolchain/libxml2.yml new file mode 100644 index 000000000000..2bebcd92ab43 --- /dev/null +++ b/taskcluster/kinds/toolchain/libxml2.yml @@ -0,0 +1,54 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +--- +task-defaults: + worker-type: b-linux-gcp + worker: + max-run-time: 1800 + description: "libxml2 toolchain build" + run: + script: build-libxml2.sh + toolchain-artifact: public/build/libxml2.tar.zst + fetches: + fetch: + - libxml2 + toolchain: + - linux64-clang-toolchain + +linux64-libxml2: + treeherder: + symbol: TL(libxml2) + run: + arguments: ['x86_64-unknown-linux-gnu'] + fetches: + toolchain: + - linux64-toolchain-sysroot + +linux64-aarch64-libxml2: + treeherder: + symbol: TLA64(libxml2) + run: + arguments: ['aarch64-unknown-linux-gnu'] + fetches: + toolchain: + - linux64-aarch64-toolchain-sysroot + +win64-libxml2: + treeherder: + symbol: TW64(libxml2) + run: + arguments: ['x86_64-pc-windows-msvc'] + fetches: + toolchain: + - vs-toolchain + +win64-aarch64-libxml2: + description: "libxml2 toolchain build" + treeherder: + symbol: TWA64(libxml2) + run: + arguments: ['aarch64-pc-windows-msvc'] + fetches: + toolchain: + - vs-toolchain diff --git a/taskcluster/kinds/toolchain/misc.yml b/taskcluster/kinds/toolchain/misc.yml index f2b9ae92bc6b..f9d2932ac974 100644 --- a/taskcluster/kinds/toolchain/misc.yml +++ b/taskcluster/kinds/toolchain/misc.yml @@ -770,36 +770,6 @@ win64-cmake: - linux64-clang-toolchain - vs-toolchain -win64-libxml2: - description: "libxml2 toolchain build" - treeherder: - symbol: TW64(libxml2) - run: - script: build-libxml2.sh - arguments: ['x86_64-pc-windows-msvc'] - toolchain-artifact: public/build/libxml2.tar.zst - fetches: - fetch: - - libxml2 - toolchain: - - linux64-clang-toolchain - - vs-toolchain - -win64-aarch64-libxml2: - description: "libxml2 toolchain build" - treeherder: - symbol: TWA64(libxml2) - run: - script: build-libxml2.sh - arguments: ['aarch64-pc-windows-msvc'] - toolchain-artifact: public/build/libxml2.tar.zst - fetches: - fetch: - - libxml2 - toolchain: - - linux64-clang-toolchain - - vs-toolchain - talos-pdfs: description: "Gathers all the PDFs needed for the pdfpaint test" attributes: diff --git a/taskcluster/scripts/misc/build-libxml2.sh b/taskcluster/scripts/misc/build-libxml2.sh index 1ef4de6cb057..c2a971c2d741 100755 --- a/taskcluster/scripts/misc/build-libxml2.sh +++ b/taskcluster/scripts/misc/build-libxml2.sh @@ -13,18 +13,34 @@ TARGET=${1?"First argument must be a valid value for CMAKE_C_COMPILER_TARGET"} # actually need it, so just remove its creation. sed -i /libxml2\\.rc/d CMakeLists.txt -cmake \ +case "$TARGET" in +*-pc-windows-msvc) + EXTRA_CMAKE_FLAGS=" + -DCMAKE_C_COMPILER=clang-cl + -DCMAKE_LINKER=lld-link + -DCMAKE_MT=llvm-mt + -DCMAKE_C_FLAGS=\"-fuse-ld=lld -Xclang -ivfsoverlay -Xclang $MOZ_FETCHES_DIR/vs/overlay.yaml -winsysroot $MOZ_FETCHES_DIR/vs\" + -DCMAKE_EXE_LINKER_FLAGS=\"-winsysroot:$MOZ_FETCHES_DIR/vs\" + -DCMAKE_SYSTEM_NAME=Windows + -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded + " + ;; +*-unknown-linux-gnu) + EXTRA_CMAKE_FLAGS=" + -DCMAKE_C_COMPILER=clang + -DCMAKE_LINKER=clang + -DCMAKE_C_FLAGS=\"-fuse-ld=lld --sysroot=$MOZ_FETCHES_DIR/sysroot\" + -DCMAKE_EXE_LINKER_FLAGS=\"--sysroot=$MOZ_FETCHES_DIR/sysroot\" + " + ;; +esac + +eval cmake \ -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=Off \ - -DCMAKE_C_COMPILER=clang-cl \ -DCMAKE_C_COMPILER_TARGET=$TARGET \ - -DCMAKE_LINKER=lld-link \ - -DCMAKE_MT=llvm-mt \ - -DCMAKE_C_FLAGS="-fuse-ld=lld -Xclang -ivfsoverlay -Xclang $MOZ_FETCHES_DIR/vs/overlay.yaml -winsysroot $MOZ_FETCHES_DIR/vs" \ - -DCMAKE_EXE_LINKER_FLAGS="-winsysroot:$MOZ_FETCHES_DIR/vs" \ - -DCMAKE_SYSTEM_NAME=Windows \ - -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded \ + $EXTRA_CMAKE_FLAGS \ -DLIBXML2_WITH_C14N=OFF \ -DLIBXML2_WITH_CATALOG=OFF \ -DLIBXML2_WITH_DEBUG=OFF \