Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[build] Explicitly link against icudata #3118

Closed
wants to merge 1 commit into from

Conversation

Azoy
Copy link
Contributor

@Azoy Azoy commented Dec 4, 2021

In preparation for swiftlang/swift#40340, explicitly link against icudata.

@Azoy Azoy requested a review from compnerd December 4, 2021 02:17
@Azoy Azoy marked this pull request as ready for review December 4, 2021 12:33
@milseman
Copy link
Member

milseman commented Dec 4, 2021

@swift-ci please test

@milseman
Copy link
Member

milseman commented Dec 4, 2021

Do you know if this needs to be merged simultaneously with swiftlang/swift#40340, or can this be merged first?

@milseman
Copy link
Member

milseman commented Dec 4, 2021

CC @compnerd

@@ -396,7 +396,8 @@ endif()
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
target_link_libraries(CoreFoundation PRIVATE
ICU::uc
ICU::i18n)
ICU::i18n
ICU::data)
Copy link
Member

@compnerd compnerd Dec 4, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems wrong. The tests in fact show that this is incorrect - the linking was sufficient. The problem is that the data is not found at runtime. This should be handled via a DT_RUNPATH or DT_RPATH in TestFoundation. This potentially can break the Windows builds. In fact, if nothing else, this doesn't fix the issue - this adds a DT_NEEDED on the icudata, but that won't help.

Copy link
Contributor Author

@Azoy Azoy Dec 5, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my testing, the icudataswift library was not being linked correctly at all in CoreFoundation, and TestFoundation is just an example executable that won't be able to run without the correct path for the data library. The data library seems to be a dependency of i18n and uc and running ldd libFoundation.so returns the following:

libicuucswift.so.65 => /swift/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/lib/swift/linux/x86_64/libicuucswift.so.65 (0x00007fc5f7a03000)
libicui18nswift.so.65 => /swift/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/lib/swift/linux/x86_64/libicui18nswift.so.65 (0x00007fc5f76d0000)
libicudataswift.so.65 => not found

I don't think this is something specific to TestFoundation unless we expect each executable depending on Foundation to pass in DT_RPATH. Also, this was tested with other changes committed to the dropping ICU PR that make this work. Yes, this alone does not solve the issue, but this and the other new changes do at least solve the problem for TestFoundation.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If CoreFoundation itself does not rely on libicudata but only indirectly through libicuuc, I think Saleem is right that we shouldn't add that dependency here. What may fix it instead is to add $ORIGIN to the DT_RPATH of the libicu libraries that we build for linux, which is also needed to fix the currently broken plutil executable that we ship from this repo.

We should've been doing that already and I think it'll fix both that plutil issue and this newly uncovered ICU issue.

@compnerd
Copy link
Member

compnerd commented Dec 4, 2021

Do you know if this needs to be merged simultaneously with apple/swift#40340, or can this be merged first?

Once the change is fixed up, this should be fine to merge first on its own, it will have no detrimental impact.

@Azoy
Copy link
Contributor Author

Azoy commented Dec 7, 2021

Closing because we found a solution that doesn't require this.

@Azoy Azoy closed this Dec 7, 2021
@Azoy Azoy deleted the drop-icu-link-icu-data branch December 7, 2021 05:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants