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