Skip to content

add explicit libxml2 and libffi dependencies to LLVM 11.x/12.x/14.x#23603

Merged
boegel merged 4 commits intoeasybuilders:developfrom
Thyre:20250808102430_new_pr_LLVM1110
Sep 10, 2025
Merged

add explicit libxml2 and libffi dependencies to LLVM 11.x/12.x/14.x#23603
boegel merged 4 commits intoeasybuilders:developfrom
Thyre:20250808102430_new_pr_LLVM1110

Conversation

@github-actions github-actions bot added the change label Aug 8, 2025
@Thyre Thyre changed the title Add explicit libxml2 and zstd dependencies to LLVM Add explicit libxml2 and zstd dependencies to LLVM Aug 8, 2025
@Thyre Thyre added the bug fix label Aug 8, 2025
@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 8, 2025

Going through the LLVM sources, LLVM 15 is the first one adding zstd as part of llvm::Support::Compression. I'll remove this dependency from the older versions then. libxml2 can be found even in LLVM 11.

zstd compression was added in LLVM 15

Signed-off-by: Jan André Reuter <j.reuter@fz-juelich.de>
@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 8, 2025

@boegelbot please test @ jsc-zen3
CORE_CNT=16
EB_ARGS="LLVM-11.1.0-GCCcore-10.3.0.eb LLVM-12.0.1-GCCcore-10.3.0.eb LLVM-12.0.1-GCCcore-11.2.0.eb LLVM-14.0.3-GCCcore-11.3.0.eb"

@boegelbot
Copy link
Copy Markdown
Collaborator

@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23603 EB_ARGS="LLVM-11.1.0-GCCcore-10.3.0.eb LLVM-12.0.1-GCCcore-10.3.0.eb LLVM-12.0.1-GCCcore-11.2.0.eb LLVM-14.0.3-GCCcore-11.3.0.eb" EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23603 --ntasks="16" ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7523

Test results coming soon (I hope)...

Details

- notification for comment with ID 3167319735 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegel boegel added this to the next release (5.1.2) milestone Aug 8, 2025
@boegel boegel removed the change label Aug 8, 2025
Signed-off-by: Jan André Reuter <j.reuter@fz-juelich.de>
@Thyre Thyre changed the title Add explicit libxml2 and zstd dependencies to LLVM {compiler}[GCCcore/10.3.0--11.3.0] Add explicit libxml2 and zstd dependencies to LLVM Aug 8, 2025
@Thyre Thyre changed the title {compiler}[GCCcore/10.3.0--11.3.0] Add explicit libxml2 and zstd dependencies to LLVM {compiler}[GCCcore/10.3.0-11.3.0] Add explicit libxml2 and zstd dependencies to LLVM Aug 8, 2025
@Thyre Thyre added 2021a 2021b issues & PRs related to 2021b 2022a labels Aug 8, 2025
@github-actions github-actions bot added the change label Aug 8, 2025
@boegelbot
Copy link
Copy Markdown
Collaborator

Test report by @boegelbot
FAILED
Build succeeded for 3 out of 4 (4 easyconfigs in total)
jsczen3c1.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/547af282a7f0dc9ec6e464aa3fc6a63b for a full test report.

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 8, 2025

Test report by @boegelbot
FAILED
Build succeeded for 3 out of 4 (4 easyconfigs in total)
jsczen3c1.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/547af282a7f0dc9ec6e464aa3fc6a63b for a full test report.

We've seen this test fail before...
#20902 (comment)

@Flamefire
Copy link
Copy Markdown
Contributor

Test report by @Flamefire
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#3875
FAILED
Build succeeded for 0 out of 4 (4 easyconfigs in total)
n1509 - Linux RHEL 8.9 (Ootpa), x86_64, Intel(R) Xeon(R) Platinum 8470 (sapphirerapids), Python 3.9.18
See https://gist.github.com/Flamefire/319eb845bfb511fcdcb417ba0b6e3d65 for a full test report.

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 8, 2025

Test report by @Flamefire
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#3875
FAILED Build succeeded for 0 out of 4 (4 easyconfigs in total)
n1509 - Linux RHEL 8.9 (Ootpa), x86_64, Intel(R) Xeon(R) Platinum 8470 (sapphirerapids), Python 3.9.18
See https://gist.github.com/Flamefire/319eb845bfb511fcdcb417ba0b6e3d65 for a full test report.

