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