mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
LibCrypt: Link the SHA2 hash implementation into LibCrypt privately
Previously, we linked LibCrypt against LibCrypto. This creates a circular symbol dependency between LibCore, LibCrypto and LibCrypt. LibCrypto uses Core::DateTime, LibCrypt uses Crypto::SHA2, and LibCore uses crypt in Core::Account. The GNU toolchain massages the DT_NEEDED lines of each library and applications that use each library such that the Loader finds all the symbols as necessary. However, when using the Clang toolchain, the circular library dependency is not as tolerated. We get a symbol not found error in the Loader at runtime, and the app in question crashes. Now, we build the SHA2.cpp implementation file into LibCrypt using an object library and `-fvisibility=hidden -fvisibility-hidden-inlines`. This adds the implementation in a way that only creates STB_LOCAL symbols and should avoid nasty ODR problems in the future. An alternative approach to resolving this dependency would be to move Core::DateTime to AK, or to make Crypto::ASN1::parse_utc_date return a struct tm instead of a Core::DateTime. One of those approaches to remove the LibCore dependency from LibCrypto should probabably be investigated further in the future. The net effect of removing this circular library dependency is that one can now build and run the python3 port with the Clang toolchain :^)
This commit is contained in:
parent
3ff7b76502
commit
e687e5ba74
Notes:
sideshowbarker
2024-07-17 21:25:20 +09:00
Author: https://github.com/ADKaster Commit: https://github.com/SerenityOS/serenity/commit/e687e5ba747 Pull-request: https://github.com/SerenityOS/serenity/pull/11722 Reviewed-by: https://github.com/BertalanD Reviewed-by: https://github.com/linusg
1 changed files with 9 additions and 1 deletions
|
@ -1,6 +1,14 @@
|
|||
|
||||
# HACK ALERT!
|
||||
# To avoid a circular dependency chain with LibCrypt --> LibCrypto --> LibCore --> LibCrypt
|
||||
# We include the SHA2 implementation from LibCrypto here manually
|
||||
add_library(LibCryptSHA2 OBJECT ../LibCrypto/Hash/SHA2.cpp)
|
||||
set_target_properties(LibCryptSHA2 PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
||||
set_target_properties(LibCryptSHA2 PROPERTIES VISIBILITY_INLINES_HIDDEN ON)
|
||||
|
||||
set(SOURCES
|
||||
crypt.cpp
|
||||
)
|
||||
|
||||
serenity_libc(LibCrypt crypt)
|
||||
target_link_libraries(LibCrypt LibC LibCrypto)
|
||||
target_link_libraries(LibCrypt LibC LibCryptSHA2)
|
||||
|
|
Loading…
Reference in a new issue