Skip to content

Moving openmp to a runtime in newer versions of LLVM #3799

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 25, 2025

Conversation

Crivella
Copy link
Contributor

@Crivella Crivella commented Jun 26, 2025

With newer versions of LLVM, openmp has been moved from a project to a runtime.
Currently both version can be used but projects build are being deprecated llvm/llvm-project#136314

This change is needed also in order to fix

TODO

  • Version check the changes to make sure it works with older versions of LLVM
    It seems also in 18.1.x openmp can be built as a runtime, will defer to the result of the test builds...
    WORKED also with 18.1.8
  • Fix failing libomptarget tests
    With this fix libomptarget tests are failing again. In this case libomp.so is not being found as it is not anymore insilde .lib/libomp.so but ./runtimes/runtimes-bins/openmp/runtime/src/libomp.so
    • possible fix: add the specified folder to LIBRARY_PATH/LD_LIBRARY_PATH during testing
    • USED FIX: Create symlink from the new location of libomp.so to the expected one in the build directory

@Crivella
Copy link
Contributor Author

Test report by @Crivella

Overview of tested easyconfigs (in order)

Build succeeded for 0 out of 1 (1 easyconfigs in total)
crivella-desktop - Linux Ubuntu 22.04.5 LTS (Jammy Jellyfish), x86_64, 13th Gen Intel(R) Core(TM) i9-13900K (skylake), Python 3.11.13
See https://gist.github.com/Crivella/781d2143ccf244851dd8ad056f46c34d for a full test report.

@Crivella
Copy link
Contributor Author

Crivella commented Jun 26, 2025

Test report by @Crivella

Overview of tested easyconfigs (in order)

  • SUCCESS 123.eb (a copy of 20.1.5-GCCcore-13.3.0 with an extra versionsuffix)

Build succeeded for 1 out of 1 (1 easyconfigs in total)
crivella-desktop - Linux Ubuntu 22.04.5 LTS (Jammy Jellyfish), x86_64, 13th Gen Intel(R) Core(TM) i9-13900K (skylake), Python 3.11.13
See https://gist.github.com/Crivella/03c606b35bb4841344db7ab59014a9d2 for a full test report.

NOTES

OMPT is now being properly enabled

-- Using LLVM include directories: /home/crivella/.local/easybuild/build/LLVM/20.1.5/GCCcore-13.3.0-test/llvm-project-20.1.5.src/llvm/include;/home/crivella/.local/easybuild/build/LLVM/20.1.5/GCCcore-13.3.0-test/llvm.obj.3/include
-- Performing Test HAVE_FFI_CALL
-- Performing Test HAVE_FFI_CALL - Success
Failed to 'dlopen' libcuda.so.1
-- Performing Test OFFLOAD_HAVE_WERROR_CTOR
-- Performing Test OFFLOAD_HAVE_WERROR_CTOR - Success
-- Building the offload library with support for the "host;cuda;amdgpu" plugins
-- OMPT target enabled
-- OpenMP tools dir in libomptarget: /home/crivella/.local/easybuild/build/LLVM/20.1.5/GCCcore-13.3.0-test/llvm.obj.3/runtimes/runtimes-bins/openmp/runtime/src
-- Building x86_64 plugin linked with libffi
-- Building CUDA plugin for dlopened libcuda
-- Not generating NVIDIA tests, no supported devices detected. Use 'LIBOMPTARGET_FORCE_NVIDIA_TESTS' to override.
-- Building AMDGPU plugin for dlopened libhsa

@Crivella Crivella marked this pull request as ready for review June 26, 2025 15:09
@Crivella
Copy link
Contributor Author

@boegelbot please test @ jsc-zen3
EB_ARGS="--installpath /tmp/$USER/ebpr-3799 LLVM-18.1.8-GCCcore-13.3.0.eb"
CORE_CNT=16

@boegelbot
Copy link

@Crivella: 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=3799 EB_ARGS="--installpath /tmp/$USER/ebpr-3799 LLVM-18.1.8-GCCcore-13.3.0.eb" EB_REPO=easybuild-easyblocks EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_3799 --ntasks="16" ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

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

Test results coming soon (I hope)...

- notification for comment with ID 3008838690 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).

@Crivella
Copy link
Contributor Author

Test report by @Crivella

Overview of tested easyconfigs (in order)

  • SUCCESS LLVM-19.1.7-GCCcore-13.3.0.eb

Build succeeded for 1 out of 1 (1 easyconfigs in total)
crivella-desktop - Linux Ubuntu 22.04.5 LTS (Jammy Jellyfish), x86_64, 13th Gen Intel(R) Core(TM) i9-13900K (skylake), Python 3.11.13
See https://gist.github.com/Crivella/0b752eeb53913bd6c7a861785c297c58 for a full test report.

@boegelbot
Copy link

Test report by @boegelbot

Overview of tested easyconfigs (in order)

  • SUCCESS LLVM-18.1.8-GCCcore-13.3.0.eb