All four failed 😕
Unfortunately, there are no logs in the Gist. Do you know why they failed?

@Flamefire
Copy link
Copy Markdown
Contributor

Unfortunately, there are no logs in the Gist. Do you know why they failed?

This is weird. Is this an EB bug?

Failures are all the same:

llvm-ar: error while loading shared libraries: libffi.so.8: cannot open shared object file: No such file or directory

libffi gets pulled in through Python during buildtime. I only see libLLVM-11.so requires it, not why.

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 8, 2025

Unfortunately, there are no logs in the Gist. Do you know why they failed?

This is weird. Is this an EB bug?

Maybe because of the options you've set, but I would still expect to see the Gist...

Sounds like a bug (or at least oversight) to me

Failures are all the same:

llvm-ar: error while loading shared libraries: libffi.so.8: cannot open shared object file: No such file or directory

libffi gets pulled in through Python during buildtime. I only see libLLVM-11.so requires it, not why.

Probably caused by easybuilders/easybuild-easyblocks#3849. So we either need an explicit dependency here, or update the check in the EasyBlock to set that configure option based on dependencies

@Flamefire
Copy link
Copy Markdown
Contributor

Probably caused by easybuilders/easybuild-easyblocks#3849. So we either need an explicit dependency here, or update the check in the EasyBlock to set that configure option based on dependencies

Both, I'd say.

From the log:

-- Performing Test HAVE_FFI_CALL
-- Performing Test HAVE_FFI_CALL - Success
-- Found FFI: /data/horse/ws/s3248973-EasyBuild/easybuild-rapids/software/libffi/3.4.2-GCCcore-11.3.0/lib64/libffi.so  

And there is seemingly an additional place where it might be pulled in in the omptarget plugin: https://github.com/llvm/llvm-project/blob/e64224a224a9891d01ad6eec84921bca1c1f0441/offload/cmake/Modules/LibomptargetGetDependencies.cmake#L42

Hence I guess a dependency is required.

Signed-off-by: Jan Andre Reuter <jan@zyten.de>
@Thyre Thyre changed the title {compiler}[GCCcore/10.3.0-11.3.0] Add explicit libxml2 and zstd dependencies to LLVM {compiler}[GCCcore/10.3.0-11.3.0] Add explicit libxml2 and libffi dependencies to LLVM Aug 9, 2025
@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 9, 2025

Probably caused by easybuilders/easybuild-easyblocks#3849. So we either need an explicit dependency here, or update the check in the EasyBlock to set that configure option based on dependencies

Both, I'd say.

From the log:

-- Performing Test HAVE_FFI_CALL
-- Performing Test HAVE_FFI_CALL - Success
-- Found FFI: /data/horse/ws/s3248973-EasyBuild/easybuild-rapids/software/libffi/3.4.2-GCCcore-11.3.0/lib64/libffi.so  

And there is seemingly an additional place where it might be pulled in in the omptarget plugin: https://github.com/llvm/llvm-project/blob/e64224a224a9891d01ad6eec84921bca1c1f0441/offload/cmake/Modules/LibomptargetGetDependencies.cmake#L42

Hence I guess a dependency is required.

While a minimal LLVM should not get to the offload CMake module (which only exists since LLVM 19), I agree that we should just define the libffi dependency in all LLVM EasyConfigs to avoid issues like you've seen.

I updated all the PRs accordingly. For full LLVM builds, libffi was already added.

@Flamefire
Copy link
Copy Markdown
Contributor

I guess we should still update the easyblock as this seems to be a regression introduced by that change. Could you do that? I could also fold it into the parallel-test PR to reduce testing.

I updated all the PRs accordingly. For full LLVM builds, libffi was already added.

Can you link the related PRs in the description for easier discoverability?

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 9, 2025

I guess we should still update the easyblock as this seems to be a regression introduced by that change. Could you do that? I could also fold it into the parallel-test PR to reduce testing.

Agreed, I can look into this tomorrow.

Can you link the related PRs in the description for easier discoverability?

Done

@boegel boegel changed the title {compiler}[GCCcore/10.3.0-11.3.0] Add explicit libxml2 and libffi dependencies to LLVM {compiler}[GCCcore/10.3.0-11.3.0] Add explicit libxml2 and libffi dependencies to LLVM 11.x/12.x/14.x Aug 9, 2025
@Flamefire
Copy link
Copy Markdown
Contributor

Agreed, I can look into this tomorrow.

