xref: /aosp_15_r20/external/abseil-cpp/absl/random/internal/BUILD.bazel (revision 9356374a3709195abf420251b3e825997ff56c0f)
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:config",
531        "//absl/base:fast_type_id",
532        "//absl/types:optional",
533    ],
534)
535
536cc_library(
537    name = "mock_overload_set",
538    testonly = True,
539    hdrs = ["mock_overload_set.h"],
540    linkopts = ABSL_DEFAULT_LINKOPTS,
541    deps = [
542        ":mock_helpers",
543        "//absl/base:config",
544        "//absl/random:mocking_bit_gen",
545        "@com_google_googletest//:gtest",
546    ],
547)
548
549cc_test(
550    name = "nonsecure_base_test",
551    size = "small",
552    srcs = [
553        "nonsecure_base_test.cc",
554    ],
555    copts = ABSL_TEST_COPTS,
556    linkopts = ABSL_DEFAULT_LINKOPTS,
557    deps = [
558        ":nonsecure_base",
559        "//absl/random",
560        "//absl/random:distributions",
561        "//absl/random:seed_sequences",
562        "//absl/strings",
563        "@com_google_googletest//:gtest",
564        "@com_google_googletest//:gtest_main",
565    ],
566)
567
568cc_test(
569    name = "seed_material_test",
570    size = "small",
571    srcs = ["seed_material_test.cc"],
572    copts = ABSL_TEST_COPTS,
573    linkopts = ABSL_DEFAULT_LINKOPTS,
574    deps = [
575        ":seed_material",
576        "@com_google_googletest//:gtest",
577        "@com_google_googletest//:gtest_main",
578    ],
579)
580
581cc_test(
582    name = "pool_urbg_test",
583    size = "small",
584    srcs = [
585        "pool_urbg_test.cc",
586    ],
587    copts = ABSL_TEST_COPTS,
588    linkopts = ABSL_DEFAULT_LINKOPTS,
589    deps = [
590        ":pool_urbg",
591        "//absl/meta:type_traits",
592        "//absl/types:span",
593        "@com_google_googletest//:gtest",
594        "@com_google_googletest//:gtest_main",
595    ],
596)
597
598cc_test(
599    name = "pcg_engine_test",
600    size = "medium",  # Trying to measure accuracy.
601    srcs = ["pcg_engine_test.cc"],
602    copts = ABSL_TEST_COPTS,
603    flaky = 1,
604    linkopts = ABSL_DEFAULT_LINKOPTS,
605    deps = [
606        ":explicit_seed_seq",
607        ":pcg_engine",
608        "//absl/time",
609        "@com_google_googletest//:gtest",
610        "@com_google_googletest//:gtest_main",
611    ],
612)
613
614cc_test(
615    name = "randen_engine_test",
616    size = "medium",
617    srcs = [
618        "randen_engine_test.cc",
619    ],
620    copts = ABSL_TEST_COPTS,
621    linkopts = ABSL_DEFAULT_LINKOPTS,
622    deps = [
623        ":explicit_seed_seq",
624        ":randen_engine",
625        "//absl/log",
626        "//absl/strings",
627        "//absl/time",
628        "@com_google_googletest//:gtest",
629        "@com_google_googletest//:gtest_main",
630    ],
631)
632
633cc_test(
634    name = "randen_test",
635    size = "small",
636    srcs = ["randen_test.cc"],
637    copts = ABSL_TEST_COPTS,
638    linkopts = ABSL_DEFAULT_LINKOPTS,
639    deps = [
640        ":randen",
641        "//absl/meta:type_traits",
642        "@com_google_googletest//:gtest",
643        "@com_google_googletest//:gtest_main",
644    ],
645)
646
647cc_test(
648    name = "randen_slow_test",
649    size = "small",
650    srcs = ["randen_slow_test.cc"],
651    copts = ABSL_TEST_COPTS,
652    linkopts = ABSL_DEFAULT_LINKOPTS,
653    deps = [
654        ":platform",
655        ":randen_slow",
656        "//absl/base:endian",
657        "@com_google_googletest//:gtest",
658        "@com_google_googletest//:gtest_main",
659    ],
660)
661
662cc_test(
663    name = "randen_hwaes_test",
664    size = "small",
665    srcs = ["randen_hwaes_test.cc"],
666    copts = ABSL_TEST_COPTS + ABSL_RANDOM_RANDEN_COPTS,
667    linkopts = ABSL_DEFAULT_LINKOPTS,
668    tags = ABSL_RANDOM_NONPORTABLE_TAGS,
669    deps = [
670        ":platform",
671        ":randen_hwaes",
672        ":randen_hwaes_impl",  # build_cleaner: keep
673        "//absl/log",
674        "//absl/strings:str_format",
675        "@com_google_googletest//:gtest",
676    ],
677)
678
679cc_test(
680    name = "wide_multiply_test",
681    size = "small",
682    srcs = ["wide_multiply_test.cc"],
683    copts = ABSL_TEST_COPTS,
684    linkopts = ABSL_DEFAULT_LINKOPTS,
685    deps = [
686        ":wide_multiply",
687        "//absl/numeric:bits",
688        "//absl/numeric:int128",
689        "@com_google_googletest//:gtest",
690        "@com_google_googletest//:gtest_main",
691    ],
692)
693
694cc_library(
695    name = "nanobenchmark",
696    srcs = ["nanobenchmark.cc"],
697    linkopts = ABSL_DEFAULT_LINKOPTS,
698    textual_hdrs = ["nanobenchmark.h"],
699    deps = [
700        ":platform",
701        ":randen_engine",
702        "//absl/base:config",
703        "//absl/base:core_headers",
704        "//absl/base:raw_logging_internal",
705    ],
706)
707
708cc_library(
709    name = "uniform_helper",
710    hdrs = ["uniform_helper.h"],
711    copts = ABSL_DEFAULT_COPTS,
712    linkopts = ABSL_DEFAULT_LINKOPTS,
713    deps = [
714        ":traits",
715        "//absl/base:config",
716        "//absl/meta:type_traits",
717    ],
718)
719
720cc_library(
721    name = "mock_validators",
722    hdrs = ["mock_validators.h"],
723    deps = [
724        ":iostream_state_saver",
725        ":uniform_helper",
726        "//absl/base:config",
727        "//absl/base:raw_logging_internal",
728        "//absl/strings",
729        "//absl/strings:string_view",
730    ],
731)
732
733cc_test(
734    name = "nanobenchmark_test",
735    size = "small",
736    srcs = ["nanobenchmark_test.cc"],
737    flaky = 1,
738    linkopts = ABSL_DEFAULT_LINKOPTS,
739    tags = [
740        "benchmark",
741        "no_test_ios_x86_64",
742        "no_test_loonix",  # Crashing.
743        "no_test_wasm",
744    ],
745    deps = [
746        ":nanobenchmark",
747        "//absl/log",
748        "//absl/log:check",
749        "//absl/strings",
750        "//absl/strings:str_format",
751    ],
752)
753
754cc_test(
755    name = "randen_benchmarks",
756    size = "medium",
757    timeout = "long",
758    srcs = ["randen_benchmarks.cc"],
759    copts = ABSL_TEST_COPTS + ABSL_RANDOM_RANDEN_COPTS,
760    flaky = 1,
761    linkopts = ABSL_DEFAULT_LINKOPTS,
762    tags = ABSL_RANDOM_NONPORTABLE_TAGS + ["benchmark"],
763    deps = [
764        ":nanobenchmark",
765        ":platform",
766        ":randen",
767        ":randen_engine",
768        ":randen_hwaes",
769        ":randen_hwaes_impl",
770        ":randen_slow",
771        "//absl/base:raw_logging_internal",
772        "//absl/strings",
773    ],
774)
775
776cc_test(
777    name = "iostream_state_saver_test",
778    srcs = ["iostream_state_saver_test.cc"],
779    linkopts = ABSL_DEFAULT_LINKOPTS,
780    deps = [
781        ":iostream_state_saver",
782        "@com_google_googletest//:gtest",
783        "@com_google_googletest//:gtest_main",
784    ],
785)
786
787cc_test(
788    name = "uniform_helper_test",
789    size = "small",
790    srcs = ["uniform_helper_test.cc"],
791    copts = ABSL_TEST_COPTS,
792    linkopts = ABSL_DEFAULT_LINKOPTS,
793    deps = [
794        ":uniform_helper",
795        "@com_google_googletest//:gtest",
796        "@com_google_googletest//:gtest_main",
797    ],
798)
799