Add CPUID identification of Intel Ice Lake
[platform/upstream/openblas.git] / interface / CMakeLists.txt
1
2 include_directories(${PROJECT_SOURCE_DIR})
3 include_directories(${PROJECT_BINARY_DIR})
4
5
6 set(BLAS1_SOURCES
7   copy.c
8   nrm2.c
9 )
10
11 set(BLAS1_REAL_ONLY_SOURCES
12   rotm.c rotmg.c # N.B. these do not have complex counterparts
13   rot.c
14   asum.c
15   sum.c
16 )
17
18 # these will have 'z' prepended for the complex version
19 set(BLAS1_MANGLED_SOURCES
20   axpy.c swap.c
21   scal.c
22   dot.c
23   rotg.c
24   axpby.c
25 )
26
27 # TODO: USE_NETLIB_GEMV should switch gemv.c to netlib/*gemv.f
28 # these all have 'z' sources for complex versions
29 set(BLAS2_SOURCES
30   gemv.c ger.c
31   trsv.c trmv.c symv.c
32   syr.c syr2.c gbmv.c
33   sbmv.c spmv.c
34   spr.c spr2.c
35   tbsv.c tbmv.c
36   tpsv.c tpmv.c
37 )
38
39 set(BLAS2_COMPLEX_ONLY_MANGLED_SOURCES
40   hemv.c hbmv.c
41   her.c her2.c
42   hpmv.c hpr.c
43   hpr2.c
44 )
45
46 # these do not have separate 'z' sources
47 set(BLAS3_SOURCES
48   gemm.c symm.c
49   trsm.c syrk.c syr2k.c
50 )
51
52 set(BLAS3_MANGLED_SOURCES
53   omatcopy.c imatcopy.c
54   geadd.c
55 )
56
57 # generate the BLAS objs once with and once without cblas
58 set (CBLAS_FLAGS "")
59
60 if (NOT DEFINED NO_FBLAS)
61   list(APPEND CBLAS_FLAGS 0)
62 endif ()
63
64 if (NOT DEFINED NO_CBLAS)
65   list(APPEND CBLAS_FLAGS 1)
66 endif ()
67
68 foreach (CBLAS_FLAG ${CBLAS_FLAGS})
69
70   # TODO: don't compile complex sources with cblas for now, the naming schemes are all different and they will have to be handled separately from SINGLE/DOUBLE
71   set(DISABLE_COMPLEX 0)
72   set(MANGLE_COMPLEX 3)
73   if (CBLAS_FLAG EQUAL 1)
74 #    set(DISABLE_COMPLEX 1)
75 #    set(MANGLE_COMPLEX 1)
76   endif ()
77   GenerateNamedObjects("${BLAS1_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${DISABLE_COMPLEX})
78   GenerateNamedObjects("${BLAS1_REAL_ONLY_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false 1)
79   GenerateNamedObjects("${BLAS1_MANGLED_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${MANGLE_COMPLEX})
80   GenerateNamedObjects("${BLAS2_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${MANGLE_COMPLEX})
81   GenerateNamedObjects("${BLAS2_COMPLEX_ONLY_MANGLED_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false 4)
82   GenerateNamedObjects("${BLAS3_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${DISABLE_COMPLEX})
83   GenerateNamedObjects("${BLAS3_MANGLED_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${MANGLE_COMPLEX})
84
85   #sdsdot, dsdot
86   GenerateNamedObjects("sdsdot.c" "" "sdsdot" ${CBLAS_FLAG} "" "" true "SINGLE")
87   GenerateNamedObjects("dsdot.c" "" "dsdot" ${CBLAS_FLAG} "" "" true "SINGLE")
88
89   # trmm is trsm with a compiler flag set
90   GenerateNamedObjects("trsm.c" "TRMM" "trmm" ${CBLAS_FLAG})
91
92   # max and imax are compiled 4 times
93   GenerateNamedObjects("max.c" "" "" ${CBLAS_FLAG})
94   GenerateNamedObjects("max.c" "USE_ABS" "amax" ${CBLAS_FLAG})
95   GenerateNamedObjects("max.c" "USE_ABS;USE_MIN" "amin" ${CBLAS_FLAG})
96   GenerateNamedObjects("max.c" "USE_MIN" "min" ${CBLAS_FLAG})
97
98   GenerateNamedObjects("imax.c" "" "i*max" ${CBLAS_FLAG})
99   GenerateNamedObjects("imax.c" "USE_ABS" "i*amax" ${CBLAS_FLAG})
100   GenerateNamedObjects("imax.c" "USE_ABS;USE_MIN" "i*amin" ${CBLAS_FLAG})
101   GenerateNamedObjects("imax.c" "USE_MIN" "i*min" ${CBLAS_FLAG})
102
103
104 # complex-specific sources
105 foreach (float_type ${FLOAT_TYPES})
106
107   if (${float_type} STREQUAL "COMPLEX" OR ${float_type} STREQUAL "ZCOMPLEX")
108     GenerateNamedObjects("zger.c" "" "geru" ${CBLAS_FLAG} "" "" false ${float_type})
109     GenerateNamedObjects("zger.c" "CONJ" "gerc" ${CBLAS_FLAG} "" "" false ${float_type})
110     GenerateNamedObjects("zdot.c" "CONJ" "dotc" ${CBLAS_FLAG} "" "" false ${float_type})
111     GenerateNamedObjects("zdot.c" "" "dotu" ${CBLAS_FLAG} "" "" false ${float_type})
112
113     GenerateNamedObjects("symm.c" "HEMM" "hemm" ${CBLAS_FLAG} "" "" false ${float_type})
114     GenerateNamedObjects("syrk.c" "HEMM" "herk" ${CBLAS_FLAG} "" "" false ${float_type})
115     GenerateNamedObjects("syr2k.c" "HEMM" "her2k" ${CBLAS_FLAG} "" "" false ${float_type})
116
117     if (USE_GEMM3M)
118       GenerateNamedObjects("gemm.c" "GEMM3M" "gemm3m" false "" "" false ${float_type})
119     endif()
120   endif ()
121   if (${float_type} STREQUAL "COMPLEX")
122     GenerateNamedObjects("zscal.c" "SSCAL" "sscal" ${CBLAS_FLAG} "" "" false "COMPLEX")
123     GenerateNamedObjects("nrm2.c" "" "scnrm2" ${CBLAS_FLAG} "" "" true "COMPLEX")
124     GenerateNamedObjects("zrot.c" "" "csrot" ${CBLAS_FLAG} "" "" true "COMPLEX")
125     GenerateNamedObjects("max.c" "USE_ABS;USE_MIN" "scamin" ${CBLAS_FLAG} "" "" true "COMPLEX")
126     GenerateNamedObjects("max.c" "USE_ABS" "scamax" ${CBLAS_FLAG} "" "" true "COMPLEX")
127     GenerateNamedObjects("asum.c" "" "scasum" ${CBLAS_FLAG} "" "" true "COMPLEX")
128     GenerateNamedObjects("sum.c" "" "scsum" ${CBLAS_FLAG} "" "" true "COMPLEX")
129   endif ()
130   if (${float_type} STREQUAL "ZCOMPLEX")
131     GenerateNamedObjects("zscal.c" "SSCAL" "dscal" ${CBLAS_FLAG} "" "" false "ZCOMPLEX")
132     GenerateNamedObjects("nrm2.c" "" "dznrm2" ${CBLAS_FLAG} "" "" true "ZCOMPLEX")
133     GenerateNamedObjects("zrot.c" "" "zdrot" ${CBLAS_FLAG} "" "" true "ZCOMPLEX")
134     GenerateNamedObjects("max.c" "USE_ABS;USE_MIN" "dzamin" ${CBLAS_FLAG} "" "" true "ZCOMPLEX")
135     GenerateNamedObjects("max.c" "USE_ABS" "dzamax" ${CBLAS_FLAG} "" "" true "ZCOMPLEX")
136     GenerateNamedObjects("asum.c" "" "dzasum" ${CBLAS_FLAG} "" "" true "ZCOMPLEX")
137     GenerateNamedObjects("sum.c" "" "dzsum" ${CBLAS_FLAG} "" "" true "ZCOMPLEX")
138   endif ()
139 endforeach ()
140
141 endforeach ()
142
143 #Special functions for CBLAS
144 if (NOT DEFINED NO_CBLAS)
145   foreach (float_type ${FLOAT_TYPES})
146   if (${float_type} STREQUAL "COMPLEX" OR ${float_type} STREQUAL "ZCOMPLEX")
147     #cblas_dotc_sub cblas_dotu_sub
148     GenerateNamedObjects("zdot.c" "FORCE_USE_STACK" "dotu_sub" 1 "" "" false ${float_type})
149     GenerateNamedObjects("zdot.c" "FORCE_USE_STACK;CONJ" "dotc_sub" 1 "" "" false ${float_type})
150   endif()
151   endforeach ()
152 endif()
153
154 if (NOT DEFINED NO_LAPACK)
155   set(LAPACK_SOURCES
156     lapack/gesv.c
157   )
158
159   # prepend z for complex versions
160   set(LAPACK_MANGLED_SOURCES
161     lapack/getrf.c lapack/getrs.c lapack/potrf.c lapack/getf2.c
162     lapack/potf2.c lapack/laswp.c lapack/lauu2.c
163     lapack/lauum.c lapack/trti2.c lapack/trtri.c
164   )
165
166   GenerateNamedObjects("${LAPACK_SOURCES}")
167   GenerateNamedObjects("${LAPACK_MANGLED_SOURCES}" "" "" 0 "" "" 0 3)
168 endif ()
169
170 add_library(interface OBJECT ${OPENBLAS_SRC})