Build fails with undefined reference at `test/sblat*`
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
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)
Sorry by the number. I meant 0.3.30
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)
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
Can you try adding -DTARGET=ARMV8 to that, just to be on the safe side ?
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
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.