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