OpenBLAS icon indicating copy to clipboard operation
OpenBLAS copied to clipboard

Build fails with undefined reference at `test/sblat*`

Open brunvonlope opened this issue 6 months ago • 5 comments

Trying to build openblas 0.3.30 gives me this error on flatpak:

2025-06-20T13:02:15.6838656Z [12484/12497] Linking Fortran shared library lib/libopenblas.so.0.3
2025-06-20T13:02:15.6910173Z [12485/12497] Creating library symlink lib/libopenblas.so.0 lib/libopenblas.so
2025-06-20T13:02:15.7389293Z [12486/12497] Linking Fortran executable test/sblat2
2025-06-20T13:02:15.7390371Z [31mFAILED: [0mtest/sblat2 
2025-06-20T13:02:15.7391822Z : && /usr/bin/gfortran -L/app/lib -Wl,-z,relro,-z,now -Wl,--as-needed    -Wl,--dependency-file=test/CMakeFiles/sblat2.dir/link.d -Wall -frecursive -fno-optimize-sibling-calls -fPIC -fno-tree-vectorize test/CMakeFiles/sblat2.dir/sblat2.f.o -o test/sblat2  -Wl,-rpath,/run/build/openblas/lib  lib/libopenblas.so.0.3  -lm  /usr/lib/aarch64-linux-gnu/libgomp.so  /usr/lib/aarch64-linux-gnu/libpthread.a && :
2025-06-20T13:02:15.7393492Z /usr/lib/gcc/aarch64-unknown-linux-gnu/14.3.0/../../../../aarch64-unknown-linux-gnu/bin/ld: lib/libopenblas.so.0.3: undefined reference to `sgemm_direct_sme1_preprocess'
2025-06-20T13:02:15.7394428Z /usr/lib/gcc/aarch64-unknown-linux-gnu/14.3.0/../../../../aarch64-unknown-linux-gnu/bin/ld: lib/libopenblas.so.0.3: undefined reference to `sgemm_direct_sme1_2VLx2VL'
2025-06-20T13:02:15.7395015Z collect2: error: ld returned 1 exit status
2025-06-20T13:02:15.7412414Z [12487/12497] Linking Fortran executable test/sblat1
2025-06-20T13:02:15.7412910Z [31mFAILED: [0mtest/sblat1 
2025-06-20T13:02:15.7414239Z : && /usr/bin/gfortran -L/app/lib -Wl,-z,relro,-z,now -Wl,--as-needed    -Wl,--dependency-file=test/CMakeFiles/sblat1.dir/link.d -Wall -frecursive -fno-optimize-sibling-calls -fPIC -fno-tree-vectorize test/CMakeFiles/sblat1.dir/sblat1.f.o -o test/sblat1  -Wl,-rpath,/run/build/openblas/lib  lib/libopenblas.so.0.3  -lm  /usr/lib/aarch64-linux-gnu/libgomp.so  /usr/lib/aarch64-linux-gnu/libpthread.a && :
2025-06-20T13:02:15.7415882Z /usr/lib/gcc/aarch64-unknown-linux-gnu/14.3.0/../../../../aarch64-unknown-linux-gnu/bin/ld: lib/libopenblas.so.0.3: undefined reference to `sgemm_direct_sme1_preprocess'
2025-06-20T13:02:15.7416808Z /usr/lib/gcc/aarch64-unknown-linux-gnu/14.3.0/../../../../aarch64-unknown-linux-gnu/bin/ld: lib/libopenblas.so.0.3: undefined reference to `sgemm_direct_sme1_2VLx2VL'
2025-06-20T13:02:15.7417398Z collect2: error: ld returned 1 exit status
2025-06-20T13:02:15.7435160Z [12488/12497] Linking Fortran executable test/sblat3
2025-06-20T13:02:15.7435896Z [31mFAILED: [0mtest/sblat3 
2025-06-20T13:02:15.7437182Z : && /usr/bin/gfortran -L/app/lib -Wl,-z,relro,-z,now -Wl,--as-needed    -Wl,--dependency-file=test/CMakeFiles/sblat3.dir/link.d -Wall -frecursive -fno-optimize-sibling-calls -fPIC -fno-tree-vectorize test/CMakeFiles/sblat3.dir/sblat3.f.o -o test/sblat3  -Wl,-rpath,/run/build/openblas/lib  lib/libopenblas.so.0.3  -lm  /usr/lib/aarch64-linux-gnu/libgomp.so  /usr/lib/aarch64-linux-gnu/libpthread.a && :
2025-06-20T13:02:15.7438826Z /usr/lib/gcc/aarch64-unknown-linux-gnu/14.3.0/../../../../aarch64-unknown-linux-gnu/bin/ld: lib/libopenblas.so.0.3: undefined reference to `sgemm_direct_sme1_preprocess'
2025-06-20T13:02:15.7439751Z /usr/lib/gcc/aarch64-unknown-linux-gnu/14.3.0/../../../../aarch64-unknown-linux-gnu/bin/ld: lib/libopenblas.so.0.3: undefined reference to `sgemm_direct_sme1_2VLx2VL'

There is the full log: 12_Build.txt

brunvonlope avatar Jun 20 '25 13:06 brunvonlope

Is this with the 0.3.30 release or a preceding development snapshot ? This problem was supposedly fixed in mid-May (my #5222 and related followup)

martin-frbg avatar Jun 20 '25 13:06 martin-frbg

Sorry by the number. I meant 0.3.30

brunvonlope avatar Jun 20 '25 13:06 brunvonlope

Strange, I'll try to retest later today. What kind of cpu are you building this on (it seems you are not adding a TARGET specifier for the common code, so that would be determined by what the build host is [autodetected as]) ? Maybe there is still some loophole where not all of the build system agrees on whether SME support should be there - I did most of the DYNAMIC_ARCH build testing on an Apple M4 with TARGET set to ARMV8 (the usual choice for getting best compatibility on all arm64 systems)

martin-frbg avatar Jun 20 '25 13:06 martin-frbg

What kind of cpu are you building this on

Unfortunately I don't know 😅 it is some runner from flathub bot.

We are using -DDYNAMIC_ARCH=ON by the way

brunvonlope avatar Jun 20 '25 13:06 brunvonlope

Can you try adding -DTARGET=ARMV8 to that, just to be on the safe side ?

martin-frbg avatar Jun 20 '25 14:06 martin-frbg

can reproduce a similar issue on the github ci: https://github.com/chimera-linux/cports/actions/runs/16162862203/job/45617867485#step:7:105712

2025-07-09T07:26:59.5392581Z [13500/13510] Linking C executable utest/openblas_utest_ext
2025-07-09T07:26:59.5394483Z FAILED: [code=1] utest/openblas_utest_ext 
2025-07-09T07:26:59.5417605Z : && /usr/lib/ccache/bin/clang -ffile-prefix-map=/builddir/openblas-0.3.30=. -Wformat -Werror=format-security -ftrivial-auto-var-init=zero -fno-omit-frame-pointer -fsanitize=signed-integer-overflow,integer-divide-by-zero -fsanitize-trap=signed-integer-overflow,integer-divide-by-zero -fno-sanitize-recover -flto=thin -O2 -g2  -DNO_SME -DHAVE_C11 -Wall -DUSE_OPENMP -fPIC -DGEMM_GEMV_FORWARD -DSMALL_MATRIX_OPT -DDYNAMIC_ARCH -DSMP_SERVER -DNO_WARMUP -DMAX_CPU_NUMBER=4 -DMAX_PARALLEL_NUMBER=1 -DMAX_STACK_ALLOC=2048 -DNO_AFFINITY -DVERSION="\"0.3.30\"" -DBUILD_SINGLE -DBUILD_DOUBLE -DBUILD_COMPLEX -DBUILD_COMPLEX16 -Wl,-z,pack-relative-relocs -Wl,-O2 -fno-omit-frame-pointer -fsanitize=signed-integer-overflow,integer-divide-by-zero -fsanitize-trap=signed-integer-overflow,integer-divide-by-zero -fno-sanitize-recover -flto=thin utest/CMakeFiles/openblas_utest_ext.dir/utest_main.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/common.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/xerbla.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_isamin.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_idamin.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_icamin.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_izamin.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_ssum.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_dsum.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_scsum.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_dzsum.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_samin.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_damin.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_scamin.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_dzamin.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_scamax.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_dzamax.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zrotg.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_crotg.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_drotmg.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_srotmg.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zscal.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cscal.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_domatcopy.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_somatcopy.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zomatcopy.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_comatcopy.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_simatcopy.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_dimatcopy.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cimatcopy.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zimatcopy.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_sgeadd.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_dgeadd.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cgeadd.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zgeadd.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_saxpby.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_daxpby.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_caxpby.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zaxpby.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_caxpyc.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zaxpyc.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cgemv_t.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zgemv_t.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cgemv_n.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zgemv_n.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_crot.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zrot.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cgbmv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zgbmv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_dgemmt.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_sgemmt.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cgemmt.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zgemmt.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_ztrmv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_ctrmv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_ztrsv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_ctrsv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zgemm.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cgemm.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_cspmv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zspmv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_csbmv.c.o utest/CMakeFiles/openblas_utest_ext.dir/test_extensions/test_zsbmv.c.o -o utest/openblas_utest_ext  -Wl,-rpath,/builddir/openblas-0.3.30/build/lib  lib/libopenblas.so.0.3  -lm  /lib/libomp.so  /lib/libpthread.a && :
2025-07-09T07:26:59.5435385Z aarch64-chimera-linux-musl-ld: error: undefined reference: sgemm_direct_sme1_preprocess
2025-07-09T07:26:59.5435891Z >>> referenced by lib/libopenblas.so.0.3 (disallowed by --no-allow-shlib-undefined)
2025-07-09T07:26:59.5436173Z 
2025-07-09T07:26:59.5436378Z aarch64-chimera-linux-musl-ld: error: undefined reference: sgemm_direct_sme1_2VLx2VL
2025-07-09T07:26:59.5436861Z >>> referenced by lib/libopenblas.so.0.3 (disallowed by --no-allow-shlib-undefined)
2025-07-09T07:26:59.5437313Z clang: error: linker command failed with exit code 1 (use -v to see invocation)
2025-07-09T07:26:59.5437656Z ninja: build stopped: subcommand failed.

in this case -DTARGET=ARMV8 is indeed set

z-erica avatar Jul 09 '25 07:07 z-erica

Thanks. Seems the HAVE_SME variable is not getting set in CMake builds with DYNAMIC_ARCH on non-SME hardware, I wonder why I did not notice this in my tests.

martin-frbg avatar Jul 09 '25 08:07 martin-frbg