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