Build succeeded for 1 out of 1 (1 easyconfigs in total)
jsczen3c2.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.5, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/720e56067cdb0dc1b2103a359ca3aae3 for a full test report.

@Crivella
Copy link
Contributor Author

@boegelbot please test @ jsc-zen3
EB_ARGS="--installpath /tmp/$USER/ebpr-3799 LLVM-19.1.7-GCCcore-13.3.0.eb"
CORE_CNT=16

@boegelbot
Copy link

@Crivella: 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=3799 EB_ARGS="--installpath /tmp/$USER/ebpr-3799 LLVM-19.1.7-GCCcore-13.3.0.eb" EB_REPO=easybuild-easyblocks EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_3799 --ntasks="16" ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

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

Test results coming soon (I hope)...

- notification for comment with ID 3009445052 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

Test report by @boegelbot

Overview of tested easyconfigs (in order)

  • SUCCESS LLVM-19.1.7-GCCcore-13.3.0.eb

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

@Crivella
Copy link
Contributor Author

@boegelbot please test @ jsc-zen3
EB_ARGS="--installpath /tmp/$USER/ebpr-3799 LLVM-20.1.5-GCCcore-13.3.0.eb"
CORE_CNT=16

@boegelbot
Copy link

@Crivella: 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=3799 EB_ARGS="--installpath /tmp/$USER/ebpr-3799 LLVM-20.1.5-GCCcore-13.3.0.eb" EB_REPO=easybuild-easyblocks EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_3799 --ntasks="16" ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

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

Test results coming soon (I hope)...

- notification for comment with ID 3010274800 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

Test report by @boegelbot

Overview of tested easyconfigs (in order)

  • SUCCESS LLVM-20.1.5-GCCcore-13.3.0.eb

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

@Thyre
Copy link
Contributor

Thyre commented Jun 27, 2025

While my LLVM build is running, here's a code snippet to verify that the fix works:

Click to open
#include <assert.h>
#include <omp.h>
#include <omp-tools.h>
#include <stdio.h>

/* This callback will only be invoked when OMPT is built for offload */
static int device_initialize_called = 0;

void
callback_device_initialize( int                    device_num,
                            const char*            type,
                            ompt_device_t*         device,
                            ompt_function_lookup_t lookup,
                            const char*            documentation )
{
    printf( "[%s] device_num = %d | type = %s | device = %p | lookup = %p | documentation = %s\n",
            __FUNCTION__,
            device_num,
            type,
            device,
            lookup,
            documentation );
    device_initialize_called = 1;
}

int
tool_initialize( ompt_function_lookup_t lookup,
                 int                    initial_device_num,
                 ompt_data_t*           tool_data )
{
    ompt_set_callback_t ompt_set_callback = ( ompt_set_callback_t )lookup( "ompt_set_callback" );
    assert( ompt_set_callback && "Could not find ompt_set_callback" );

    ompt_set_result_t result = ompt_set_callback( ompt_callback_device_initialize, ( ompt_callback_t )callback_device_initialize );
    assert( result == ompt_set_always && "Callback could not be registered!" );

    return 1; /* non-zero indicates success */

}

ompt_start_tool_result_t *
ompt_start_tool( unsigned int omp_version,
                 const char*  runtime_version )
{
    static ompt_start_tool_result_t tool;
    tool.initialize = &tool_initialize;
    return &tool;
}


int main( void )
{
    int ran_on_host = 1;

    #pragma omp target map( tofrom: ran_on_host )
    {
        ran_on_host = omp_is_initial_device();
    }

    assert( device_initialize_called && "Device init. callback was not called" );
    return ran_on_host;
}

The code can be tested with (requires CUDA and a working GPU):

$ clang -fopenmp --offload-arch=sm_75 code.c
$ OMP_TARGET_OFFLOAD=mandatory ./a.out

@Thyre
Copy link
Contributor

Thyre commented Jun 27, 2025

Forgot --upload-test-report.

Here's a manual upload: https://gist.github.com/Thyre/1407f397f09e8ee168b162e9f2a8be97

@Thyre
Copy link
Contributor

Thyre commented Jun 27, 2025

Test run with the LLVM:

 jreuter@Linux  ~  which clang
/data/EasyBuild-develop/software/LLVM/20.1.7-GCCcore-14.2.0/bin/clang
 jreuter@Linux  ~  clang -fopenmp --offload-arch=gfx1201 test.c
 jreuter@Linux  ~  OMP_TARGET_OFFLOAD=mandatory ./a.out
[callback_device_initialize] device_num = 0 | type = gfx1201 | device = 0x55ed0788b560 | lookup = 0x7f4edb870ad0 | documentation = (null)
 jreuter@Linux  ~  grep -rni "OMPT target" $EBROOTLLVM/easybuild/*.log
127958:-- OMPT target enabled
187478:-- OMPT target enabled
324243:-- OMPT target enabled

@Crivella
Copy link
Contributor Author

@boegel I think this is ready for review

@Thyre
Copy link
Contributor

Thyre commented Jun 27, 2025

USED WRONG EASYBLOCK, see easybuilders/easybuild-framework#4929


Build with ROCm-LLVM on MI250X nodes:

Test report by @Thyre

Overview of tested easyconfigs (in order)

  • SUCCESS ROCm-LLVM-6.4.1-GCCcore-14.2.0.eb

Build succeeded for 1 out of 1 (1 easyconfigs in total)
jrc0850.jureca - Linux Rocky Linux 9.5 (Blue Onyx), x86_64, AMD EPYC 7443 24-Core Processor (zen3), Python 3.9.21
See https://gist.github.com/Thyre/7d0bc093428840b80534d5d1d87b5330 for a full test report.


ROCm-LLVM still has support disabled. However, it's quite hard to figure out if the LLVM EasyBlock was even picked up correctly. The component EasyBlocks are not stored in the build artifacts, see also easybuilders/easybuild-framework#4862

Thyre added a commit to Thyre/easybuild-custom that referenced this pull request Jun 27, 2025
Signed-off-by: Jan André Reuter <jan@zyten.de>
@Crivella
Copy link
Contributor Author

Manual test report 19.1.7 (SUCCESS)

On a RHEL9 VM with only lmod + EESSI + EESSI-extend

https://gist.github.com/Crivella/40eb67c82e37433f7b2772f44ea906c8

@Crivella
Copy link
Contributor Author

Manual test report 20.1.5 (SUCCESS)

On a RHEL9 VM with only lmod + EESSI + EESSI-extend

https://gist.github.com/Crivella/7c3123b502f84e60ca1d91f3bee33ff3

@Thyre
Copy link
Contributor

Thyre commented Jun 27, 2025

With ROCm-LLVM (on Linux, i.e. my Arch Linux machine) in a single stage build:

[ 98%] Linking C shared library libomp.so
cd /data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins/openmp/runtime/src && /data/EasyBuild-develop/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E cmake_link_script CMakeFiles/omp.dir/link.txt --verbose=1
/tmp/eb-o98_nop5/tmpq9xaqhte/rpath_wrappers/clang_wrapper/clang --target=x86_64-unknown-linux-gnu -fPIC --gcc-install-dir=/data/EasyBuild-develop/software/GCCcore/14.2.0/lib/gcc/x86_64-pc-linux-gnu/14.2.0 -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-comment -Wstring-conversion -ffunction-sections -fdata-sections -Wall -fcolor-diagnostics -Wcast-qual -Wformat-pedantic -Wimplicit-fallthrough -Wsign-compare -Wno-extra -Wno-pedantic -fno-semantic-interposition -fdata-sections -O3 -DNDEBUG -Wl,--as-needed -Wl,--version-script=/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm-project-19.0.0-rocm-6.4.1.src/openmp/runtime/src/exports_so.txt -Wl,--undefined-version -static-libgcc -Wl,-z,noexecstack -Xlinker --dependency-file=CMakeFiles/omp.dir/link.d -L/data/EasyBuild-develop/software/numactl/2.0.19-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/numactl/2.0.19-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/libdrm/2.4.125-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/libdrm/2.4.125-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/libffi/3.4.5-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/libffi/3.4.5-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/ncurses/6.5-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/ncurses/6.5-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/libxml2/2.13.4-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/libxml2/2.13.4-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/GMP/6.3.0-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/GMP/6.3.0-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/hwloc/2.11.2-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/hwloc/2.11.2-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/zlib/1.3.1-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/zlib/1.3.1-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/elfutils/0.193-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/elfutils/0.193-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/pkgconf/2.3.0-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/pkgconf/2.3.0-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/Python/3.13.1-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/Python/3.13.1-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/Perl/5.40.0-GCCcore-14.2.0/lib64 -L/data/EasyBuild-develop/software/Perl/5.40.0-GCCcore-14.2.0/lib -L/data/EasyBuild-develop/software/GCCcore/14.2.0/lib64 -L/data/EasyBuild-develop/software/GCCcore/14.2.0/lib -Wl,-z,defs -Wl,-z,nodelete -shared -Wl,-soname,libomp.so -o libomp.so CMakeFiles/omp.dir/kmp_alloc.cpp.o CMakeFiles/omp.dir/kmp_atomic.cpp.o CMakeFiles/omp.dir/kmp_csupport.cpp.o CMakeFiles/omp.dir/kmp_debug.cpp.o CMakeFiles/omp.dir/kmp_itt.cpp.o CMakeFiles/omp.dir/kmp_environment.cpp.o CMakeFiles/omp.dir/kmp_error.cpp.o CMakeFiles/omp.dir/kmp_global.cpp.o CMakeFiles/omp.dir/kmp_i18n.cpp.o CMakeFiles/omp.dir/kmp_io.cpp.o CMakeFiles/omp.dir/kmp_runtime.cpp.o CMakeFiles/omp.dir/kmp_settings.cpp.o CMakeFiles/omp.dir/kmp_str.cpp.o CMakeFiles/omp.dir/kmp_tasking.cpp.o CMakeFiles/omp.dir/kmp_threadprivate.cpp.o CMakeFiles/omp.dir/kmp_utility.cpp.o CMakeFiles/omp.dir/kmp_barrier.cpp.o CMakeFiles/omp.dir/kmp_wait_release.cpp.o CMakeFiles/omp.dir/kmp_affinity.cpp.o CMakeFiles/omp.dir/kmp_dispatch.cpp.o CMakeFiles/omp.dir/kmp_lock.cpp.o CMakeFiles/omp.dir/kmp_sched.cpp.o CMakeFiles/omp.dir/kmp_collapse.cpp.o CMakeFiles/omp.dir/z_Linux_util.cpp.o CMakeFiles/omp.dir/kmp_gsupport.cpp.o CMakeFiles/omp.dir/thirdparty/ittnotify/ittnotify_static.cpp.o CMakeFiles/omp.dir/kmp_taskdeps.cpp.o CMakeFiles/omp.dir/kmp_cancel.cpp.o CMakeFiles/omp.dir/kmp_ftn_cdecl.cpp.o CMakeFiles/omp.dir/kmp_ftn_extra.cpp.o CMakeFiles/omp.dir/kmp_version.cpp.o "CMakeFiles/omp.dir/ompt-general.cpp.o" "CMakeFiles/omp.dir/ompd-specific.cpp.o" CMakeFiles/omp.dir/z_Linux_asm.S.o  /data/EasyBuild-develop/software/hwloc/2.11.2-GCCcore-14.2.0/lib/libhwloc.so -lm -ldl
cd /data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins/openmp/runtime/src && /data/EasyBuild-develop/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E create_symlink libomp.so libgomp.so
cd /data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins/openmp/runtime/src && /data/EasyBuild-develop/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E create_symlink libomp.so libiomp5.so
cd /data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins/openmp/runtime/src && /data/EasyBuild-develop/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E make_directory /data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm-project-19.0.0-rocm-6.4.1.src/openmp/runtime/exports/common.ompt.optional/include
cd /data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins/openmp/runtime/src && /data/EasyBuild-develop/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E copy omp.h /data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm-project-19.0.0-rocm-6.4.1.src/openmp/runtime/exports/common.ompt.optional/include
Error copying file "omp.h" to "/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm-project-19.0.0-rocm-6.4.1.src/openmp/runtime/exports/common.ompt.optional/include".
make[5]: *** [openmp/runtime/src/CMakeFiles/omp.dir/build.make:636: openmp/runtime/src/libomp.so] Error 1
make[5]: *** Deleting file 'openmp/runtime/src/libomp.so'
make[5]: Leaving directory '/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins'
make[4]: *** [CMakeFiles/Makefile2:21760: openmp/runtime/src/CMakeFiles/omp.dir/all] Error 2
make[4]: Leaving directory '/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins'
make[3]: *** [Makefile:139: all] Error 2
make[3]: Leaving directory '/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins'
make[2]: *** [runtimes/CMakeFiles/runtimes.dir/build.make:98: runtimes/runtimes-stamps/runtimes-build] Error 2
make[2]: Leaving directory '/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1'
make[1]: *** [CMakeFiles/Makefile2:336647: runtimes/CMakeFiles/runtimes.dir/all] Error 2
make[1]: Leaving directory '/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1'
make: *** [Makefile:159: all] Error 2

The full log is unfortunately too large to link...

@Thyre
Copy link
Contributor

Thyre commented Jun 27, 2025

With ROCm-LLVM (on jrc0850.jureca, i.e. Rocky Linux 9.5 VM) in multi stage build:

[ 98%] Linking C shared library libomp.so
cd /dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3/runtimes/runtimes-bins/openmp/runtime/src && /p/project1/cswmanage/reuter1/EasyBuild/apps/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E cmake_link_script CMakeFiles/omp.dir/link.txt --verbose=1
/tmp/eb-j7f3anar/tmpbhwefqya/rpath_wrappers/clang_wrapper/clang --target=x86_64-unknown-linux-gnu -fPIC --gcc-install-dir=/p/project1/cswmanage/reuter1/EasyBuild/apps/software/GCCcore/14.2.0/lib/gcc/x86_64-pc-linux-gnu/14.2.0 -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-comment -Wstring-conversion -ffunction-sections -fdata-sections -Wall -fcolor-diagnostics -Wcast-qual -Wformat-pedantic -Wimplicit-fallthrough -Wsign-compare -Wno-extra -Wno-pedantic -fno-semantic-interposition -fdata-sections -O3 -DNDEBUG -Wl,--as-needed -Wl,--version-script=/dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm-project-19.0.0-rocm-6.4.1.src/openmp/runtime/src/exports_so.txt -Wl,--undefined-version -static-libgcc -Wl,-z,noexecstack -Xlinker --dependency-file=CMakeFiles/omp.dir/link.d -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/numactl/2.0.19-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/numactl/2.0.19-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/libdrm/2.4.125-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/libdrm/2.4.125-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/libffi/3.4.5-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/libffi/3.4.5-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/ncurses/6.5-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/ncurses/6.5-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/libxml2/2.13.4-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/libxml2/2.13.4-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/GMP/6.3.0-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/GMP/6.3.0-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/hwloc/2.11.2-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/hwloc/2.11.2-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/zlib/1.3.1-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/zlib/1.3.1-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/elfutils/0.193-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/elfutils/0.193-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/binutils/2.42-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/binutils/2.42-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/pkgconf/2.3.0-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/pkgconf/2.3.0-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/Python/3.13.1-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/Python/3.13.1-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/Perl/5.40.0-GCCcore-14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/Perl/5.40.0-GCCcore-14.2.0/lib -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/GCCcore/14.2.0/lib64 -L/p/project1/cswmanage/reuter1/EasyBuild/apps/software/GCCcore/14.2.0/lib -Wl,-z,defs -Wl,-z,nodelete -shared -Wl,-soname,libomp.so -o libomp.so CMakeFiles/omp.dir/kmp_alloc.cpp.o CMakeFiles/omp.dir/kmp_atomic.cpp.o CMakeFiles/omp.dir/kmp_csupport.cpp.o CMakeFiles/omp.dir/kmp_debug.cpp.o CMakeFiles/omp.dir/kmp_itt.cpp.o CMakeFiles/omp.dir/kmp_environment.cpp.o CMakeFiles/omp.dir/kmp_error.cpp.o CMakeFiles/omp.dir/kmp_global.cpp.o CMakeFiles/omp.dir/kmp_i18n.cpp.o CMakeFiles/omp.dir/kmp_io.cpp.o CMakeFiles/omp.dir/kmp_runtime.cpp.o CMakeFiles/omp.dir/kmp_settings.cpp.o CMakeFiles/omp.dir/kmp_str.cpp.o CMakeFiles/omp.dir/kmp_tasking.cpp.o CMakeFiles/omp.dir/kmp_threadprivate.cpp.o CMakeFiles/omp.dir/kmp_utility.cpp.o CMakeFiles/omp.dir/kmp_barrier.cpp.o CMakeFiles/omp.dir/kmp_wait_release.cpp.o CMakeFiles/omp.dir/kmp_affinity.cpp.o CMakeFiles/omp.dir/kmp_dispatch.cpp.o CMakeFiles/omp.dir/kmp_lock.cpp.o CMakeFiles/omp.dir/kmp_sched.cpp.o CMakeFiles/omp.dir/kmp_collapse.cpp.o CMakeFiles/omp.dir/z_Linux_util.cpp.o CMakeFiles/omp.dir/kmp_gsupport.cpp.o CMakeFiles/omp.dir/thirdparty/ittnotify/ittnotify_static.cpp.o CMakeFiles/omp.dir/kmp_taskdeps.cpp.o CMakeFiles/omp.dir/kmp_cancel.cpp.o CMakeFiles/omp.dir/kmp_ftn_cdecl.cpp.o CMakeFiles/omp.dir/kmp_ftn_extra.cpp.o CMakeFiles/omp.dir/kmp_version.cpp.o "CMakeFiles/omp.dir/ompt-general.cpp.o" "CMakeFiles/omp.dir/ompd-specific.cpp.o" CMakeFiles/omp.dir/z_Linux_asm.S.o  /p/project1/cswmanage/reuter1/EasyBuild/apps/software/hwloc/2.11.2-GCCcore-14.2.0/lib/libhwloc.so -lm -ldl
cd /dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3/runtimes/runtimes-bins/openmp/runtime/src && /p/project1/cswmanage/reuter1/EasyBuild/apps/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E create_symlink libomp.so libgomp.so
cd /dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3/runtimes/runtimes-bins/openmp/runtime/src && /p/project1/cswmanage/reuter1/EasyBuild/apps/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E create_symlink libomp.so libiomp5.so
cd /dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3/runtimes/runtimes-bins/openmp/runtime/src && /p/project1/cswmanage/reuter1/EasyBuild/apps/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E make_directory /dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm-project-19.0.0-rocm-6.4.1.src/openmp/runtime/exports/common.ompt.optional/include
cd /dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3/runtimes/runtimes-bins/openmp/runtime/src && /p/project1/cswmanage/reuter1/EasyBuild/apps/software/CMake/3.31.3-GCCcore-14.2.0/bin/cmake -E copy omp.h /dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm-project-19.0.0-rocm-6.4.1.src/openmp/runtime/exports/common.ompt.optional/include
Error copying file "omp.h" to "/dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm-project-19.0.0-rocm-6.4.1.src/openmp/runtime/exports/common.ompt.optional/include".
make[5]: *** [openmp/runtime/src/CMakeFiles/omp.dir/build.make:636: openmp/runtime/src/libomp.so] Error 1
make[5]: *** Deleting file 'openmp/runtime/src/libomp.so'
make[5]: Leaving directory '/dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3/runtimes/runtimes-bins'
make[4]: *** [CMakeFiles/Makefile2:21726: openmp/runtime/src/CMakeFiles/omp.dir/all] Error 2
make[4]: Leaving directory '/dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3/runtimes/runtimes-bins'
make[3]: *** [Makefile:139: all] Error 2
make[3]: Leaving directory '/dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3/runtimes/runtimes-bins'
make[2]: *** [runtimes/CMakeFiles/runtimes.dir/build.make:98: runtimes/runtimes-stamps/runtimes-build] Error 2
make[2]: Leaving directory '/dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3'
make[1]: *** [CMakeFiles/Makefile2:336647: runtimes/CMakeFiles/runtimes.dir/all] Error 2
make[1]: Leaving directory '/dev/shm/reuter1/easybuild/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.3'
make: *** [Makefile:159: all] Error 2

@Thyre
Copy link
Contributor

Thyre commented Jun 27, 2025

Looks like the install script is looking in the entirely incorrect folder. The file is at:

/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/lib/clang/19/include/omp.h

instead of

/data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins/openmp/runtime/src/omp.h
eb-shell> ls /data/EasyBuild-develop/build/ROCmLLVM/6.4.1/GCCcore-14.2.0/llvm.obj.1/runtimes/runtimes-bins/openmp/runtime/src
CMakeFiles  cmake_install.cmake  kmp_config.h  kmp_i18n_default.inc  kmp_i18n_id.inc  libgomp.so  libiomp5.so  Makefile  omp_lib.F90  omp_lib.h  omp_lib_kinds.mod  omp_lib.mod

@Crivella
Copy link
Contributor Author

Maybe in the same spirit as the symlink i am doing for libomp.so we could do a copy in the expected path before running the install, but since the normal build are working I am not sure if this should be down at the level of the child easyblock?

@Thyre
Copy link
Contributor

Thyre commented Jun 27, 2025

Maybe in the same spirit as the symlink i am doing for libomp.so we could do a copy in the expected path before running the install, but since the normal build are working I am not sure if this should be down at the level of the child easyblock?

Yeah... I'm trying to figure out where LLVM 19 & ROCm 6.4.1 diverge. I feel like this is just one or two commits that differ and cause these issues.

@Thyre
Copy link
Contributor

Thyre commented Jul 3, 2025

I see set(LIBOMP_OMPT_SUPPORT ${OMPT_DEFAULT} CACHE BOOL "OMPT-support?") (at least LLVM 20.1.5). It being a CACHE variable is a clear sign to me that it is intended as a user setting especially with the OMPT_DEFAULT variable being used

LIBOMP_OMPT_SUPPORT is a cache variable in openmp, but not in offload. In offload, it is only set for OPENMP_STANDALONE_BUILD, else it tries to use the variable passed through otherwise.
This is where we observed the issue.

Wouldn't that be something to be fixed upstream? Or are they not seeing this? I'd really like to get some feedback from the LLVM maintainers on what the intended solution is.

Since their CI runners seemingly don't show the issue, they either do things differently, or do not build both openmp and offload at the same time? I agree that we should open an issue for this.

And are we really sure this same problem won't happen in the installed version if we only patch/symlink the intermediate/build dir?

Since the installed LLVM has the expected infrastructure / folder & file layout again, the issue won't occur. Clang should know where to find its libraries. Only the intermediate testing is the issue, because Clang doesn't expect this. This is at least my understanding.

@Crivella
Copy link
Contributor Author

Crivella commented Jul 3, 2025

Wouldn't that be something to be fixed upstream?

In theory yes, in practice if we want things moving forward and the fix is small i'd say we can patch it.
I've several issue on similar problem open for quite a while

This is all stuff we work around ourselves in the EB or in the patch files

To my understanding of

set(OMPT_TARGET_DEFAULT FALSE)
if ((LIBOMP_HAVE_OMPT_SUPPORT) AND (LIBOMP_OMPT_SUPPORT) AND (NOT WIN32))
  set (OMPT_TARGET_DEFAULT TRUE)
endif()
set(LIBOMPTARGET_OMPT_SUPPORT ${OMPT_TARGET_DEFAULT} CACHE BOOL "OMPT-target-support?")
if ((OMPT_TARGET_DEFAULT) AND (LIBOMPTARGET_OMPT_SUPPORT))
  add_definitions(-DOMPT_SUPPORT=1)
  message(STATUS "OMPT target enabled")
else()
  set(LIBOMPTARGET_OMPT_SUPPORT FALSE)
  message(STATUS "OMPT target disabled")
endif()

There is no way to set manually the variables that lead to OMPT being enabled, as many of them are all coming from internal checks

Since the installed LLVM has the expected infrastructure / folder & file layout again, the issue won't occur. Clang should know where to find its libraries. Only the intermediate testing is the issue, because Clang doesn't expect this. This is at least my understanding.

Yes that is the only difference i've observed and probably a bug in the build system. When building openmp as a project libomp.so ends up in <builddir>/lib right away, while as a runtimes it stays in the runtime dirs and ends up in <installdir>/lib/<runtime_libs> after install.

There are other stuff we are patching out like re-adding LD_LIBRARY_PATH being passed to tests to fix stuff not being found

@Crivella
Copy link
Contributor Author

Crivella commented Jul 3, 2025

Since their CI runners seemingly don't show the issue, they either do things differently, or do not build both openmp and offload at the same time? I agree that we should open an issue for this.

Might be worth exploring more. Might not be surprised if the are building the projects separately (as standalones) and at that point the if (OPENMP_STANDALONE_BUILD) kicks in which sets those variables for offload

@Crivella
Copy link
Contributor Author

Crivella commented Jul 3, 2025

Another possibility for the CI is that they are using customized config files for lit.

In that sense our patches, kinda do something similar

@Flamefire
Copy link
Contributor

I see set(LIBOMP_OMPT_SUPPORT ${OMPT_DEFAULT} CACHE BOOL "OMPT-support?") (at least LLVM 20.1.5). It being a CACHE variable is a clear sign to me that it is intended as a user setting especially with the OMPT_DEFAULT variable being used

LIBOMP_OMPT_SUPPORT is a cache variable in openmp, but not in offload. In offload, it is only set for OPENMP_STANDALONE_BUILD, else it tries to use the variable passed through otherwise. This is where we observed the issue.

A cache variable is global. So for the non-standalone build it will be set already by the time this code is entered. For the standalone build the possible support has to be determined from the installed files. We are not doing the standalone build so the cache variable is what is going to be used.

To my understanding of

set(OMPT_TARGET_DEFAULT FALSE)
if ((LIBOMP_HAVE_OMPT_SUPPORT) AND (LIBOMP_OMPT_SUPPORT) AND (NOT WIN32))
  set (OMPT_TARGET_DEFAULT TRUE)
endif()
set(LIBOMPTARGET_OMPT_SUPPORT ${OMPT_TARGET_DEFAULT} CACHE BOOL "OMPT-target-support?")
if ((OMPT_TARGET_DEFAULT) AND (LIBOMPTARGET_OMPT_SUPPORT))
  add_definitions(-DOMPT_SUPPORT=1)
  message(STATUS "OMPT target enabled")
else()
  set(LIBOMPTARGET_OMPT_SUPPORT FALSE)
  message(STATUS "OMPT target disabled")
endif()

There is no way to set manually the variables that lead to OMPT being enabled, as many of them are all coming from internal checks

Right, you cannot set OMPT_TARGET_DEFAULT manually. But you can set LIBOMPTARGET_OMPT_SUPPORT from the commandline. In CMake the syntax is set(<name> <default> CACHE <type> <description>), if the variable is already set (via CLI) it is used.
See e.g. also set(LLVM_ENABLE_ZLIB "ON" CACHE STRING "Use zlib for compression/decompression if available. Can be ON, OFF, or FORCE_ON") which we already set by -DLLVM_ENABLE_ZLIB=ON/OFF depending on the EC dependencies.

However I see an issue with the if: We can set LIBOMPTARGET_OMPT_SUPPORT but it also depends on the default, which looks wrong. So it boils down to LIBOMP_HAVE_OMPT_SUPPORT which is set by openmp/runtime/cmake/config-ix.cmake based on compile checks and also determines the default for LIBOMP_OMPD_SUPPORT & LIBOMP_OMPT_SUPPORT

TLDR: We should pass -DLIBOMP_OMPT_SUPPORT=ON (causes even a configure error if LIBOMP_HAVE_OMPT_SUPPORT evaluates to false) and those 2 being true causes OMPT_TARGET_DEFAULT to be TRUE so we get LIBOMPTARGET_OMPT_SUPPORT and enter the enabled case
But LIBOMP_OMPT_SUPPORT should be ON already (default), I'll check what's going on...

@Crivella
Copy link
Contributor Author

Crivella commented Jul 3, 2025

However I see an issue with the if: We can set LIBOMPTARGET_OMPT_SUPPORT but it also depends on the default, which looks wrong. So it boils down to LIBOMP_HAVE_OMPT_SUPPORT which is set by openmp/runtime/cmake/config-ix.cmake based on compile checks and also determines the default for LIBOMP_OMPD_SUPPORT & LIBOMP_OMPT_SUPPORT

I think the logic behind that section is the following:
They want to turn on LIBOMPTARGET_OMPT_SUPPORT by default if it is possible for it to be there, but also give you a way to disable it.
They still check for OMPT_TARGET_DEFAULT because that will be true if omp supports OMPT.
They do not want you trying to force LIBOMPTARGET_OMPT_SUPPORT if omp does not support it

@Flamefire
Copy link
Contributor

However I see an issue with the if: We can set LIBOMPTARGET_OMPT_SUPPORT but it also depends on the default, which looks wrong. So it boils down to LIBOMP_HAVE_OMPT_SUPPORT which is set by openmp/runtime/cmake/config-ix.cmake based on compile checks and also determines the default for LIBOMP_OMPD_SUPPORT & LIBOMP_OMPT_SUPPORT

I think the logic behind that section is the following: They want to turn on LIBOMPTARGET_OMPT_SUPPORT by default if it is possible for it to be there, but also give you a way to disable it. They still check for OMPT_TARGET_DEFAULT because that will be true if omp supports OMPT. They do not want you trying to force LIBOMPTARGET_OMPT_SUPPORT if omp does not support it

I guess yes. But that means they ignore the users choice and should rather error as they do for the host OMPT. I opened a PR with them: llvm/llvm-project#146865

@Crivella
Copy link
Contributor Author

Crivella commented Jul 3, 2025

I guess yes. But that means they ignore the users choice and should rather error as they do for the host OMPT. I opened a PR with them: llvm/llvm-project#146865

I think that even with this, it would not work without having openmp in the runtimes build. The CMake cache of the runtimes build is not shared with the one of the projects to my understanding, which was the entire reason the checks for OMP + OMPT where off causing LIBOMPTARGET to not have OMPT support.
We would need to also set those to manually on, which would require adding additional checks in the middle to make sure that OMP actually has OMPT support.

I really do not see why we should not follow the preferred upstream build procedures with a minor fix to get 200 tests pass because libomp is not in the expected location for clang rather than change the entire build system

@Flamefire
Copy link
Contributor

I haven't submitted my last message:

But LIBOMP_OMPT_SUPPORT should be ON already (default), I'll check what's going on...

Ok, found it: LLVM_PROJECTS are added via add_subdirectory, so they share the same variables and cache. LLVM_RUNTIMES are added as a (single) subproject on which the main build depends but is semi-independent.
So all runtimes share a CMakeCache which is another one as the main cache.

So if openmp and offload are both runtimes they can see each others cache and the OMPT variable(s) is correctly set such that support is enabled.

TLDR: You are right with

. The CMake cache of the runtimes build is not shared with the one of the projects to my understanding, which was the entire reason the checks for OMP + OMPT where off causing LIBOMPTARGET to not have OMPT support.

I really do not see why we should not follow the preferred upstream build procedures with a minor fix to get 200 tests pass because libomp is not in the expected location for clang rather than change the entire build system

That wasn't my intention. We should definitely go with this approach of moving openmp to runtimes. And in addition set LIBOMP_OMPT_SUPPORT such that the build will error out if it would otherwise default to OFF

@Crivella
Copy link
Contributor Author

@boegelbot please test @ jsc-zen3
EB_ARGS="LLVM-16.0.6-GCCcore-12.3.0.eb LLVM-18.1.8-GCCcore-13.3.0.eb LLVM-19.1.7-GCCcore-13.3.0.eb LLVM-20.1.5-GCCcore-13.3.0.eb"
CORE_CNT=16

@boegelbot
Copy link

@Crivella: 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=3799 EB_ARGS="LLVM-16.0.6-GCCcore-12.3.0.eb LLVM-18.1.8-GCCcore-13.3.0.eb LLVM-19.1.7-GCCcore-13.3.0.eb LLVM-20.1.5-GCCcore-13.3.0.eb" EB_REPO=easybuild-easyblocks EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_3799 --ntasks="16" ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

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

Test results coming soon (I hope)...

- notification for comment with ID 3056409667 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

Test report by @boegelbot

Overview of tested easyconfigs (in order)

  • SUCCESS LLVM-16.0.6-GCCcore-12.3.0.eb
  • SUCCESS LLVM-18.1.8-GCCcore-13.3.0.eb
  • SUCCESS LLVM-19.1.7-GCCcore-13.3.0.eb
  • SUCCESS LLVM-20.1.5-GCCcore-13.3.0.eb

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

@Thyre
Copy link
Contributor

Thyre commented Jul 11, 2025

Test report by @Thyre

Overview of tested easyconfigs (in order)

  • SUCCESS LLVM-20.1.5-GCCcore-13.3.0.eb

Build succeeded for 1 out of 1 (1 easyconfigs in total)
ZAM054 - Linux Zorin OS 17, x86_64, 12th Gen Intel(R) Core(TM) i7-1260P, 1 x NVIDIA NVIDIA GeForce MX550, 570.133.07, Python 3.10.12
See https://gist.github.com/Thyre/230b39e94d2d4349555b948b29c374cb for a full test report.

Copy link
Member

@ocaisa ocaisa left a comment

Choose a reason for hiding this comment

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

All versions of LLVM where this applies for this easyblock (>18.1.6) have been tested.

LGTM

@ocaisa
Copy link
Member

ocaisa commented Jul 25, 2025

We should definitely go with this approach of moving openmp to runtimes. And in addition set LIBOMP_OMPT_SUPPORT such that the build will error out if it would otherwise default to OFF

@Flamefire I'm looking at that as a nice-to-have in case you want to add a follow-up PR (or open an issue)

@ocaisa ocaisa merged commit 46c07bb into easybuilders:develop Jul 25, 2025
17 checks passed
@Crivella Crivella deleted the fix-LLVM_OMPT branch July 25, 2025 13:27
@Flamefire
Copy link
Contributor

@Flamefire I'm looking at that as a nice-to-have in case you want to add a follow-up PR (or open an issue)

Done #3853

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

LLVM is missing OpenMP Tools Interface for offload
6 participants