I did a more complete change in easybuilders/easybuild-easyblocks#3881 extending the same logic to all dependencies. This should avoid similar issues.

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 18, 2025

@boegelbot please test @ jsc-zen3
CORE_CNT=16

@boegelbot
Copy link
Copy Markdown
Collaborator

@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23603 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23603 --ntasks="16" ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7655

Test results coming soon (I hope)...

Details

- notification for comment with ID 3197211400 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegel
Copy link
Copy Markdown
Member

boegel commented Aug 18, 2025

Test report from bot was triggered before easybuilders/easybuild-easyblocks#3881 was merged, not sure if that's wise...

So, just to make sure:

@boegelbot please test @ jsc-zen3
EB_ARGS="--installpath /tmp/$USER/pr23603 --include-easyblocks-from-pr 3881"
CORE_CNT=16

@boegelbot
Copy link
Copy Markdown
Collaborator

Test report by @boegelbot
FAILED
Build succeeded for 1 out of 4 (4 easyconfigs in total)
jsczen3c1.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/5ee0ae2ec96bc1f90169ebcae366cdbd for a full test report.

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 18, 2025

Test report by boegelbot
FAILED
Build succeeded for 1 out of 4 (4 easyconfigs in total)
jsczen3c1.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/5ee0ae2ec96bc1f90169ebcae366cdbd for a full test report.

Hm, looks like ld.gold is broken for those older toolchains on jsc-zen3, while there's still the one failing test for the third LLVM. The fourth works fine.

@boegel
Copy link
Copy Markdown
Member

boegel commented Aug 18, 2025

Hm, looks like ld.gold is broken for those older toolchains on jsc-zen3, while there's still the one failing test for the third LLVM. The fourth works fine.

@Thyre We can try to rebuild GCCcore/10.3.0 under /tmp to see if that would fix the problem?

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 18, 2025

Hm, looks like ld.gold is broken for those older toolchains on jsc-zen3, while there's still the one failing test for the third LLVM. The fourth works fine.

@Thyre We can try to rebuild GCCcore/10.3.0 under /tmp to see if that would fix the problem?

I'll try a manual rebuild of GCC & LLVM in my home folder at jsc-zen3. Might take a bit though.

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 19, 2025

@boegelbot please test @ jsc-zen3
EB_ARGS="binutils-2.36.1.eb GCCcore-10.3.0.eb binutils-2.36.1-GCCcore-10.3.0.eb LLVM-11.1.0-GCCcore-10.3.0.eb --installpath=/tmp/$USER/ecpr-23603"
CORE_CNT=16

@boegelbot
Copy link
Copy Markdown
Collaborator

@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23603 EB_ARGS="binutils-2.36.1.eb GCCcore-10.3.0.eb binutils-2.36.1-GCCcore-10.3.0.eb LLVM-11.1.0-GCCcore-10.3.0.eb --installpath=/tmp/$USER/ecpr-23603" EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23603 --ntasks="16" ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7704

Test results coming soon (I hope)...

Details

- notification for comment with ID 3199420047 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegelbot
Copy link
Copy Markdown
Collaborator

Test report by @boegelbot
FAILED
Build succeeded for 3 out of 4 (4 easyconfigs in total)
jsczen3c1.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/fa8106d60df2271c0e125982d2b53372 for a full test report.

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 19, 2025

Looking at the failure closer again:

g++ minimal.cpp -o minimal_cpp $(llvm-config --link-static --system-libs all) failed with exit code 1 (output: /usr/bin/ld.gold: /tmp/boegelbot/ecpr-23603/software/GCCcore/10.3.0/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/ld.gold)

Why are we using /usr/bin/ld.gold?

@boegel
Copy link
Copy Markdown
Member

boegel commented Aug 19, 2025

Looking at the failure closer again:

g++ minimal.cpp -o minimal_cpp $(llvm-config --link-static --system-libs all) failed with exit code 1 (output: /usr/bin/ld.gold: /tmp/boegelbot/ecpr-23603/software/GCCcore/10.3.0/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/ld.gold)

Why are we using /usr/bin/ld.gold?

Yeah, that sure is fishy...

There's an ld.gold in the corresponding binutils installation though:

$ ls -l $EASYBUILD_PREFIX/software/binutils/2.36.1-GCCcore-10.3.0/bin/ld.gold
-rwxr-xr-x. 2 boegelbot def-maintainers 6466368 Dec 12  2023 /project/def-maintainers/boegelbot/rocky9/zen3/software/binutils/2.36.1-GCCcore-10.3.0/bin/ld.gold

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 19, 2025

Yeah, that sure is fishy...

There's an ld.gold in the corresponding binutils installation though:

$ ls -l $EASYBUILD_PREFIX/software/binutils/2.36.1-GCCcore-10.3.0/bin/ld.gold
-rwxr-xr-x. 2 boegelbot def-maintainers 6466368 Dec 12  2023 /project/def-maintainers/boegelbot/rocky9/zen3/software/binutils/2.36.1-GCCcore-10.3.0/bin/ld.gold

Ah, I understand why...
GCCcore and LLVM both have binutils as a builddependency. That check is ran as a sanity check though, where binutils isn't loaded anymore. So it's using the system one instead.
Can we load a module during our sanity check?

@Flamefire
Copy link
Copy Markdown
Contributor

Test report by @Flamefire
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#3899
FAILED
Build succeeded for 3 out of 4 (4 easyconfigs in total)
n1678 - Linux RHEL 8.9 (Ootpa), x86_64, Intel(R) Xeon(R) Platinum 8470 (sapphirerapids), Python 3.9.18
See https://gist.github.com/Flamefire/f907a7f98e1605d50089084f9498852d for a full test report.

@Thyre
Copy link
Copy Markdown
Collaborator Author

Thyre commented Aug 26, 2025

@boegelbot please test @ jsc-zen3
EB_ARGS="--installpath=/tmp/$USER/ecpr-23603 --include-easyblocks-from-pr=3899"
CORE_CNT=16

@boegelbot
Copy link
Copy Markdown
Collaborator

@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23603 EB_ARGS="--installpath=/tmp/$USER/ecpr-23603 --include-easyblocks-from-pr=3899" EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23603 --ntasks="16" ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7758

Test results coming soon (I hope)...

Details

- notification for comment with ID 3225353947 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegelbot
Copy link
Copy Markdown
Collaborator

Test report by @boegelbot
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#3899
SUCCESS
Build succeeded for 4 out of 4 (4 easyconfigs in total)
jsczen3c2.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/7bfc97b6c77dce46742f53dc38b8f6c8 for a full test report.

@Flamefire
Copy link
Copy Markdown
Contributor

Test report by @Flamefire
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#3899
SUCCESS
Build succeeded for 4 out of 4 (4 easyconfigs in total)
n1071 - Linux RHEL 8.9 (Ootpa), x86_64, Intel(R) Xeon(R) Platinum 8470 (sapphirerapids), Python 3.9.18
See https://gist.github.com/Flamefire/54d0a9d4d64a5d6c0b5b54368a0288b4 for a full test report.

@Flamefire
Copy link
Copy Markdown
Contributor

Test report by @Flamefire
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#3899
SUCCESS
Build succeeded for 4 out of 4 (4 easyconfigs in total)
n1005.barnard.hpc.tu-dresden.de - Linux RHEL 8.9 (Ootpa), x86_64, Intel(R) Xeon(R) Platinum 8470 (sapphirerapids), Python 3.9.18
See https://gist.github.com/Flamefire/9fd0f32453c38f6340dc17a138523d3c for a full test report.

@Flamefire
Copy link
Copy Markdown
Contributor

Test report by @Flamefire
Using easyblocks from PR(s) easybuilders/easybuild-easyblocks#3899
SUCCESS
Build succeeded for 4 out of 4 (4 easyconfigs in total)
n1226 - Linux RHEL 8.9 (Ootpa), x86_64, Intel(R) Xeon(R) Platinum 8470 (sapphirerapids), Python 3.9.18
See https://gist.github.com/Flamefire/84723f3648c14fcd49271ce380cf3c8e for a full test report.

Copy link
Copy Markdown
Member

@boegel boegel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@boegel
Copy link
Copy Markdown
Member

boegel commented Sep 10, 2025

Going in, thanks @Thyre!

@boegel boegel merged commit 89fee9a into easybuilders:develop Sep 10, 2025
8 checks passed
@boegel boegel changed the title {compiler}[GCCcore/10.3.0-11.3.0] Add explicit libxml2 and libffi dependencies to LLVM 11.x/12.x/14.x add explicit libxml2 and libffi dependencies to LLVM 11.x/12.x/14.x Sep 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

2021a 2021b issues & PRs related to 2021b 2022a bug fix change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Missing dependencies in LLVM EasyConfigs

4 participants