Merge branch 'develop' of https://github.com/quickwritereader/OpenBLAS into develop
[platform/upstream/openblas.git] / kernel / Makefile
1 ifdef TARGET_CORE
2 TARGET = $(TARGET_CORE)
3 endif
4
5 TOPDIR  = ..
6 include $(TOPDIR)/Makefile.system
7
8 AVX2OPT = 
9 ifeq ($(C_COMPILER), GCC)
10 # AVX2 support was added in 4.7.0
11   GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
12   GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
13   ifeq ($(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7), 11)
14    AVX2OPT = -mavx2
15   endif
16 endif
17 ifeq ($(C_COMPILER), CLANG)
18 # Any clang posing as gcc 4.2 should be new enough (3.4 or later)
19   GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
20   GCCMINORVERSIONGTEQ2 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 2)
21   ifeq ($(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ2), 11)
22    AVX2OPT = -mavx2
23   endif
24 endif
25 ifdef NO_AVX2
26  AVX2OPT=
27 endif
28
29 ifdef TARGET_CORE
30 ifeq ($(TARGET_CORE), SKYLAKEX)
31  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) -march=skylake-avx512
32  ifeq ($(OSNAME), CYGWIN_NT)
33   override CFLAGS += -fno-asynchronous-unwind-tables
34  endif
35  ifeq ($(OSNAME), WINNT)
36   ifeq ($(C_COMPILER), GCC)
37    override CFLAGS += -fno-asynchronous-unwind-tables
38   endif
39  endif
40 else ifeq ($(TARGET_CORE), HASWELL)
41  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(AVX2OPT)
42 else
43  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
44 endif
45 BUILD_KERNEL = 1
46 KDIR =
47 TSUFFIX = _$(TARGET_CORE)
48 else
49 TARGET_CORE = $(CORE)
50 KDIR =
51 TSUFFIX =
52 endif
53
54 -include $(KERNELDIR)/KERNEL.$(TARGET_CORE)
55
56 include $(KERNELDIR)/KERNEL
57
58 include Makefile.L1
59
60 include Makefile.L2
61
62 include Makefile.L3
63
64 include Makefile.LA
65
66 HPLOBJS = \
67         dgemm_kernel.$(SUFFIX) \
68         $(DGEMMINCOPYOBJ) $(DGEMMITCOPYOBJ) \
69         $(DGEMMONCOPYOBJ) $(DGEMMOTCOPYOBJ) \
70         dtrsm_kernel_LN.$(SUFFIX) dtrsm_kernel_LT.$(SUFFIX) \
71         dtrsm_kernel_RN.$(SUFFIX) dtrsm_kernel_RT.$(SUFFIX) \
72         daxpy_k.$(SUFFIX) dcopy_k.$(SUFFIX) ddot_k.$(SUFFIX) \
73         dger_k.$(SUFFIX)  dscal_k.$(SUFFIX) idamax_k.$(SUFFIX) \
74         dgemv_n.$(SUFFIX) dgemv_t.$(SUFFIX) dgemm_beta.$(SUFFIX) \
75         dtrsm_iunucopy.$(SUFFIX) dtrsm_iunncopy.$(SUFFIX) \
76         dtrsm_ilnucopy.$(SUFFIX) dtrsm_ilnncopy.$(SUFFIX) \
77         dtrsm_iutucopy.$(SUFFIX) dtrsm_iutncopy.$(SUFFIX) \
78         dtrsm_iltucopy.$(SUFFIX) dtrsm_iltncopy.$(SUFFIX) \
79         dtrsm_ounucopy.$(SUFFIX) dtrsm_ounncopy.$(SUFFIX) \
80         dtrsm_olnucopy.$(SUFFIX) dtrsm_olnncopy.$(SUFFIX) \
81         dtrsm_outucopy.$(SUFFIX) dtrsm_outncopy.$(SUFFIX) \
82         dtrsm_oltucopy.$(SUFFIX) dtrsm_oltncopy.$(SUFFIX)
83
84 COMMONOBJS      += lsame.$(SUFFIX) scabs1.$(SUFFIX) dcabs1.$(SUFFIX)
85
86 ifeq ($(DYNAMIC_ARCH), 1)
87 SBLASOBJS       += setparam$(TSUFFIX).$(SUFFIX)
88 CCOMMON_OPT     += -DTS=$(TSUFFIX)
89 endif
90
91 KERNEL_INTERFACE = ../common_level1.h ../common_level2.h ../common_level3.h
92 ifneq ($(NO_LAPACK), 1)
93 KERNEL_INTERFACE += ../common_lapack.h
94 endif
95
96 ifeq ($(ARCH), x86)
97 COMMONOBJS      += cpuid.$(SUFFIX)
98 endif
99
100 ifdef EXPRECISION
101 COMMONOBJS      += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
102 endif
103
104 ifdef QUAD_PRECISION
105 COMMONOBJS      += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
106 endif
107
108 all : libs
109
110 scabs1.$(SUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
111         $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
112
113 dcabs1.$(SUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
114         $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
115
116 qcabs1.$(SUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
117         $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
118
119 qconjg.$(SUFFIX): $(KERNELDIR)/qconjg.S
120         $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
121
122 lsame.$(SUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
123         $(CC) -c $(CFLAGS) -DF_INTERFACE $< -o $(@F)
124
125 setparam$(TSUFFIX).$(SUFFIX): setparam$(TSUFFIX).c kernel$(TSUFFIX).h
126 ifeq ($(USE_GEMM3M), 1)
127         $(CC) -c $(CFLAGS) -DUSE_GEMM3M $< -o $@
128 else
129         $(CC) -c $(CFLAGS) $< -o $@
130 endif
131
132 setparam$(TSUFFIX).c : setparam-ref.c
133         sed 's/TS/$(TSUFFIX)/g' $< > $(@F)
134
135 kernel$(TSUFFIX).h : $(KERNEL_INTERFACE)
136         sed 's/\ *(/$(TSUFFIX)(/g' $^ > $(@F)
137
138
139 cpuid.$(SUFFIX): $(KERNELDIR)/cpuid.S
140         $(CC) -c $(CFLAGS) $< -o $(@F)
141
142 scabs1.$(PSUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
143         $(CC) -c $(PFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
144
145 dcabs1.$(PSUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
146         $(CC) -c $(PFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
147
148 qcabs1.$(PSUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
149         $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
150
151 qconjg.$(PSUFFIX): $(KERNELDIR)/qconjg.S
152         $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
153
154 lsame.$(PSUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
155         $(CC) -c $(PFLAGS) -DF_INTERFACE $< -o $(@F)
156
157 cpuid.$(PSUFFIX): $(KERNELDIR)/cpuid.S
158         $(CC) -c $(PFLAGS) $< -o $(@F)
159
160 #ifdef DYNAMIC_ARCH
161 clean ::
162         @rm -f setparam_*.c kernel_*.h setparam.h kernel.h
163
164 #endif
165
166 include $(TOPDIR)/Makefile.tail