2 TARGET = $(TARGET_CORE)
6 include $(TOPDIR)/Makefile.system
9 ifeq ($(C_COMPILER), CLANG)
10 override CFLAGS += -fno-integrated-as
15 ifeq ($(C_COMPILER), GCC)
16 # AVX2 support was added in 4.7.0
17 GCCVERSIONCHECK := $(GCCVERSIONGT4)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7)
18 ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
22 ifeq ($(C_COMPILER), CLANG)
23 # Any clang posing as gcc 4.2 should be new enough (3.4 or later)
24 GCCVERSIONCHECK := $(GCCVERSIONGT4)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ2)
25 ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
34 ifeq ($(TARGET_CORE), SAPPHIRERAPIDS)
35 override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
36 ifeq ($(GCCVERSIONGTEQ10), 1)
37 override CFLAGS += -march=sapphirerapids
39 override CFLAGS += -march=skylake-avx512 -mavx512f
41 ifeq ($(OSNAME), CYGWIN_NT)
42 override CFLAGS += -fno-asynchronous-unwind-tables
44 ifeq ($(OSNAME), WINNT)
45 ifeq ($(C_COMPILER), GCC)
46 override CFLAGS += -fno-asynchronous-unwind-tables
49 else ifeq ($(TARGET_CORE), COOPERLAKE)
50 override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
51 ifeq ($(GCCVERSIONGTEQ10), 1)
52 override CFLAGS += -march=cooperlake
54 override CFLAGS += -march=skylake-avx512 -mavx512f
56 ifeq ($(OSNAME), CYGWIN_NT)
57 override CFLAGS += -fno-asynchronous-unwind-tables
59 ifeq ($(OSNAME), WINNT)
60 ifeq ($(C_COMPILER), GCC)
61 override CFLAGS += -fno-asynchronous-unwind-tables
64 else ifeq ($(TARGET_CORE), SKYLAKEX)
65 override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) -march=skylake-avx512 -mavx512f
66 ifeq ($(OSNAME), CYGWIN_NT)
67 override CFLAGS += -fno-asynchronous-unwind-tables
69 ifeq ($(OSNAME), WINNT)
70 ifeq ($(C_COMPILER), GCC)
71 override CFLAGS += -fno-asynchronous-unwind-tables
74 else ifeq ($(TARGET_CORE), HASWELL)
75 override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(AVX2OPT)
76 else ifeq ($(TARGET_CORE), LOONGSON3R4)
77 override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(MSA_FLAGS)
79 override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
83 TSUFFIX = _$(TARGET_CORE)
88 ifeq ($(TARGET_CORE), LOONGSON3R4)
89 override CFLAGS += $(MSA_FLAGS)
93 -include $(KERNELDIR)/KERNEL.$(TARGET_CORE)
95 include $(KERNELDIR)/KERNEL
106 dgemm_kernel.$(SUFFIX) \
107 $(DGEMMINCOPYOBJ) $(DGEMMITCOPYOBJ) \
108 $(DGEMMONCOPYOBJ) $(DGEMMOTCOPYOBJ) \
109 dtrsm_kernel_LN.$(SUFFIX) dtrsm_kernel_LT.$(SUFFIX) \
110 dtrsm_kernel_RN.$(SUFFIX) dtrsm_kernel_RT.$(SUFFIX) \
111 daxpy_k.$(SUFFIX) dcopy_k.$(SUFFIX) ddot_k.$(SUFFIX) \
112 dger_k.$(SUFFIX) dscal_k.$(SUFFIX) idamax_k.$(SUFFIX) \
113 dgemv_n.$(SUFFIX) dgemv_t.$(SUFFIX) dgemm_beta.$(SUFFIX) \
114 dtrsm_iunucopy.$(SUFFIX) dtrsm_iunncopy.$(SUFFIX) \
115 dtrsm_ilnucopy.$(SUFFIX) dtrsm_ilnncopy.$(SUFFIX) \
116 dtrsm_iutucopy.$(SUFFIX) dtrsm_iutncopy.$(SUFFIX) \
117 dtrsm_iltucopy.$(SUFFIX) dtrsm_iltncopy.$(SUFFIX) \
118 dtrsm_ounucopy.$(SUFFIX) dtrsm_ounncopy.$(SUFFIX) \
119 dtrsm_olnucopy.$(SUFFIX) dtrsm_olnncopy.$(SUFFIX) \
120 dtrsm_outucopy.$(SUFFIX) dtrsm_outncopy.$(SUFFIX) \
121 dtrsm_oltucopy.$(SUFFIX) dtrsm_oltncopy.$(SUFFIX)
123 COMMONOBJS += lsame.$(SUFFIX) scabs1.$(SUFFIX) dcabs1.$(SUFFIX)
125 ifeq ($(DYNAMIC_ARCH), 1)
126 SBLASOBJS += setparam$(TSUFFIX).$(SUFFIX)
127 CCOMMON_OPT += -DTS=$(TSUFFIX)
130 KERNEL_INTERFACE = ../common_level1.h ../common_level2.h ../common_level3.h
131 ifneq ($(NO_LAPACK), 1)
132 KERNEL_INTERFACE += ../common_lapack.h
136 COMMONOBJS += cpuid.$(SUFFIX)
140 COMMONOBJS += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
144 COMMONOBJS += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
149 scabs1.$(SUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
150 $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
152 dcabs1.$(SUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
153 $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
155 qcabs1.$(SUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
156 $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
158 qconjg.$(SUFFIX): $(KERNELDIR)/qconjg.S
159 $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
161 lsame.$(SUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
162 $(CC) -c $(CFLAGS) -DF_INTERFACE $< -o $(@F)
164 setparam$(TSUFFIX).$(SUFFIX): setparam$(TSUFFIX).c kernel$(TSUFFIX).h
165 ifeq ($(USE_GEMM3M), 1)
166 $(CC) -c $(CFLAGS) -DUSE_GEMM3M $< -o $@
168 $(CC) -c $(CFLAGS) $< -o $@
171 setparam$(TSUFFIX).c : setparam-ref.c
172 sed 's/TS/$(TSUFFIX)/g' $< > $(@F)
174 kernel$(TSUFFIX).h : $(KERNEL_INTERFACE)
175 sed 's/\ *(/$(TSUFFIX)(/g' $^ > $(@F)
178 cpuid.$(SUFFIX): $(KERNELDIR)/cpuid.S
179 $(CC) -c $(CFLAGS) $< -o $(@F)
181 scabs1.$(PSUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
182 $(CC) -c $(PFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
184 dcabs1.$(PSUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
185 $(CC) -c $(PFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
187 qcabs1.$(PSUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
188 $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
190 qconjg.$(PSUFFIX): $(KERNELDIR)/qconjg.S
191 $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
193 lsame.$(PSUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
194 $(CC) -c $(PFLAGS) -DF_INTERFACE $< -o $(@F)
196 cpuid.$(PSUFFIX): $(KERNELDIR)/cpuid.S
197 $(CC) -c $(PFLAGS) $< -o $(@F)
201 @rm -f setparam_*.c kernel_*.h setparam.h kernel.h
205 include $(TOPDIR)/Makefile.tail