Skip to content

Building inside a aarch64 docker fails #4825

@mattip

Description

@mattip

Over at MacPython/openblas-libs#169 I am trying to compile aarch64 with DYNAMIC_ARCH=1 in a manylinux2014 docker by running

docker run --platform linux/aarch64 --rm -it quay.io/pypa/manylinux2014_aarch64 /bin/bash

and then running make.

So far I am seeing these problems:

  • When building without an explicit DYNAMIC_LIST, the build fails to compile the A64FX kernel:
../kernel/arm64/gemv_n_sve.c:43:18: error: ACLE function ‘svcntw’ requires ISA extension ‘sve’
    43 | #define SV_COUNT svcntw
       |                  ^~~~~~
 ../kernel/arm64/gemv_n_sve.c:62:25: note: in expansion of macro ‘SV_COUNT’
    62 |     uint64_t sve_size = SV_COUNT();
       |                         ^~~~~~~~
 ../kernel/arm64/gemv_n_sve.c:43:18: note: you can enable ‘sve’ using the command-line \
  option ‘-march’, or by using the ‘target’ attribute or pragma

since the A64FX kernel compilation does not set -march at all, and since the native architecture does not support SVE, the compilation fails.

  • With the command (all the kernels except A64FX in the dynamic list)
make BUFFERSIZE=20 DYNAMIC_ARCH=1 USE_OPENMP=0 NUM_THREADS=64 BINARY=64 \
   INTERFACE64=1 SYMBOLSUFFIX=64_ LIBNAMESUFFIX=64_ 
   OBJCONV=/openblas/objconv/objconv SYMBOLPREFIX=scipy_ LIBNAMEPREFIX=scipy_ \
   FIXED_LIBNAME=1 TARGET=ARMV8 \
   DYNAMIC_LIST="ARMV8 CORTEXA53 CORTEXA57 NEOVERSEN NEOVERSEV1 NEOVERSEN2 \
                 ARMV8SVE THUNDERX THUNDERX2T99 TSV110 EMAG8180 THUNDERX3T110"

I am getting this error which echos #3189

make[1]: Entering directory `/openblas/OpenBLAS/kernel'
make[1]: warning: -jN forced in submake: disabling jobserver mode.
cc -c -O2 -DSMALL_MATRIX_OPT -DMAX_STACK_ALLOC=2048 -DDYNAMIC_LIST -DDYN_ARMV8 -DDYN_ARMV8 -DDYN_CORTEXA53 -DDYN_CORTEXA57 -DDYN_NEOVERSEN -DDYN_NEOVERSEV1 -DDYN_NEOVERSEN2 -DDYN_ARMV8SVE -DDYN_THUNDERX -DDYN_THUNDERX2T99 -DDYN_TSV110 -DDYN_EMAG8180 -DDYN_THUNDERX3T110 -Wall -DF_INTERFACE_GFORT  -fPIC -DDYNAMIC_ARCH -DSMP_SERVER -DNO_WARMUP -DBUFFERSIZE=20 -DMAX_CPU_NUMBER=64 -DMAX_PARALLEL_NUMBER=1 -DBUILD_SINGLE=1 -DBUILD_DOUBLE=1 -DBUILD_COMPLEX=1 -DBUILD_COMPLEX16=1 -DVERSION=\"0.3.27.dev\" -UASMNAME -UASMFNAME -UNAME -UCNAME -UCHAR_NAME -UCHAR_CNAME -DASMNAME=samax_k_NEOVERSEN -DASMFNAME=samax_k_NEOVERSEN_ -DNAME=samax_k_NEOVERSEN_ -DCNAME=samax_k_NEOVERSEN -DCHAR_NAME=\"samax_k_NEOVERSEN_\" -DCHAR_CNAME=\"samax_k_NEOVERSEN\" -DNO_AFFINITY -DTS=_NEOVERSEN -I.. -DBUILD_KERNEL -DTABLE_NAME=gotoblas_NEOVERSEN -UDOUBLE  -UCOMPLEX -UCOMPLEX -UDOUBLE  -DUSE_ABS -UUSE_MIN \
    ../kernel/arm64/amax.S -o samax_k_NEOVERSEN.o
make[1]: *** No rule to make target `../kernel/arm64/amin.S', needed by `samin_k_NEOVERSEN.o'.  Stop.
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory `/openblas/OpenBLAS/kernel'
make: *** [libs] Error 1

Should I be cross-compiling instead, will that work better with DYNAMIC_ARCH=1?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions