Skip to content

[android] don't enable WMO as the old driver fails to build with WMO … #851

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

Merged
merged 2 commits into from
Aug 22, 2024

Conversation

hyp
Copy link
Contributor

@hyp hyp commented Aug 14, 2024

…on windows

@hyp
Copy link
Contributor Author

hyp commented Aug 14, 2024

build.ps1 uses the old driver which has an issue with the WMO mode for android here.

@hyp
Copy link
Contributor Author

hyp commented Aug 14, 2024

cc @compnerd @jmschonfeld

@hyp
Copy link
Contributor Author

hyp commented Aug 14, 2024

@swift-ci please test

Copy link
Contributor

@jmschonfeld jmschonfeld left a comment

Choose a reason for hiding this comment

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

build.ps1 uses the old driver which has an issue with the WMO mode for android here.

Is this a bug we're tracking? It'd be nice to know so that we can hopefully fix it. Enabling WMO has a >4x improvement in performance for JSONDecoder in some cases so it'd be great if platforms like Windows and Android can eventually get that too 🙂

@hyp
Copy link
Contributor Author

hyp commented Aug 14, 2024

@jmschonfeld interesting, thanks for mentioning the numbers. That's definitely something that we want to fix. I filed swiftlang/swift#75890 to track this

@hyp
Copy link
Contributor Author

hyp commented Aug 14, 2024

@swift-ci please test

@hyp
Copy link
Contributor Author

hyp commented Aug 15, 2024

@jmschonfeld how does it look now?

Copy link
Contributor

@jmschonfeld jmschonfeld left a comment

Choose a reason for hiding this comment

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

@hyp makes sense to me, could we run a quick test on the swift repo via a cross repo test? (sorry, we don't have any CI on the cmake build in this repo yet so a quick validation on that before merging would be great - we're hoping to enable that on this repo in the future)

if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
# Don't enable WMO on Windows hosts due to linker failures, and the use of swift's
# old driver from build.ps1 when building for windows/android on a windows host.
if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
Copy link
Member

Choose a reason for hiding this comment

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

Can we just drop this or conditionalise it on the CMake version? CMake has had -wmo as the default since 3.26. The compilation mode defaults were also part of the release when CMP0157 was introduced. Effectively, this is just to enable -wmo with CMake 3.24..<3.26.

Copy link
Contributor

@jmschonfeld jmschonfeld Aug 16, 2024

Choose a reason for hiding this comment

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

I originally tried dropping this conditional (and enabling WMO on Windows via this CMake code) and CI failed with errors such as the following:

FoundationEssentials-a79a82.o : error LNK2019: unresolved external symbol _foundation_uuid_unparse_upper referenced in function $s20FoundationEssentials4UUIDV10uuidStringSSvg
FoundationEssentials-a79a82.o : error LNK2019: unresolved external symbol _stringshims_strtod_l referenced in function $s20FoundationEssentials15JSONDecoderImpl33_B7023549748C8ED7BD56D5ACF500CBFALLC33_slowpath_unwrapFixedWidthInteger2as5json512numberBuffer10fullSource14digitBeginning3for_xxm_SbAA0T4ViewVys5UInt8VGApA0tZ5IndexVyAOGAA15_CodingPathNodeOq_SgtKs0noP0Rzs9CodingKeyR_r0_lFZ

It seemed there was an issue with WMO + the CShims on Windows. If we can find a way to enable WMO on these platforms I'm all for it, but we should double check that CI passes to make sure we don't hit these issues again

Copy link
Member

Choose a reason for hiding this comment

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

Well, the problem is that WMO doesn't work very well with the old driver :(. When we build the toolchain, we don't yet have swift-driver as we need Foundation to build swift-driver. We can elide the WMO on Windows using -D CMAKE_Swift_COMPILER_USE_OLD_DRIVER=YES to workaround the issue for now. We will want to consider a multi-stage build so we can build with the new driver.

@hyp
Copy link
Contributor Author

hyp commented Aug 22, 2024

@compnerd I tested CMAKE_Swift_COMPILER_USE_OLD_DRIVER=YES, but it doesn't seem to help here for android specifically, so it looks like we still need this until we migrate over to the new driver.

@jmschonfeld do you mind merging this in ? I ran the cross-PR testing in swiftlang/swift#75927

@jmschonfeld jmschonfeld merged commit 9c71a4a into swiftlang:main Aug 22, 2024
3 checks passed
cthielen pushed a commit to cthielen/swift-foundation that referenced this pull request Nov 8, 2024
swiftlang#851)

* [android] don't enable WMO as the old driver fails to build with WMO on windows

* Switch to host system name check
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.

3 participants