1load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") 2load("@pytorch//third_party:sleef.bzl", "sleef_cc_library") 3 4SLEEF_COPTS = [ 5 "-DHAVE_MALLOC_USABLE_SIZE=1", 6 "-DHAVE_MMAP=1", 7 "-DHAVE_SHM_OPEN=1", 8 "-DHAVE_SHM_UNLINK=1", 9 "-DIDEEP_USE_MKL", 10 "-DDNNL_CPU_RUNTIME=TBB", 11 "-DONNX_ML=1", 12 "-DONNX_NAMESPACE=onnx", 13 "-D_FILE_OFFSET_BITS=64", 14 "-ffp-contract=off", 15 "-fno-math-errno", 16 "-fno-trapping-math", 17 "-DCAFFE2_USE_GLOO", 18 "-std=gnu99", 19] 20 21SLEEF_COMMON_TARGET_COPTS = [ 22 "-DSLEEF_STATIC_LIBS=1", 23 "-DENABLE_ALIAS=1", 24] 25 26SLEEF_PRIVATE_HEADERS = glob([ 27 "build/include/*.h", 28 "src/arch/*.h", 29 "src/common/*.h", 30 "src/libm/*.h", 31 "src/libm/include/*.h", 32]) 33 34SLEEF_PUBLIC_HEADERS = [ 35 ":sleef_h", 36] 37 38SLEEF_PRIVATE_INCLUDES = [ 39 "-Iexternal/sleef/src/arch", 40 "-Iexternal/sleef/src/common", 41 "-Iexternal/sleef/src/libm", 42] 43 44SLEEF_PUBLIC_INCLUDES = [ 45 "build/include", 46] 47 48SLEEF_VISIBILITY = [ 49 "//visibility:public", 50] 51 52cc_binary( 53 name = "mkalias", 54 srcs = [ 55 "src/libm/funcproto.h", 56 "src/libm/mkalias.c", 57 ], 58) 59 60genrule( 61 name = "alias_avx512f_h", 62 outs = ["alias_avx512f.h"], 63 cmd = "{ " + "; ".join([ 64 "$(location :mkalias) -16 __m512 __m512i e avx512f", 65 "$(location :mkalias) 8 __m512d __m256i e avx512f", 66 ]) + "; } > $@", 67 tools = [":mkalias"], 68) 69 70cc_binary( 71 name = "mkdisp", 72 srcs = [ 73 "src/libm/funcproto.h", 74 "src/libm/mkdisp.c", 75 ], 76 copts = SLEEF_COPTS, 77) 78 79genrule( 80 name = "dispavx_c", 81 srcs = ["src/libm/dispavx.c.org"], 82 outs = ["dispavx.c"], 83 cmd = "{ cat $(location src/libm/dispavx.c.org); $(location :mkdisp) 4 8 __m256d __m256 __m128i avx fma4 avx2; } > $@", 84 tools = [":mkdisp"], 85) 86 87genrule( 88 name = "dispsse_c", 89 srcs = ["src/libm/dispsse.c.org"], 90 outs = ["dispsse.c"], 91 cmd = "{ cat $(location src/libm/dispsse.c.org); $(location :mkdisp) 2 4 __m128d __m128 __m128i sse2 sse4 avx2128; } > $@", 92 tools = [":mkdisp"], 93) 94 95cc_binary( 96 name = "mkrename", 97 srcs = [ 98 "src/libm/funcproto.h", 99 "src/libm/mkrename.c", 100 ], 101) 102 103genrule( 104 name = "renameavx_h", 105 outs = ["renameavx.h"], 106 cmd = "$(location :mkrename) cinz_ 4 8 avx > $@", 107 tools = [":mkrename"], 108) 109 110genrule( 111 name = "renameavx2_h", 112 outs = ["renameavx2.h"], 113 cmd = "$(location :mkrename) finz_ 4 8 avx2 > $@", 114 tools = [":mkrename"], 115) 116 117genrule( 118 name = "renameavx2128_h", 119 outs = ["renameavx2128.h"], 120 cmd = "$(location :mkrename) finz_ 2 4 avx2128 > $@", 121 tools = [":mkrename"], 122) 123 124genrule( 125 name = "renameavx512f_h", 126 outs = ["renameavx512f.h"], 127 cmd = "$(location :mkrename) finz_ 8 16 avx512f > $@", 128 tools = [":mkrename"], 129) 130 131genrule( 132 name = "renameavx512fnofma_h", 133 outs = ["renameavx512fnofma.h"], 134 cmd = "$(location :mkrename) cinz_ 8 16 avx512fnofma > $@", 135 tools = [":mkrename"], 136) 137 138genrule( 139 name = "renamefma4_h", 140 outs = ["renamefma4.h"], 141 cmd = "$(location :mkrename) finz_ 4 8 fma4 > $@", 142 tools = [":mkrename"], 143) 144 145genrule( 146 name = "renamepurec_scalar_h", 147 outs = ["renamepurec_scalar.h"], 148 cmd = "$(location :mkrename) cinz_ 1 1 purec > $@", 149 tools = [":mkrename"], 150) 151 152genrule( 153 name = "renamepurecfma_scalar_h", 154 outs = ["renamepurecfma_scalar.h"], 155 cmd = "$(location :mkrename) finz_ 1 1 purecfma > $@", 156 tools = [":mkrename"], 157) 158 159genrule( 160 name = "renamesse2_h", 161 outs = ["renamesse2.h"], 162 cmd = "$(location :mkrename) cinz_ 2 4 sse2 > $@", 163 tools = [":mkrename"], 164) 165 166genrule( 167 name = "renamesse4_h", 168 outs = ["renamesse4.h"], 169 cmd = "$(location :mkrename) cinz_ 2 4 sse4 > $@", 170 tools = [":mkrename"], 171) 172 173genrule( 174 name = "sleef_h", 175 srcs = [ 176 "src/libm/sleeflibm_header.h.org.in", 177 "src/libm/sleeflibm_footer.h.org", 178 ], 179 outs = ["build/include/sleef.h"], 180 cmd = "{ " + "; ".join([ 181 "cat $(location src/libm/sleeflibm_header.h.org.in)", 182 "$(location :mkrename) cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__", 183 "$(location :mkrename) cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ sse2", 184 "$(location :mkrename) cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ sse4", 185 "$(location :mkrename) cinz_ 4 8 __m256d __m256 __m128i \"struct { __m128i x, y; }\" __AVX__", 186 "$(location :mkrename) cinz_ 4 8 __m256d __m256 __m128i \"struct { __m128i x, y; }\" __AVX__ avx", 187 "$(location :mkrename) finz_ 4 8 __m256d __m256 __m128i \"struct { __m128i x, y; }\" __AVX__ fma4", 188 "$(location :mkrename) finz_ 4 8 __m256d __m256 __m128i __m256i __AVX__ avx2", 189 "$(location :mkrename) finz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ avx2128", 190 "$(location :mkrename) finz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__", 191 "$(location :mkrename) finz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__ avx512f", 192 "$(location :mkrename) cinz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__ avx512fnofma", 193 "$(location :mkrename) cinz_ 1 1 double float int32_t int32_t __STDC__ purec", 194 "$(location :mkrename) finz_ 1 1 double float int32_t int32_t FP_FAST_FMA purecfma", 195 "cat $(location src/libm/sleeflibm_footer.h.org)", 196 ]) + "; } > $@", 197 tools = [":mkrename"], 198) 199 200cc_library( 201 name = "sleef", 202 srcs = [ 203 "src/libm/rempitab.c", 204 "src/libm/sleefdp.c", 205 "src/libm/sleefsp.c", 206 ], 207 hdrs = SLEEF_PUBLIC_HEADERS, 208 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 209 "-DDORENAME=1", 210 "-DENABLEFLOAT128=1", 211 "-Wno-unused-result", 212 ], 213 includes = SLEEF_PUBLIC_INCLUDES, 214 # -lgcc resolves 215 # U __addtf3 216 # U __eqtf2 217 # U __fixtfdi 218 # U __floatditf 219 # U __gttf2 220 # U __lttf2 221 # U __multf3 222 # U __subtf3 223 # in bazel-bin/external/sleef/_objs/sleef/sleefqp.pic.o 224 linkopts = [ 225 "-lgcc", 226 ], 227 linkstatic = True, 228 visibility = SLEEF_VISIBILITY, 229 # The purpose of the lists in deps is to keep related pairs of 230 # libraries together. In particular, each pair that contains a *det* 231 # library originates with a sleef_cc_library(). 232 deps = [ 233 ":common", 234 ":dispavx", 235 ":dispsse", 236 ] + [ 237 ":sleefavx", 238 ":sleefdetavx", 239 ] + [ 240 ":sleefavx2", 241 ":sleefdetavx2", 242 ] + [ 243 ":sleefavx2128", 244 ":sleefdetavx2128", 245 ] + [ 246 ":sleefavx512f", 247 ":sleefdetavx512f", 248 ] + [ 249 ":sleefavx512fnofma", 250 ":sleefdetavx512fnofma", 251 ] + [ 252 ":sleeffma4", 253 ":sleefdetfma4", 254 ] + [ 255 ":sleefsse2", 256 ":sleefdetsse2", 257 ] + [ 258 ":sleefsse4", 259 ":sleefdetsse4", 260 ] + [ 261 ":sleefpurec_scalar", 262 ":sleefdetpurec_scalar", 263 ] + [ 264 ":sleefpurecfma_scalar", 265 ":sleefdetpurecfma_scalar", 266 ], 267 alwayslink = True, 268) 269 270cc_library( 271 name = "common", 272 srcs = SLEEF_PRIVATE_HEADERS + [ 273 "src/common/common.c", 274 ], 275 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + [ 276 "-Wno-unused-result", 277 ], 278 linkstatic = True, 279 visibility = SLEEF_VISIBILITY, 280 alwayslink = True, 281) 282 283cc_library( 284 name = "dispavx", 285 srcs = SLEEF_PRIVATE_HEADERS + SLEEF_PUBLIC_HEADERS + [ 286 ":dispavx_c", 287 ], 288 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 289 "-DENABLE_AVX2=1", 290 "-DENABLE_FMA4=1", 291 "-mavx", 292 ], 293 includes = SLEEF_PUBLIC_INCLUDES, 294 linkstatic = True, 295 visibility = SLEEF_VISIBILITY, 296 alwayslink = True, 297) 298 299cc_library( 300 name = "dispsse", 301 srcs = SLEEF_PRIVATE_HEADERS + SLEEF_PUBLIC_HEADERS + [ 302 ":dispsse_c", 303 ], 304 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 305 "-DENABLE_AVX2=1", 306 "-DENABLE_FMA4=1", 307 "-msse2", 308 ], 309 includes = SLEEF_PUBLIC_INCLUDES, 310 linkstatic = True, 311 visibility = SLEEF_VISIBILITY, 312 alwayslink = True, 313) 314 315sleef_cc_library( 316 name = "sleefavx512f", 317 srcs = SLEEF_PRIVATE_HEADERS + [ 318 "src/libm/sleefsimddp.c", 319 "src/libm/sleefsimdsp.c", 320 ":alias_avx512f_h", 321 ":renameavx512f_h", 322 ], 323 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 324 "-DDORENAME=1", 325 "-DALIAS_NO_EXT_SUFFIX=\\\"alias_avx512f.h\\\"", 326 "-DENABLE_AVX512F=1", 327 "-mavx512f", 328 ], 329 linkstatic = True, 330 visibility = SLEEF_VISIBILITY, 331 alwayslink = True, 332) 333 334sleef_cc_library( 335 name = "sleefavx512fnofma", 336 srcs = SLEEF_PRIVATE_HEADERS + [ 337 "src/libm/sleefsimddp.c", 338 "src/libm/sleefsimdsp.c", 339 ":renameavx512fnofma_h", 340 ], 341 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 342 "-DDORENAME=1", 343 "-DENABLE_AVX512FNOFMA=1", 344 "-mavx512f", 345 ], 346 linkstatic = True, 347 visibility = SLEEF_VISIBILITY, 348 alwayslink = True, 349) 350 351sleef_cc_library( 352 name = "sleefavx", 353 srcs = SLEEF_PRIVATE_HEADERS + [ 354 "src/libm/sleefsimddp.c", 355 "src/libm/sleefsimdsp.c", 356 ":renameavx_h", 357 ], 358 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 359 "-DDORENAME=1", 360 "-DENABLE_AVX=1", 361 "-mavx", 362 ], 363 linkstatic = True, 364 visibility = SLEEF_VISIBILITY, 365 alwayslink = True, 366) 367 368sleef_cc_library( 369 name = "sleefavx2", 370 srcs = SLEEF_PRIVATE_HEADERS + [ 371 "src/libm/sleefsimddp.c", 372 "src/libm/sleefsimdsp.c", 373 ":renameavx2_h", 374 ], 375 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 376 "-DDORENAME=1", 377 "-DENABLE_AVX2=1", 378 "-mavx2", 379 "-mfma", 380 ], 381 linkstatic = True, 382 visibility = SLEEF_VISIBILITY, 383 alwayslink = True, 384) 385 386sleef_cc_library( 387 name = "sleefavx2128", 388 srcs = SLEEF_PRIVATE_HEADERS + [ 389 "src/libm/sleefsimddp.c", 390 "src/libm/sleefsimdsp.c", 391 ":renameavx2128_h", 392 ], 393 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 394 "-DDORENAME=1", 395 "-DENABLE_AVX2128=1", 396 "-mavx2", 397 "-mfma", 398 ], 399 linkstatic = True, 400 visibility = SLEEF_VISIBILITY, 401 alwayslink = True, 402) 403 404sleef_cc_library( 405 name = "sleeffma4", 406 srcs = SLEEF_PRIVATE_HEADERS + [ 407 "src/libm/sleefsimddp.c", 408 "src/libm/sleefsimdsp.c", 409 ":renamefma4_h", 410 ], 411 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 412 "-DDORENAME=1", 413 "-DENABLE_FMA4=1", 414 "-mfma4", 415 ], 416 linkstatic = True, 417 visibility = SLEEF_VISIBILITY, 418 alwayslink = True, 419) 420 421sleef_cc_library( 422 name = "sleefsse2", 423 srcs = SLEEF_PRIVATE_HEADERS + [ 424 "src/libm/sleefsimddp.c", 425 "src/libm/sleefsimdsp.c", 426 ":renamesse2_h", 427 ], 428 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 429 "-DDORENAME=1", 430 "-DENABLE_SSE2=1", 431 "-msse2", 432 ], 433 linkstatic = True, 434 visibility = SLEEF_VISIBILITY, 435 alwayslink = True, 436) 437 438sleef_cc_library( 439 name = "sleefsse4", 440 srcs = SLEEF_PRIVATE_HEADERS + [ 441 "src/libm/sleefsimddp.c", 442 "src/libm/sleefsimdsp.c", 443 ":renamesse4_h", 444 ], 445 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 446 "-DDORENAME=1", 447 "-DENABLE_SSE4=1", 448 "-msse4.1", 449 ], 450 linkstatic = True, 451 visibility = SLEEF_VISIBILITY, 452 alwayslink = True, 453) 454 455sleef_cc_library( 456 name = "sleefpurec_scalar", 457 srcs = SLEEF_PRIVATE_HEADERS + [ 458 "src/libm/sleefsimddp.c", 459 "src/libm/sleefsimdsp.c", 460 ":renamepurec_scalar_h", 461 ], 462 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 463 "-DDORENAME=1", 464 "-DENABLE_PUREC_SCALAR=1", 465 ], 466 linkstatic = True, 467 visibility = SLEEF_VISIBILITY, 468 alwayslink = True, 469) 470 471sleef_cc_library( 472 name = "sleefpurecfma_scalar", 473 srcs = SLEEF_PRIVATE_HEADERS + [ 474 "src/libm/sleefsimddp.c", 475 "src/libm/sleefsimdsp.c", 476 ":renamepurecfma_scalar_h", 477 ], 478 copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [ 479 "-DDORENAME=1", 480 "-DENABLE_PURECFMA_SCALAR=1", 481 "-mavx2", 482 "-mfma", 483 ], 484 linkstatic = True, 485 visibility = SLEEF_VISIBILITY, 486 alwayslink = True, 487) 488