xref: /aosp_15_r20/external/angle/third_party/abseil-cpp/absl/random/internal/BUILD.bazel (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1#
2# Copyright 2019 The Abseil Authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      https://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17# Internal-only implementation classes for Abseil Random
18load(
19    "//absl:copts/configure_copts.bzl",
20    "ABSL_DEFAULT_COPTS",
21    "ABSL_DEFAULT_LINKOPTS",
22    "ABSL_RANDOM_RANDEN_COPTS",
23    "ABSL_TEST_COPTS",
24    "absl_random_randen_copts_init",
25)
26
27default_package_visibility = [
28    "//absl/random:__pkg__",
29]
30
31package(
32    default_visibility = default_package_visibility,
33    features = [
34        "header_modules",
35        "layering_check",
36        "parse_headers",
37    ],
38)
39
40licenses(["notice"])
41
42cc_library(
43    name = "traits",
44    hdrs = ["traits.h"],
45    copts = ABSL_DEFAULT_COPTS,
46    linkopts = ABSL_DEFAULT_LINKOPTS,
47    deps = [
48        "//absl/base:config",
49        "//absl/numeric:bits",
50        "//absl/numeric:int128",
51    ],
52)
53
54cc_library(
55    name = "distribution_caller",
56    hdrs = ["distribution_caller.h"],
57    copts = ABSL_DEFAULT_COPTS,
58    linkopts = ABSL_DEFAULT_LINKOPTS,
59    deps = [
60        "//absl/base:config",
61        "//absl/base:fast_type_id",
62        "//absl/meta:type_traits",
63        "//absl/utility",
64    ],
65)
66
67cc_library(
68    name = "fast_uniform_bits",
69    hdrs = [
70        "fast_uniform_bits.h",
71    ],
72    copts = ABSL_DEFAULT_COPTS,
73    linkopts = ABSL_DEFAULT_LINKOPTS,
74    deps = [
75        ":traits",
76        "//absl/base:config",
77        "//absl/meta:type_traits",
78    ],
79)
80
81cc_library(
82    name = "seed_material",
83    srcs = [
84        "seed_material.cc",
85    ],
86    hdrs = [
87        "seed_material.h",
88    ],
89    copts = ABSL_DEFAULT_COPTS,
90    linkopts = ABSL_DEFAULT_LINKOPTS + select({
91        "//absl:msvc_compiler": ["-DEFAULTLIB:bcrypt.lib"],
92        "//absl:clang-cl_compiler": ["-DEFAULTLIB:bcrypt.lib"],
93        "//absl:mingw_compiler": [
94            "-DEFAULTLIB:bcrypt.lib",
95            "-lbcrypt",
96        ],
97        "//conditions:default": [],
98    }),
99    deps = [
100        ":fast_uniform_bits",
101        "//absl/base:core_headers",
102        "//absl/base:dynamic_annotations",
103        "//absl/base:raw_logging_internal",
104        "//absl/strings",
105        "//absl/types:optional",
106        "//absl/types:span",
107    ],
108)
109
110cc_library(
111    name = "pool_urbg",
112    srcs = [
113        "pool_urbg.cc",
114    ],
115    hdrs = [
116        "pool_urbg.h",
117    ],
118    copts = ABSL_DEFAULT_COPTS,
119    linkopts = select({
120        "//absl:msvc_compiler": [],
121        "//absl:clang-cl_compiler": [],
122        "//absl:wasm": [],
123        "//conditions:default": ["-pthread"],
124    }) + ABSL_DEFAULT_LINKOPTS,
125    deps = [
126        ":randen",
127        ":seed_material",
128        ":traits",
129        "//absl/base",
130        "//absl/base:config",
131        "//absl/base:core_headers",
132        "//absl/base:endian",
133        "//absl/base:raw_logging_internal",
134        "//absl/random:seed_gen_exception",
135        "//absl/types:span",
136    ],
137)
138
139cc_library(
140    name = "explicit_seed_seq",
141    testonly = True,
142    hdrs = [
143        "explicit_seed_seq.h",
144    ],
145    copts = ABSL_DEFAULT_COPTS,
146    linkopts = ABSL_DEFAULT_LINKOPTS,
147    deps = [
148        "//absl/base:config",
149        "//absl/base:endian",
150    ],
151)
152
153cc_library(
154    name = "sequence_urbg",
155    testonly = True,
156    hdrs = [
157        "sequence_urbg.h",
158    ],
159    copts = ABSL_DEFAULT_COPTS,
160    linkopts = ABSL_DEFAULT_LINKOPTS,
161    deps = ["//absl/base:config"],
162)
163
164cc_library(
165    name = "salted_seed_seq",
166    hdrs = [
167        "salted_seed_seq.h",
168    ],
169    copts = ABSL_DEFAULT_COPTS,
170    linkopts = ABSL_DEFAULT_LINKOPTS,
171    deps = [
172        ":seed_material",
173        "//absl/container:inlined_vector",
174        "//absl/meta:type_traits",
175        "//absl/types:optional",
176        "//absl/types:span",
177    ],
178)
179
180cc_library(
181    name = "iostream_state_saver",
182    hdrs = ["iostream_state_saver.h"],
183    copts = ABSL_DEFAULT_COPTS,
184    linkopts = ABSL_DEFAULT_LINKOPTS,
185    deps = [
186        "//absl/meta:type_traits",
187        "//absl/numeric:int128",
188    ],
189)
190
191cc_library(
192    name = "generate_real",
193    hdrs = [
194        "generate_real.h",
195    ],
196    copts = ABSL_DEFAULT_COPTS,
197    linkopts = ABSL_DEFAULT_LINKOPTS,
198    deps = [
199        ":fastmath",
200        ":traits",
201        "//absl/meta:type_traits",
202        "//absl/numeric:bits",
203    ],
204)
205
206cc_library(
207    name = "fastmath",
208    hdrs = [
209        "fastmath.h",
210    ],
211    copts = ABSL_DEFAULT_COPTS,
212    linkopts = ABSL_DEFAULT_LINKOPTS,
213    deps = ["//absl/numeric:bits"],
214)
215
216cc_library(
217    name = "wide_multiply",
218    hdrs = ["wide_multiply.h"],
219    copts = ABSL_DEFAULT_COPTS,
220    linkopts = ABSL_DEFAULT_LINKOPTS,
221    deps = [
222        ":traits",
223        "//absl/base:config",
224        "//absl/numeric:bits",
225        "//absl/numeric:int128",
226    ],
227)
228
229cc_library(
230    name = "nonsecure_base",
231    hdrs = ["nonsecure_base.h"],
232    copts = ABSL_DEFAULT_COPTS,
233    linkopts = ABSL_DEFAULT_LINKOPTS,
234    deps = [
235        ":pool_urbg",
236        ":salted_seed_seq",
237        ":seed_material",
238        "//absl/base:core_headers",
239        "//absl/container:inlined_vector",
240        "//absl/meta:type_traits",
241        "//absl/types:span",
242    ],
243)
244
245cc_library(
246    name = "pcg_engine",
247    hdrs = ["pcg_engine.h"],
248    copts = ABSL_DEFAULT_COPTS,
249    linkopts = ABSL_DEFAULT_LINKOPTS,
250    deps = [
251        ":fastmath",
252        ":iostream_state_saver",
253        "//absl/base:config",
254        "//absl/meta:type_traits",
255        "//absl/numeric:bits",
256        "//absl/numeric:int128",
257    ],
258)
259
260cc_library(
261    name = "randen_engine",
262    hdrs = ["randen_engine.h"],
263    copts = ABSL_DEFAULT_COPTS,
264    linkopts = ABSL_DEFAULT_LINKOPTS,
265    visibility = default_package_visibility + [
266    ],
267    deps = [
268        ":iostream_state_saver",
269        ":randen",
270        "//absl/base:endian",
271        "//absl/meta:type_traits",
272    ],
273)
274
275cc_library(
276    name = "platform",
277    srcs = [
278        "randen_round_keys.cc",
279    ],
280    hdrs = [
281        "randen_traits.h",
282    ],
283    copts = ABSL_DEFAULT_COPTS,
284    linkopts = ABSL_DEFAULT_LINKOPTS,
285    textual_hdrs = [
286        "platform.h",
287    ],
288    deps = ["//absl/base:config"],
289)
290
291cc_library(
292    name = "randen",
293    srcs = [
294        "randen.cc",
295    ],
296    hdrs = [
297        "randen.h",
298    ],
299    copts = ABSL_DEFAULT_COPTS,
300    linkopts = ABSL_DEFAULT_LINKOPTS,
301    deps = [
302        ":platform",
303        ":randen_hwaes",
304        ":randen_slow",
305        "//absl/base:raw_logging_internal",
306    ],
307)
308
309cc_library(
310    name = "randen_slow",
311    srcs = ["randen_slow.cc"],
312    hdrs = ["randen_slow.h"],
313    copts = ABSL_DEFAULT_COPTS,
314    linkopts = ABSL_DEFAULT_LINKOPTS,
315    deps = [
316        ":platform",
317        "//absl/base:config",
318        "//absl/base:core_headers",
319        "//absl/base:endian",
320        "//absl/numeric:int128",
321    ],
322)
323
324absl_random_randen_copts_init()
325
326cc_library(
327    name = "randen_hwaes",
328    srcs = [
329        "randen_detect.cc",
330    ],
331    hdrs = [
332        "randen_detect.h",
333        "randen_hwaes.h",
334    ],
335    copts = ABSL_DEFAULT_COPTS,
336    linkopts = ABSL_DEFAULT_LINKOPTS,
337    deps = [
338        ":platform",
339        ":randen_hwaes_impl",
340        "//absl/base:config",
341    ],
342)
343
344# build with --save_temps to see assembly language output.
345cc_library(
346    name = "randen_hwaes_impl",
347    srcs = [
348        "randen_hwaes.cc",
349        "randen_hwaes.h",
350    ],
351    copts = ABSL_DEFAULT_COPTS + ABSL_RANDOM_RANDEN_COPTS + select({
352        "//absl:msvc_compiler": [],
353        "//absl:clang-cl_compiler": [],
354        "//conditions:default": ["-Wno-pass-failed"],
355    }),
356    linkopts = ABSL_DEFAULT_LINKOPTS,
357    deps = [
358        ":platform",
359        "//absl/base:config",
360        "//absl/base:core_headers",
361        "//absl/numeric:int128",
362    ],
363)
364
365cc_binary(
366    name = "gaussian_distribution_gentables",
367    srcs = [
368        "gaussian_distribution_gentables.cc",
369    ],
370    linkopts = ABSL_DEFAULT_LINKOPTS,
371    deps = [
372        "//absl/base:core_headers",
373        "//absl/random:distributions",
374    ],
375)
376
377cc_library(
378    name = "distribution_test_util",
379    testonly = True,
380    srcs = [
381        "chi_square.cc",
382        "distribution_test_util.cc",
383    ],
384    hdrs = [
385        "chi_square.h",
386        "distribution_test_util.h",
387    ],
388    copts = ABSL_DEFAULT_COPTS,
389    linkopts = ABSL_DEFAULT_LINKOPTS,
390    deps = [
391        "//absl/base:config",
392        "//absl/base:core_headers",
393        "//absl/base:raw_logging_internal",
394        "//absl/strings",
395        "//absl/strings:str_format",
396        "//absl/types:span",
397    ],
398)
399
400# Common tags for tests, etc.
401ABSL_RANDOM_NONPORTABLE_TAGS = [
402    "no_test_android_arm",
403    "no_test_android_arm64",
404    "no_test_android_x86",
405    "no_test_darwin_x86_64",
406    "no_test_ios_x86_64",
407    "no_test_loonix",
408    "no_test_lexan",
409    "no_test_wasm",
410]
411
412cc_test(
413    name = "traits_test",
414    size = "small",
415    srcs = ["traits_test.cc"],
416    copts = ABSL_TEST_COPTS,
417    linkopts = ABSL_DEFAULT_LINKOPTS,
418    deps = [
419        ":traits",
420        "@com_google_googletest//:gtest",
421        "@com_google_googletest//:gtest_main",
422    ],
423)
424
425cc_test(
426    name = "generate_real_test",
427    size = "small",
428    srcs = [
429        "generate_real_test.cc",
430    ],
431    copts = ABSL_TEST_COPTS,
432    linkopts = ABSL_DEFAULT_LINKOPTS,
433    deps = [
434        ":generate_real",
435        "//absl/flags:flag",
436        "//absl/numeric:bits",
437        "@com_google_googletest//:gtest",
438        "@com_google_googletest//:gtest_main",
439    ],
440)
441
442cc_test(
443    name = "distribution_test_util_test",
444    size = "small",
445    srcs = ["distribution_test_util_test.cc"],
446    copts = ABSL_TEST_COPTS,
447    linkopts = ABSL_DEFAULT_LINKOPTS,
448    deps = [
449        ":distribution_test_util",
450        "@com_google_googletest//:gtest",
451        "@com_google_googletest//:gtest_main",
452    ],
453)
454
455cc_test(
456    name = "fastmath_test",
457    size = "small",
458    srcs = ["fastmath_test.cc"],
459    copts = ABSL_TEST_COPTS,
460    linkopts = ABSL_DEFAULT_LINKOPTS,
461    deps = [
462        ":fastmath",
463        "@com_google_googletest//:gtest",
464        "@com_google_googletest//:gtest_main",
465    ],
466)
467
468cc_test(
469    name = "explicit_seed_seq_test",
470    size = "small",
471    srcs = ["explicit_seed_seq_test.cc"],
472    copts = ABSL_TEST_COPTS,
473    linkopts = ABSL_DEFAULT_LINKOPTS,
474    deps = [
475        ":explicit_seed_seq",
476        "//absl/random:seed_sequences",
477        "@com_google_googletest//:gtest",
478        "@com_google_googletest//:gtest_main",
479    ],
480)
481
482cc_test(
483    name = "salted_seed_seq_test",
484    size = "small",
485    srcs = ["salted_seed_seq_test.cc"],
486    copts = ABSL_TEST_COPTS,
487    linkopts = ABSL_DEFAULT_LINKOPTS,
488    deps = [
489        ":salted_seed_seq",
490        "@com_google_googletest//:gtest",
491        "@com_google_googletest//:gtest_main",
492    ],
493)
494
495cc_test(
496    name = "chi_square_test",
497    size = "small",
498    srcs = [
499        "chi_square_test.cc",
500    ],
501    copts = ABSL_TEST_COPTS,
502    linkopts = ABSL_DEFAULT_LINKOPTS,
503    deps = [
504        ":distribution_test_util",
505        "//absl/base:core_headers",
506        "@com_google_googletest//:gtest",
507        "@com_google_googletest//:gtest_main",
508    ],
509)
510
511cc_test(
512    name = "fast_uniform_bits_test",
513    size = "small",
514    srcs = [
515        "fast_uniform_bits_test.cc",
516    ],
517    copts = ABSL_TEST_COPTS,
518    linkopts = ABSL_DEFAULT_LINKOPTS,
519    deps = [
520        ":fast_uniform_bits",
521        "@com_google_googletest//:gtest",
522        "@com_google_googletest//:gtest_main",
523    ],
524)
525
526cc_library(
527    name = "mock_helpers",
528    hdrs = ["mock_helpers.h"],
529    linkopts = ABSL_DEFAULT_LINKOPTS,
530    deps = [
531        "//absl/base:config",
532        "//absl/base:fast_type_id",
533        "//absl/types:optional",
534    ],
535)
536
537cc_library(
538    name = "mock_overload_set",
539    testonly = True,
540    hdrs = ["mock_overload_set.h"],
541    linkopts = ABSL_DEFAULT_LINKOPTS,
542    deps = [
543        ":mock_helpers",
544        "//absl/base:config",
545        "//absl/random:mocking_bit_gen",
546        "@com_google_googletest//:gtest",
547    ],
548)
549
550cc_test(
551    name = "nonsecure_base_test",
552    size = "small",
553    srcs = [
554        "nonsecure_base_test.cc",
555    ],
556    copts = ABSL_TEST_COPTS,
557    linkopts = ABSL_DEFAULT_LINKOPTS,
558    deps = [
559        ":nonsecure_base",
560        "//absl/random",
561        "//absl/random:distributions",
562        "//absl/random:seed_sequences",
563        "//absl/strings",
564        "@com_google_googletest//:gtest",
565        "@com_google_googletest//:gtest_main",
566    ],
567)
568
569cc_test(
570    name = "seed_material_test",
571    size = "small",
572    srcs = ["seed_material_test.cc"],
573    copts = ABSL_TEST_COPTS,
574    linkopts = ABSL_DEFAULT_LINKOPTS,
575    deps = [
576        ":seed_material",
577        "@com_google_googletest//:gtest",
578        "@com_google_googletest//:gtest_main",
579    ],
580)
581
582cc_test(
583    name = "pool_urbg_test",
584    size = "small",
585    srcs = [
586        "pool_urbg_test.cc",
587    ],
588    copts = ABSL_TEST_COPTS,
589    linkopts = ABSL_DEFAULT_LINKOPTS,
590    deps = [
591        ":pool_urbg",
592        "//absl/meta:type_traits",
593        "//absl/types:span",
594        "@com_google_googletest//:gtest",
595        "@com_google_googletest//:gtest_main",
596    ],
597)
598
599cc_test(
600    name = "pcg_engine_test",
601    size = "medium",  # Trying to measure accuracy.
602    srcs = ["pcg_engine_test.cc"],
603    copts = ABSL_TEST_COPTS,
604    flaky = 1,
605    linkopts = ABSL_DEFAULT_LINKOPTS,
606    deps = [
607        ":explicit_seed_seq",
608        ":pcg_engine",
609        "//absl/time",
610        "@com_google_googletest//:gtest",
611        "@com_google_googletest//:gtest_main",
612    ],
613)
614
615cc_test(
616    name = "randen_engine_test",
617    size = "medium",
618    srcs = [
619        "randen_engine_test.cc",
620    ],
621    copts = ABSL_TEST_COPTS,
622    linkopts = ABSL_DEFAULT_LINKOPTS,
623    deps = [
624        ":explicit_seed_seq",
625        ":randen_engine",
626        "//absl/log",
627        "//absl/strings",
628        "//absl/time",
629        "@com_google_googletest//:gtest",
630        "@com_google_googletest//:gtest_main",
631    ],
632)
633
634cc_test(
635    name = "randen_test",
636    size = "small",
637    srcs = ["randen_test.cc"],
638    copts = ABSL_TEST_COPTS,
639    linkopts = ABSL_DEFAULT_LINKOPTS,
640    deps = [
641        ":randen",
642        "//absl/meta:type_traits",
643        "@com_google_googletest//:gtest",
644        "@com_google_googletest//:gtest_main",
645    ],
646)
647
648cc_test(
649    name = "randen_slow_test",
650    size = "small",
651    srcs = ["randen_slow_test.cc"],
652    copts = ABSL_TEST_COPTS,
653    linkopts = ABSL_DEFAULT_LINKOPTS,
654    deps = [
655        ":platform",
656        ":randen_slow",
657        "//absl/base:endian",
658        "@com_google_googletest//:gtest",
659        "@com_google_googletest//:gtest_main",
660    ],
661)
662
663cc_test(
664    name = "randen_hwaes_test",
665    size = "small",
666    srcs = ["randen_hwaes_test.cc"],
667    copts = ABSL_TEST_COPTS + ABSL_RANDOM_RANDEN_COPTS,
668    linkopts = ABSL_DEFAULT_LINKOPTS,
669    tags = ABSL_RANDOM_NONPORTABLE_TAGS,
670    deps = [
671        ":platform",
672        ":randen_hwaes",
673        ":randen_hwaes_impl",  # build_cleaner: keep
674        "//absl/log",
675        "//absl/strings:str_format",
676        "@com_google_googletest//:gtest",
677    ],
678)
679
680cc_test(
681    name = "wide_multiply_test",
682    size = "small",
683    srcs = ["wide_multiply_test.cc"],
684    copts = ABSL_TEST_COPTS,
685    linkopts = ABSL_DEFAULT_LINKOPTS,
686    deps = [
687        ":wide_multiply",
688        "//absl/numeric:bits",
689        "//absl/numeric:int128",
690        "@com_google_googletest//:gtest",
691        "@com_google_googletest//:gtest_main",
692    ],
693)
694
695cc_library(
696    name = "nanobenchmark",
697    srcs = ["nanobenchmark.cc"],
698    linkopts = ABSL_DEFAULT_LINKOPTS,
699    textual_hdrs = ["nanobenchmark.h"],
700    deps = [
701        ":platform",
702        ":randen_engine",
703        "//absl/base:config",
704        "//absl/base:core_headers",
705        "//absl/base:raw_logging_internal",
706    ],
707)
708
709cc_library(
710    name = "uniform_helper",
711    hdrs = ["uniform_helper.h"],
712    copts = ABSL_DEFAULT_COPTS,
713    linkopts = ABSL_DEFAULT_LINKOPTS,
714    deps = [
715        ":traits",
716        "//absl/base:config",
717        "//absl/meta:type_traits",
718    ],
719)
720
721cc_library(
722    name = "mock_validators",
723    hdrs = ["mock_validators.h"],
724    deps = [
725        ":iostream_state_saver",
726        ":uniform_helper",
727        "//absl/base:config",
728        "//absl/base:raw_logging_internal",
729        "//absl/strings",
730        "//absl/strings:string_view",
731    ],
732)
733
734cc_test(
735    name = "nanobenchmark_test",
736    size = "small",
737    srcs = ["nanobenchmark_test.cc"],
738    flaky = 1,
739    linkopts = ABSL_DEFAULT_LINKOPTS,
740    tags = [
741        "benchmark",
742        "no_test_ios_x86_64",
743        "no_test_loonix",  # Crashing.
744        "no_test_wasm",
745    ],
746    deps = [
747        ":nanobenchmark",
748        "//absl/log",
749        "//absl/log:check",
750        "//absl/strings",
751        "//absl/strings:str_format",
752    ],
753)
754
755cc_test(
756    name = "randen_benchmarks",
757    size = "medium",
758    timeout = "long",
759    srcs = ["randen_benchmarks.cc"],
760    copts = ABSL_TEST_COPTS + ABSL_RANDOM_RANDEN_COPTS,
761    flaky = 1,
762    linkopts = ABSL_DEFAULT_LINKOPTS,
763    tags = ABSL_RANDOM_NONPORTABLE_TAGS + ["benchmark"],
764    deps = [
765        ":nanobenchmark",
766        ":platform",
767        ":randen",
768        ":randen_engine",
769        ":randen_hwaes",
770        ":randen_hwaes_impl",
771        ":randen_slow",
772        "//absl/base:raw_logging_internal",
773        "//absl/strings",
774    ],
775)
776
777cc_test(
778    name = "iostream_state_saver_test",
779    srcs = ["iostream_state_saver_test.cc"],
780    linkopts = ABSL_DEFAULT_LINKOPTS,
781    deps = [
782        ":iostream_state_saver",
783        "@com_google_googletest//:gtest",
784        "@com_google_googletest//:gtest_main",
785    ],
786)
787
788cc_test(
789    name = "uniform_helper_test",
790    size = "small",
791    srcs = ["uniform_helper_test.cc"],
792    copts = ABSL_TEST_COPTS,
793    linkopts = ABSL_DEFAULT_LINKOPTS,
794    deps = [
795        ":uniform_helper",
796        "@com_google_googletest//:gtest",
797        "@com_google_googletest//:gtest_main",
798    ],
799)
800