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