blob: 9648bab86802191a71e72643493740f7d7837ec6 [file] [log] [blame]
Brian Silverman7bda6212018-08-05 11:42:11 -07001licenses(["notice"])
Brian Silvermand3ad1652018-02-18 22:16:29 -05002
Brian Silverman7bda6212018-08-05 11:42:11 -07003load("@//tools/build_rules:fortran.bzl", "f2c_copts")
Brian Silvermand3ad1652018-02-18 22:16:29 -05004
5genrule(
Brian Silverman7bda6212018-08-05 11:42:11 -07006 name = "create_sysdep1",
7 srcs = ["F2CLIBS/libf2c/sysdep1.h0"],
8 outs = ["extra_includes/sysdep1.h"],
9 cmd = "cp $< $@",
Brian Silvermand3ad1652018-02-18 22:16:29 -050010)
11
Brian Silverman7bda6212018-08-05 11:42:11 -070012_xerbla_patch = """
Brian Silvermand3ad1652018-02-18 22:16:29 -050013--- xerbla.c 2018-02-19 19:58:03.685420156 -0500
14+++ xerbla.c 2018-02-19 19:59:02.993259128 -0500
15@@ -55,7 +55,7 @@ static integer c__1 = 1;
16 /* .. */
17 /* .. Executable Statements .. */
18
19- printf("** On entry to %6s, parameter number %2i had an illegal value\\n",
20+ printf("** On entry to %6s, parameter number %2li had an illegal value\\n",
21\t\tsrname, *info);
22
23
Brian Silverman7bda6212018-08-05 11:42:11 -070024"""
25
Brian Silvermand3ad1652018-02-18 22:16:29 -050026genrule(
Brian Silverman7bda6212018-08-05 11:42:11 -070027 name = "patch_xerbla",
28 srcs = ["SRC/xerbla.c"],
29 outs = ["patched_xerbla.c"],
30 cmd = "\n".join([
31 "cp $< $@",
32 "$(location @patch) $@ - <<END",
33 _xerbla_patch,
34 "END",
35 ]),
36 tools = ["@patch"],
Brian Silvermand3ad1652018-02-18 22:16:29 -050037)
38
Brian Silverman7bda6212018-08-05 11:42:11 -070039_err_patch = """
Brian Silvermand3ad1652018-02-18 22:16:29 -050040--- err.c 2018-02-19 20:06:40.532033141 -0500
41+++ err.c 2018-02-19 20:10:25.907439219 -0500
42@@ -164,8 +164,10 @@ f__fatal(int n, const char *s)
43 \tif (f__curunit) {
44 \t\tfprintf(stderr,"apparent state: unit %d ",
45 \t\t\t(int)(f__curunit-f__units));
46-\t\tfprintf(stderr, f__curunit->ufnm ? "named %s\\n" : "(unnamed)\\n",
47-\t\t\tf__curunit->ufnm);
48+\t\tif (f__curunit->ufnm)
49+\t\t\tfprintf(stderr, "named %s\\n", f__curunit->ufnm);
50+\t\telse
51+\t\t\tfprintf(stderr, "(unnamed)\\n");
52 \t\t}
53 \telse
54 \t\tfprintf(stderr,"apparent state: internal I/O\\n");
Brian Silverman7bda6212018-08-05 11:42:11 -070055"""
56
Brian Silvermand3ad1652018-02-18 22:16:29 -050057genrule(
Brian Silverman7bda6212018-08-05 11:42:11 -070058 name = "patch_err",
59 srcs = ["F2CLIBS/libf2c/err.c"],
60 outs = ["patched_err.c"],
61 cmd = "\n".join([
62 "cp $< $@",
63 "$(location @patch) $@ - <<END",
64 _err_patch,
65 "END",
66 ]),
67 tools = ["@patch"],
Brian Silvermand3ad1652018-02-18 22:16:29 -050068)
69
70cc_library(
Brian Silverman7bda6212018-08-05 11:42:11 -070071 name = "clapack",
72 srcs = glob(
73 include = [
74 "SRC/*.c",
75 "BLAS/SRC/*.c",
76 ],
77 exclude = [
78 # These are duplicated in SRC (with the ones in SRC a bit more cleaned up).
79 "BLAS/SRC/xerbla.c",
80 "BLAS/SRC/xerbla_array.c",
Brian Silvermand3ad1652018-02-18 22:16:29 -050081
Brian Silverman7bda6212018-08-05 11:42:11 -070082 # We need to use a patched version of this.
83 "SRC/xerbla.c",
Brian Silvermand3ad1652018-02-18 22:16:29 -050084
Brian Silverman7bda6212018-08-05 11:42:11 -070085 # Files requiring XBLAS (extended precision), which we don't have.
86 "SRC/sgesvxx.c",
87 "SRC/sgerfsx.c",
88 "SRC/sla_gerfsx_extended.c",
89 "SRC/sla_geamv.c",
90 "SRC/sla_gercond.c",
91 "SRC/sla_gerpvgrw.c",
92 "SRC/ssysvxx.c",
93 "SRC/ssyrfsx.c",
94 "SRC/sla_syrfsx_extended.c",
95 "SRC/sla_syamv.c",
96 "SRC/sla_syrcond.c",
97 "SRC/sla_syrpvgrw.c",
98 "SRC/sposvxx.c",
99 "SRC/sporfsx.c",
100 "SRC/sla_porfsx_extended.c",
101 "SRC/sla_porcond.c",
102 "SRC/sla_porpvgrw.c",
103 "SRC/sgbsvxx.c",
104 "SRC/sgbrfsx.c",
105 "SRC/sla_gbrfsx_extended.c",
106 "SRC/sla_gbamv.c",
107 "SRC/sla_gbrcond.c",
108 "SRC/sla_gbrpvgrw.c",
109 "SRC/sla_lin_berr.c",
110 "SRC/slarscl2.c",
111 "SRC/slascl2.c",
112 "SRC/sla_wwaddw.c",
113 "SRC/cgesvxx.c",
114 "SRC/cgerfsx.c",
115 "SRC/cla_gerfsx_extended.c",
116 "SRC/cla_geamv.c",
117 "SRC/cla_gercond_c.c",
118 "SRC/cla_gercond_x.c",
119 "SRC/cla_gerpvgrw.c",
120 "SRC/csysvxx.c",
121 "SRC/csyrfsx.c",
122 "SRC/cla_syrfsx_extended.c",
123 "SRC/cla_syamv.c",
124 "SRC/cla_syrcond_c.c",
125 "SRC/cla_syrcond_x.c",
126 "SRC/cla_syrpvgrw.c",
127 "SRC/cposvxx.c",
128 "SRC/cporfsx.c",
129 "SRC/cla_porfsx_extended.c",
130 "SRC/cla_porcond_c.c",
131 "SRC/cla_porcond_x.c",
132 "SRC/cla_porpvgrw.c",
133 "SRC/cgbsvxx.c",
134 "SRC/cgbrfsx.c",
135 "SRC/cla_gbrfsx_extended.c",
136 "SRC/cla_gbamv.c",
137 "SRC/cla_gbrcond_c.c",
138 "SRC/cla_gbrcond_x.c",
139 "SRC/cla_gbrpvgrw.c",
140 "SRC/chesvxx.c",
141 "SRC/cherfsx.c",
142 "SRC/cla_herfsx_extended.c",
143 "SRC/cla_heamv.c",
144 "SRC/cla_hercond_c.c",
145 "SRC/cla_hercond_x.c",
146 "SRC/cla_herpvgrw.c",
147 "SRC/cla_lin_berr.c",
148 "SRC/clarscl2.c",
149 "SRC/clascl2.c",
150 "SRC/cla_wwaddw.c",
151 "SRC/dgesvxx.c",
152 "SRC/dgerfsx.c",
153 "SRC/dla_gerfsx_extended.c",
154 "SRC/dla_geamv.c",
155 "SRC/dla_gercond.c",
156 "SRC/dla_gerpvgrw.c",
157 "SRC/dsysvxx.c",
158 "SRC/dsyrfsx.c",
159 "SRC/dla_syrfsx_extended.c",
160 "SRC/dla_syamv.c",
161 "SRC/dla_syrcond.c",
162 "SRC/dla_syrpvgrw.c",
163 "SRC/dposvxx.c",
164 "SRC/dporfsx.c",
165 "SRC/dla_porfsx_extended.c",
166 "SRC/dla_porcond.c",
167 "SRC/dla_porpvgrw.c",
168 "SRC/dgbsvxx.c",
169 "SRC/dgbrfsx.c",
170 "SRC/dla_gbrfsx_extended.c",
171 "SRC/dla_gbamv.c",
172 "SRC/dla_gbrcond.c",
173 "SRC/dla_gbrpvgrw.c",
174 "SRC/dla_lin_berr.c",
175 "SRC/dlarscl2.c",
176 "SRC/dlascl2.c",
177 "SRC/dla_wwaddw.c",
178 "SRC/zgesvxx.c",
179 "SRC/zgerfsx.c",
180 "SRC/zla_gerfsx_extended.c",
181 "SRC/zla_geamv.c",
182 "SRC/zla_gercond_c.c",
183 "SRC/zla_gercond_x.c",
184 "SRC/zla_gerpvgrw.c",
185 "SRC/zsysvxx.c",
186 "SRC/zsyrfsx.c",
187 "SRC/zla_syrfsx_extended.c",
188 "SRC/zla_syamv.c",
189 "SRC/zla_syrcond_c.c",
190 "SRC/zla_syrcond_x.c",
191 "SRC/zla_syrpvgrw.c",
192 "SRC/zposvxx.c",
193 "SRC/zporfsx.c",
194 "SRC/zla_porfsx_extended.c",
195 "SRC/zla_porcond_c.c",
196 "SRC/zla_porcond_x.c",
197 "SRC/zla_porpvgrw.c",
198 "SRC/zgbsvxx.c",
199 "SRC/zgbrfsx.c",
200 "SRC/zla_gbrfsx_extended.c",
201 "SRC/zla_gbamv.c",
202 "SRC/zla_gbrcond_c.c",
203 "SRC/zla_gbrcond_x.c",
204 "SRC/zla_gbrpvgrw.c",
205 "SRC/zhesvxx.c",
206 "SRC/zherfsx.c",
207 "SRC/zla_herfsx_extended.c",
208 "SRC/zla_heamv.c",
209 "SRC/zla_hercond_c.c",
210 "SRC/zla_hercond_x.c",
211 "SRC/zla_herpvgrw.c",
212 "SRC/zla_lin_berr.c",
213 "SRC/zlarscl2.c",
214 "SRC/zlascl2.c",
215 "SRC/zla_wwaddw.c",
216 ],
217 ) + [
218 "INSTALL/dlamch.c",
219 "INSTALL/slamch.c",
220 "patched_xerbla.c",
221 "patched_err.c",
222 "F2CLIBS/libf2c/s_cat.c",
223 "F2CLIBS/libf2c/d_lg10.c",
224 "F2CLIBS/libf2c/d_sign.c",
225 "F2CLIBS/libf2c/i_dnnt.c",
226 "F2CLIBS/libf2c/pow_di.c",
227 "F2CLIBS/libf2c/s_copy.c",
228 "F2CLIBS/libf2c/s_cmp.c",
229 "F2CLIBS/libf2c/i_nint.c",
230 "F2CLIBS/libf2c/f77_aloc.c",
231 "F2CLIBS/libf2c/exit_.c",
232 "F2CLIBS/libf2c/r_cnjg.c",
233 "F2CLIBS/libf2c/c_abs.c",
234 "F2CLIBS/libf2c/r_imag.c",
235 "F2CLIBS/libf2c/c_div.c",
236 "F2CLIBS/libf2c/c_exp.c",
237 "F2CLIBS/libf2c/d_imag.c",
238 "F2CLIBS/libf2c/r_sign.c",
239 "F2CLIBS/libf2c/d_cnjg.c",
240 "F2CLIBS/libf2c/z_abs.c",
241 "F2CLIBS/libf2c/z_div.c",
242 "F2CLIBS/libf2c/z_exp.c",
243 "F2CLIBS/libf2c/z_sqrt.c",
244 "F2CLIBS/libf2c/pow_dd.c",
245 "F2CLIBS/libf2c/pow_ri.c",
246 "F2CLIBS/libf2c/pow_ci.c",
247 "F2CLIBS/libf2c/pow_ii.c",
248 "F2CLIBS/libf2c/pow_zi.c",
249 "F2CLIBS/libf2c/c_sqrt.c",
250 "F2CLIBS/libf2c/r_lg10.c",
251 "F2CLIBS/libf2c/i_len.c",
252 "F2CLIBS/libf2c/cabs.c",
253 "F2CLIBS/libf2c/sig_die.c",
254 "F2CLIBS/libf2c/close.c",
255 "F2CLIBS/libf2c/open.c",
256 "F2CLIBS/libf2c/endfile.c",
257 "F2CLIBS/libf2c/util.c",
258 "F2CLIBS/libf2c/iio.c",
259 "F2CLIBS/libf2c/fmt.c",
260 "F2CLIBS/libf2c/rdfmt.c",
261 "F2CLIBS/libf2c/wrtfmt.c",
262 #'F2CLIBS/libf2c/ctype.c',
263 "F2CLIBS/libf2c/wref.c",
264 "F2CLIBS/libf2c/fmtlib.c",
265 "F2CLIBS/libf2c/lread.c",
266 "F2CLIBS/libf2c/rsfe.c",
267 "F2CLIBS/libf2c/sfe.c",
268 "F2CLIBS/libf2c/dolio.c",
269 "F2CLIBS/libf2c/wsfe.c",
270 "extra_includes/sysdep1.h",
271 ],
272 hdrs = glob(
273 [
274 "INCLUDE/*.h",
275 "F2CLIBS/libf2c/*.h",
276 ],
277 exclude = ["F2CLIBS/libf2c/ctype.h"],
278 ),
279 copts = f2c_copts + [
280 "-Wno-sign-compare",
281 "-Wno-cast-qual",
282 "-Wno-cast-align",
283 "-Wno-self-assign",
Brian Silvermand3ad1652018-02-18 22:16:29 -0500284
Brian Silverman7bda6212018-08-05 11:42:11 -0700285 # Some files don't #include system headers when they should. sysdep1.h
286 # messes with feature test macros, so it always has to come first.
287 "-include",
288 "sysdep1.h",
289 "-include",
290 "stdio.h",
Brian Silvermand3ad1652018-02-18 22:16:29 -0500291
Brian Silverman7bda6212018-08-05 11:42:11 -0700292 # Don't mangle the names of all the BLAS symbols, because slicot needs to
293 # call them directly.
294 "-DNO_BLAS_WRAP",
295 ],
296 includes = [
297 "F2CLIBS/libf2c",
298 "INCLUDE",
299 "extra_includes",
300 ],
301 visibility = ["//visibility:public"],
Brian Silvermand3ad1652018-02-18 22:16:29 -0500302)