Hi,
I want to use randen_engine, so I add code in
\third_party\abseil-cpp\absl\random\random.h
// Make randen_engine available for direct usage, because
// absl::BitGen/InsecureBitGen uses always-on process-bound salt for seeded
// generators.
template <typename T>
using randen_engine = random_internal::randen_engine<T>;
then in my codes,
\third_party\blink\renderer\core\farbling\brave_session_cache.h
typedef absl::randen_engine<uint64_t> FarblingPRNG;
third_party\blink\renderer\core\farbling\brave_session_cache.cc
int BraveSessionCache::FarbledInteger(FarbleKey key,
int spoof_value,
int min_random_offset,
int max_random_offset) {
if (farbled_integers_.count(key) == 0) {
FarblingPRNG prng = MakePseudoRandomGenerator(key);
farbled_integers_[key] =
prng() % (1 + max_random_offset - min_random_offset) +
min_random_offset;
}
return farbled_integers_[key] + spoof_value;
}
but failed as below
c:\code\chromium_git\chromium\src>ninja -C out\Release_GN_x86 cef
ninja: Entering directory `out\Release_GN_x86'
[0/1] Regenerating ninja files
[10/23] LINK v8_context_snapshot_generator.exe
v8_context_snapshot_generator.exe.pdb
FAILED: v8_context_snapshot_generator.exe
v8_context_snapshot_generator.exe.pdb
ninja -t msvc -e environment.x86 --
..\..\third_party\llvm-build\Release+Asserts\bin\lld-link.exe /nologo
-libpath:..\..\third_party\llvm-build\Release+Asserts\lib\clang\12.0.0\lib\windows
"-libpath:..\..\..\..\..\..\Program Files (x86)\Microsoft Visual
Studio\2019\Community\VC\Tools\MSVC\14.28.29910\ATLMFC\lib\x86"
"-libpath:..\..\..\..\..\..\Program Files (x86)\Microsoft Visual
Studio\2019\Community\VC\Tools\MSVC\14.28.29910\lib\x86"
"-libpath:..\..\..\..\..\..\Program Files (x86)\Windows
Kits\10\lib\10.0.19041.0\ucrt\x86" "-libpath:..\..\..\..\..\..\Program
Files (x86)\Windows Kits\10\lib\10.0.19041.0\um\x86"
/OUT:./v8_context_snapshot_generator.exe
/PDB:./v8_context_snapshot_generator.exe.pdb
@./v8_context_snapshot_generator.exe.rsp
lld-link: error: undefined symbol: public: __thiscall
absl::random_internal::Randen::Randen(void)
>>> referenced by
.\..\..\third_party\blink\renderer\core\farbling\brave_session_cache.cc:357
>>> blink_core.lib(brave_session_cache.obj):(public: bool
__thiscall brave::BraveSessionCache::AllowFontFamily(class
blink::WebContentSettingsClient *, class WTF::AtomicString const &))
>>> referenced by
.\..\..\third_party\blink\renderer\core\farbling\brave_session_cache.cc:343
>>> blink_core.lib(brave_session_cache.obj):(public: int
__thiscall brave::BraveSessionCache::FarbledInteger(enum brave::FarbleKey,
int, int, int))
>>> referenced by
.\..\..\third_party\blink\renderer\core\farbling\brave_session_cache.cc:329
>>> blink_core.lib(brave_session_cache.obj):(public: class
WTF::String __thiscall brave::BraveSessionCache::FarbledUserAgent(class
WTF::String))
>>> referenced 1 more times
what should I do to fix it? thankx
在2020年8月5日星期三 UTC+8 22:52:31<[email protected]> 写道:
> The restrictions should largely be similar to using STL and base types --
> where there are reasons that WTF has provided something else, the WTF one
> should probably be used (for example, string and collection types). Aside
> from those anything that's good in Chromium should be fine.
>
> On Wed, Aug 5, 2020 at 4:42 AM Yutaka Hirano <[email protected]> wrote:
>
>> -chromium-dev, -cxx
>>
>> We have some restrictions on the use of base/ in blink. Do we have a
>> similar policy for abseil?
>>
>> On Sat, Aug 1, 2020 at 7:10 AM 'Peter Kasting' via cxx <[email protected]>
>> wrote:
>>
>>> Chromium contributors (and bcc abseil-io as FYI),
>>>
>>> *TLDR: *It's now possible to use Abseil in first-party Chromium code.
>>>
>>> - Only absl::variant is currently allowed.
>>> - See http://chromium-cpp.appspot.com/ for the current status of
>>> features. To request more features, email [email protected].
>>> - To use an allowed feature, have your target depend appropriately
>>> on "//third_party/abseil-cpp:absl", and #include the relevant header
>>> from third_party/abseil-cpp/absl/.
>>>
>>> *Longer version follows*
>>>
>>> As of today, first-party code in Chromium is allowed to use Abseil. As
>>> with new versions of the C++ standard, support is initially restricted to
>>> features which are explicitly allowlisted; consideration of a feature is by
>>> request. To begin with, absl::variant is the only allowed feature.
>>>
>>> *To use an Abseil feature in your code:*
>>>
>>> - #include the relevant header(s) from third_party/abseil-cpp/absl/.
>>> For example, #include "third_party/abseil-cpp/absl/types/variant.h".
>>> - In the relevant BUILD.gn, add "//third_party/abseil-cpp:absl" to
>>> your target's deps or "public_deps" as appropriate. Because of
>>> visibility restrictions designed to hinder inappropriate use, you will
>>> need
>>> to use public_deps if your #include is in a .h that another target
>>> #includes.
>>>
>>> *To see or request allowed features:*
>>>
>>> - To see the current status of features, visit
>>> http://chromium-cpp.appspot.com/. Some features are explicitly
>>> banned for various reasons; most remain banned-by-default as "TBD".
>>> - To request consideration of a TBD or banned feature, mail
>>> [email protected], ideally with a use case and relevant context.
>>> - After two years, style arbiters will explicitly allow or ban all
>>> remaining TBD features.
>>>
>>> *FAQ:*
>>>
>>> - *What about third-party code?*
>>> - Code in third_party can use Abseil freely, except for features
>>> explicitly banned due to incompatibility; code that needs those
>>> features is
>>> allowed if it won't actually cause problems. Contact cxx@ for more
>>> information.
>>> - *What do you mean, incompatibility? And why are there weird
>>> visibility restrictions?*
>>> - Certain Abseil features (e.g. absl::any, ABSL_FLAG) rely on
>>> either RTTI (which Chromium disables) or a workaround called
>>> FastTypeId that isn't compatible with the component build. Using
>>> such features risks subtle bugs when code compiles and links but
>>> doesn't
>>> behave as expected, so these are banned from being linked into
>>> Chromium.
>>> - Partly to enforce these bans, both the .gn and DEPS files have
>>> various restrictions (such as include_rules and visibility
>>> adjustments) designed to hinder accidental misuse. It's not
>>> impossible, but
>>> hopefully we made it hard to accidentally blow your leg off.
>>> - *What about first-party code that needs to interact with
>>> third-party code that uses types Chromium doesn't currently allow?*
>>> - Assuming the third-party use is otherwise allowed (see above),
>>> you are allowed to use banned features as minimally necessary at the
>>> third-party code boundary to interface with it. Convert to Chromium
>>> types/features/etc. as early as possible. Contact cxx@ for more
>>> information.
>>> - *Will we be replacing base:: types like Span and Optional with
>>> absl:: ones?*
>>> - All other things being equal, we would slightly prefer to use
>>> an absl:: type to an identical base:: one. That's one less thing
>>> we have to maintain, and we trust the Abseil team.
>>> - For cases like Span, the base:: type is more std::-compliant
>>> than the absl:: one. Since in such cases our ultimate goal would
>>> be to move to the std:: type, we won't migrate to absl:: unless
>>> compliance improves to at least match base::.
>>> - For cases like time handling where there are significant
>>> design/API differences, we'd need a compelling reason to migrate
>>> existing
>>> code, since a migration plan would be significantly more complicated.
>>> - In the other cases, we won't migrate unless there's a migration
>>> plan (and responsible owner(s)). The default plan is "make base::
>>> API match absl::; change base:: implementation to be an alias;
>>> replace usage of base:: with absl:: everywhere; remove base::
>>> implementation". Those steps aren't free, and someone needs to be
>>> willing
>>> to pay the cost.
>>> - *When Chromium supports C++17, will we replace absl:: types
>>> with std:: ones?*
>>> - Yes, assuming we can do so without regressing security
>>> guarantees. We have various hardening tests that ensure certain
>>> misuses
>>> cause checkfailures. We won't migrate code to STL implementations
>>> that
>>> don't provide at least equivalent checks we can enable. The most
>>> likely
>>> path in many cases is that libc++ adds such checks. I'm sure
>>> [email protected] would love to talk to you about this. :D
>>> - *Something something Chromium C++14 Abseil support guarantees NaCl
>>> toolchain compatibility something uh oh?*
>>> - If you have no idea what this question could be about, you
>>> don't need to worry about it.
>>> - Leadership on various sides have made commitments that should
>>> ensure it's safe to start relying on Abseil, and we won't get stuck
>>> in a
>>> year or two with libraries that stop working, unsupported code, etc.
>>> I
>>> don't know what all is public so that's all I'll say.
>>> - *Why can't I use ___________ from Abseil yet?*
>>> - Likely because we haven't formally considered it. Propose it
>>> per instructions above.
>>> - To make sure we don't unintentionally cause catastrophe, we
>>> reserve the right to slow the adoption rate of even clearly-OK
>>> features.
>>> But in the limit that should be weeks, not years.
>>> - *Abseil is cool, now can I get support for {boost, EASTL,
>>> $your_favorite_here}?*
>>> - We'll consider anything reasonable, but no guarantees.
>>> (Author's note: my recent proposition to add a couple Boost items
>>> already
>>> on Google's officially approved list was not met with great
>>> enthusiasm, if
>>> this tells you anything.)
>>> - *pkasting, you're so amazing, I just want to hear more from you.
>>> Is there anything else you haven't mentioned?*
>>> - Why yes! Gtest support for Abseil has also been enabled, which
>>> provides pretty-printers for various types. For example, here's the
>>> output
>>> of an EXPECT_EQ() on two absl::variants, one containing
>>> <bool>(false), and one containing <gfx::Rect>({1, 2, 3, 4}):
>>>
>>> *Before:*
>>> error: Expected equality of these values:
>>> V(false)
>>> Which is: 24-byte object <00-F9 63-74 F7-7F 00-00 00-00 00-00
>>> FA-00 00-00 01-00 00-00 00-00 00-00>
>>> c
>>> Which is: 24-byte object <01-00 00-00 02-00 00-00 03-00 00-00
>>> 04-00 00-00 02-00 00-00 00-00 00-00>
>>>
>>> *After:*
>>> error: Expected equality of these values:
>>> V(false)
>>> Which is: ('<type>(index = 1)' with value false)
>>> c
>>> Which is: ('<type>(index = 2)' with value 1,2 3x4)
>>>
>>> *Thanks*
>>>
>>> - The Abseil team, who have been very helpful in working with
>>> Chromium to support our needs.
>>> - mbonadei@ and danilchap@, the people mainly responsible for
>>> keeping Abseil rolled into Chromium's tree and functioning as desired,
>>> including testing and adding various things to resolve blockers.
>>> - cxx@ et al., especially those who sent explicit input on this,
>>> including (but not limited to) danakj@, jbroman@, jdoerrie@, gab@, jam@,
>>> dpranke@, dcheng@.
>>> - If you read this far, you! Hope it was informative.
>>>
>>> PK
>>>
>>> P.S. OK, I admit, no one asked that last FAQ.
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "cxx" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/a/chromium.org/d/msgid/cxx/CAAHOzFBcZhhOXwVNaPtF5h82goGqMCFYOGu8k3D1wnYg60bMww%40mail.gmail.com
>>>
>>> <https://groups.google.com/a/chromium.org/d/msgid/cxx/CAAHOzFBcZhhOXwVNaPtF5h82goGqMCFYOGu8k3D1wnYg60bMww%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>>
> You received this message because you are subscribed to the Google Groups
>> "blink-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CABihn6HpBWHSR9B2-%3DjM%3DvX2j8wnOo-mroanX6JnCJhhg8BqSQ%40mail.gmail.com
>>
>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CABihn6HpBWHSR9B2-%3DjM%3DvX2j8wnOo-mroanX6JnCJhhg8BqSQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>
--
You received this message because you are subscribed to the Google Groups
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b5885d2a-e202-4e75-ad2f-22e5902080a2n%40chromium.org.