Files
OpenBLAS/driver/others/Makefile
Mark Ryan ce79fe12fd disable fp16 flags on RISC-V unless BUILD_HFLOAT16=1
The compiler options that enable 16 bit floating point instructions
should not be enabled by default when building the RISCV64_ZVL128B
and RISCV64_ZVL256B targets.  The zfh and zvfh extensions are not part
of the 'V' extension and are not required by any of the RVA profiles.
There's no guarantee that kernels built with zfh and zvfh will work
correctly on fully compliant RVA23U64 devices.

To fix the issue we only build the RISCV64_ZVL128B and RISCV64_ZVL256B
kernels with the half float flags if BUILD_HFLOAT16=1.  We also update
the RISC-V dynamic detection code to disable the RISCV64_ZVL128B and
RISCV64_ZVL256B kernels at runtime if we've built with DYNAMIC_ARCH=1
and BUILD_HFLOAT16=1 and are running on a device that does not support
both Zfh and Zvfh.

Fixes: https://github.com/OpenMathLib/OpenBLAS/issues/5428
2025-08-28 09:41:07 +00:00

294 lines
7.2 KiB
Makefile

TOPDIR = ../..
include ../../Makefile.system
COMMONOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_num_threads.$(SUFFIX) openblas_get_num_procs.$(SUFFIX) openblas_get_config.$(SUFFIX) openblas_get_parallel.$(SUFFIX) openblas_error_handle.$(SUFFIX) openblas_env.$(SUFFIX)
#COMMONOBJS += slamch.$(SUFFIX) slamc3.$(SUFFIX) dlamch.$(SUFFIX) dlamc3.$(SUFFIX)
ifdef SMP
COMMONOBJS += blas_server.$(SUFFIX) divtable.$(SUFFIX) blasL1thread.$(SUFFIX) blas_server_callback.$(SUFFIX)
ifneq ($(NO_AFFINITY), 1)
COMMONOBJS += init.$(SUFFIX)
endif
endif
# COMMONOBJS += info.$(SUFFIX)
ifeq ($(DYNAMIC_ARCH), 1)
ifeq ($(ARCH),arm64)
COMMONOBJS += dynamic_arm64.$(SUFFIX)
else
ifeq ($(ARCH),power)
COMMONOBJS += dynamic_power.$(SUFFIX)
else
ifeq ($(ARCH),zarch)
COMMONOBJS += dynamic_zarch.$(SUFFIX)
else
ifeq ($(ARCH),mips64)
COMMONOBJS += dynamic_mips64.$(SUFFIX)
else
ifeq ($(ARCH),loongarch64)
COMMONOBJS += dynamic_loongarch64.$(SUFFIX)
else
ifeq ($(ARCH),riscv64)
COMMONOBJS += dynamic_riscv64.$(SUFFIX) detect_riscv64.$(SUFFIX)
else
COMMONOBJS += dynamic.$(SUFFIX)
endif
endif
endif
endif
endif
endif
else
COMMONOBJS += parameter.$(SUFFIX)
endif
ifeq ($(EXPRECISION), 1)
COMMONOBJS += x_abs.$(SUFFIX) qlamch.$(SUFFIX) qlamc3.$(SUFFIX)
endif
ifeq ($(QUAD_PRECISION), 1)
COMMONOBJS += addx.$(SUFFIX) mulx.$(SUFFIX)
endif
ifeq ($(OSNAME), CYGWIN_NT)
ifeq ($(C_COMPILER), PGI)
# COMMONOBJS += __builtin_stinit.$(SUFFIX)
endif
endif
ifeq ($(USE_CUDA), 1)
COMMONOBJS += cuda_init.$(SUFFIX)
endif
ifdef FUNCTION_PROFILE
COMMONOBJS += profile.$(SUFFIX)
endif
LIBOTHERS = libothers.$(LIBSUFFIX)
ifeq ($(CORE), PPC440)
MEMORY = memory_qalloc.c
endif
ifndef MEMORY
MEMORY = memory.c
endif
ifeq ($(USE_OPENMP), 1)
BLAS_SERVER = blas_server_omp.c
else
ifeq ($(OSNAME), WINNT)
BLAS_SERVER = blas_server_win32.c
endif
ifeq ($(OSNAME), CYGWIN_NT)
BLAS_SERVER = blas_server_win32.c
endif
ifeq ($(OSNAME), Interix)
BLAS_SERVER = blas_server_win32.c
endif
endif
ifndef BLAS_SERVER
BLAS_SERVER = blas_server.c
endif
ifeq ($(DYNAMIC_ARCH), 1)
ifeq ($(ARCH),arm64)
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic_arm64.$(SUFFIX)
else
ifeq ($(ARCH),power)
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic_power.$(SUFFIX)
else
ifeq ($(ARCH),zarch)
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic_zarch.$(SUFFIX)
else
ifeq ($(ARCH),mips64)
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic_mips64.$(SUFFIX)
else
ifeq ($(ARCH),loongarch64)
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic_loongarch64.$(SUFFIX)
else
ifeq ($(ARCH),riscv64)
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic_riscv64.$(SUFFIX) detect_riscv64.$(SUFFIX)
else
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic.$(SUFFIX)
endif
endif
endif
endif
endif
endif
else
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) parameter.$(SUFFIX)
endif
xerbla.$(SUFFIX) : xerbla.c
$(CC) $(CFLAGS) -c $< -o $(@F)
dynamic.$(SUFFIX) : dynamic.c
$(CC) $(CFLAGS) -c $< -o $(@F)
dynamic.$(PSUFFIX) : dynamic.c
$(CC) $(PFLAGS) -c $< -o $(@F)
parameter.$(SUFFIX) : parameter.c ../../param.h
$(CC) $(CFLAGS) -c $< -o $(@F)
init.$(SUFFIX) : init.c
$(CC) $(CFLAGS) -c $< -o $(@F)
profile.$(SUFFIX) : profile.c
$(CC) $(CFLAGS) -c $< -o $(@F)
memory.$(SUFFIX) : $(MEMORY) ../../common.h ../../param.h
$(CC) $(CFLAGS) -c $< -o $(@F)
blas_server.$(SUFFIX) : $(BLAS_SERVER) ../../common.h ../../common_thread.h ../../param.h
$(CC) $(CFLAGS) -c $< -o $(@F)
blas_server_callback.$(SUFFIX) : blas_server_callback.c ../../common.h
$(CC) $(CFLAGS) -c $< -o $(@F)
openblas_set_num_threads.$(SUFFIX) : openblas_set_num_threads.c
$(CC) $(CFLAGS) -c $< -o $(@F)
openblas_get_num_threads.$(SUFFIX) : openblas_get_num_threads.c
$(CC) $(CFLAGS) -c $< -o $(@F)
openblas_get_num_procs.$(SUFFIX) : openblas_get_num_procs.c
$(CC) $(CFLAGS) -c $< -o $(@F)
openblas_get_config.$(SUFFIX) : openblas_get_config.c
$(CC) $(CFLAGS) -c $< -o $(@F)
openblas_get_parallel.$(SUFFIX) : openblas_get_parallel.c
$(CC) $(CFLAGS) -c $< -o $(@F)
openblas_error_handle.$(SUFFIX) : openblas_error_handle.c
$(CC) $(CFLAGS) -c $< -o $(@F)
openblas_env.$(SUFFIX) : openblas_env.c
$(CC) $(CFLAGS) -c $< -o $(@F)
blasL1thread.$(SUFFIX) : blas_l1_thread.c ../../common.h ../../common_thread.h
$(CC) $(CFLAGS) -c $< -o $(@F)
cuda_init.$(SUFFIX) : cuda_init.c
$(CUCC) $(COMMON_OPT) -I$(TOPDIR) $(CUFLAGS) -DCNAME=$(*F) -c $< -o $(@F)
c_abs.$(SUFFIX) : abs.c
$(CC) $(CFLAGS) -c -UDOUBLE $< -o $(@F)
z_abs.$(SUFFIX) : abs.c
$(CC) $(CFLAGS) -c -DDOUBLE $< -o $(@F)
x_abs.$(SUFFIX) : abs.c
$(CC) $(CFLAGS) -c -DXDOUBLE $< -o $(@F)
slamch.$(SUFFIX) : lamch.c
$(CC) $(CFLAGS) -c -UDOUBLE $< -o $(@F)
dlamch.$(SUFFIX) : lamch.c
$(CC) $(CFLAGS) -c -DDOUBLE $< -o $(@F)
qlamch.$(SUFFIX) : lamch.c
$(CC) $(CFLAGS) -c -DXDOUBLE $< -o $(@F)
slamc3.$(SUFFIX) : lamc3.c
$(CC) $(CFLAGS) -c -UDOUBLE $< -o $(@F)
dlamc3.$(SUFFIX) : lamc3.c
$(CC) $(CFLAGS) -c -DDOUBLE $< -o $(@F)
qlamc3.$(SUFFIX) : lamc3.c
$(CC) $(CFLAGS) -c -DXDOUBLE $< -o $(@F)
divtable.$(SUFFIX) : divtable.c
$(CC) $(CFLAGS) -c -UDOUBLE $< -o $(@F)
__builtin_stinit.$(SUFFIX) : $(ARCH)/builtin_stinit.S
$(CC) $(CFLAGS) -c -UDOUBLE $< -o $(@F)
addx.$(SUFFIX) : $(ARCH)/addx.c
$(CC) $(CFLAGS) -c -DXDOUBLE -UCOMPLEX $< -o $(@F)
mulx.$(SUFFIX) : $(ARCH)/mulx.c
$(CC) $(CFLAGS) -c -DXDOUBLE -UCOMPLEX $< -o $(@F)
detect_riscv64.$(SUFFIX): detect_riscv64.c
$(CC) $(CFLAGS) -c -march=rv64imafdcv $< -o $(@F)
xerbla.$(PSUFFIX) : xerbla.c
$(CC) $(PFLAGS) -c $< -o $(@F)
parameter.$(PSUFFIX) : parameter.c ../../param.h
$(CC) $(PFLAGS) -c $< -o $(@F)
init.$(PSUFFIX) : init.c
$(CC) $(PFLAGS) -c $< -o $(@F)
profile.$(PSUFFIX) : profile.c
$(CC) $(PFLAGS) -c $< -o $(@F)
memory.$(PSUFFIX) : $(MEMORY) ../../common.h ../../param.h
$(CC) $(PFLAGS) -c $< -o $(@F)
blas_server.$(PSUFFIX) : $(BLAS_SERVER) ../../common.h ../../common_thread.h
$(CC) $(PFLAGS) -c $< -o $(@F)
blasL1thread.$(PSUFFIX) : blas_l1_thread.c ../../common.h ../../common_thread.h
$(CC) $(PFLAGS) -c $< -o $(@F)
cuda_init.$(PSUFFIX) : cuda_init.c
$(CUCC) $(COMMON_OPT) -I$(TOPDIR) $(CUFLAGS) -DCNAME=$(*F) -c $< -o $(@F)
c_abs.$(PSUFFIX) : abs.c
$(CC) $(PFLAGS) -c -UDOUBLE $< -o $(@F)
z_abs.$(PSUFFIX) : abs.c
$(CC) $(PFLAGS) -c -DDOUBLE $< -o $(@F)
x_abs.$(PSUFFIX) : abs.c
$(CC) $(PFLAGS) -c -DXDOUBLE $< -o $(@F)
slamch.$(PUFFIX) : lamch.c
$(CC) $(PFLAGS) -c -UDOUBLE $< -o $(@F)
dlamch.$(PUFFIX) : lamch.c
$(CC) $(PFLAGS) -c -DDOUBLE $< -o $(@F)
qlamch.$(PUFFIX) : lamch.c
$(CC) $(PFLAGS) -c -DXDOUBLE $< -o $(@F)
slamc3.$(PUFFIX) : lamc3.c
$(CC) $(PFLAGS) -c -UDOUBLE $< -o $(@F)
dlamc3.$(PUFFIX) : lamc3.c
$(CC) $(PFLAGS) -c -DDOUBLE $< -o $(@F)
qlamc3.$(PUFFIX) : lamc3.c
$(CC) $(PFLAGS) -c -DXDOUBLE $< -o $(@F)
divtable.$(PSUFFIX) : divtable.c
$(CC) $(PFLAGS) -c -UDOUBLE $< -o $(@F)
__builtin_stinit.$(PPSUFFIX) : $(ARCH)/builtin_stinit.S
$(CC) $(PFLAGS) -c -UDOUBLE $< -o $(@F)
addx.$(PSUFFIX) : $(ARCH)/addx.c
$(CC) $(PFLAGS) -c -DXDOUBLE -UCOMPLEX $< -o $(@F)
mulx.$(PSUFFIX) : $(ARCH)/mulx.c
$(CC) $(PFLAGS) -c -DXDOUBLE -UCOMPLEX $< -o $(@F)
info.$(SUFFIX) : info.c info.h ../../common.h ../../param.h
$(CC) $(CFLAGS) -c $< -o $(@F)
hpl : override CFLAGS += -DHPL
hpl_p : override CFLAGS += -DHPL
include $(TOPDIR)/Makefile.tail