Skip to content

build: Fixes for building Cxx w/, w/o stdlib #65222

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

Conversation

drodriguez
Copy link
Contributor

Two cherry-picks: from #65172 and a follow up #65217. The changes in main that those two pull request are trying to fix (#65055 and #65122), were cherry-picked into release/5.9 with #65065, so the same problems that occur in main now occur in release/5.9.

This only affects people building only the compiler with no stdlib (a no stdlib extra toolchain content either), and later using that compiler as host compiler to build the stdlib in isolation.

/cc @egorzhdan

…65172)

With the changes introduced in swiftlang#65055, the Cxx module will build even
when not building the stdlib as long as
`SWIFT_BUILD_STDLIB_EXTRA_TOOLCHAIN_CONTENT` was set. With the further changes
in swiftlang#65122 the previous flag is not necessary, and only
`SWIFT_BUILD_STDLIB_CXX_MODULE` (which defaults to `TRUE`) is necessary.

However, `stdlib/public/Cxx` did rely on `StdlibOptions.cmake` to be
include before it, or the functions that build the target libraries will
find a half configured state. `StdlibOptions.cmake` are included in
`stdlib/toolchain`, in `stdlib/` and `StandaloneOverlay.cmake`. Before swiftlang#65122
it was working just because `stdlib/toolchain` was added just before.

The second changes adds dependencies on the legacy layouts and the clang
headers. The legacy layouts are a dependency only added to the libraries of
the stdlib core (IS_STDLIB_CORE flag). Since enabling that flag also enables
a bunch other stuff, and I am not sure that Cxx should be classified as "core"
anyway, I preferred to add the dependency. The clang headers are another
dependency of the swiftCore, which otherwise causes problems to not find
the compiler headers when building Cxx. This is necessary for builds
that use a previously built compiler to compile the stdlib.

(cherry picked from commit 539fc69)
In swiftlang#65172 I tried to fix a problem when the Cxx module is enabled, but
we are not building the stdlib. The fix work for `swiftCxx`, but failed
to to realize that `swiftCxxStdlib` overlay is also built, which needs
parts of the stdlib.

The original swiftlang#65055 only built the Cxx module when
`EXTRA_TOOLCHAIN_CONTENT` was set, but swiftlang#65122 changed so it was two
independent checks. A more faithful fix will had been to nest the `if`
as I am trying to do with this PR. Parts of swiftlang#65172 are still necessary
to build in every case, though: the `swiftCxx` target is dependent on
the Clang headers and the legacy layouts. Those two pieces are normally
in place because of other targets in upstream builds, but fail to
materialize when the stdlib is trying to be built with the host
compiler.

This one and swiftlang#65172 will need to be cherry-picked to 5.9 because swiftlang#65055
and swiftlang#65122 where cherry-picked, so 5.9 is having the same problems as
`main`.

(cherry picked from commit ccf57da)
@drodriguez drodriguez requested a review from a team as a code owner April 17, 2023 04:54
@drodriguez
Copy link
Contributor Author

@swift-ci please test

@drodriguez drodriguez added 🍒 release cherry pick Flag: Release branch cherry picks swift 5.9 labels Apr 17, 2023
@nkcsgexi nkcsgexi requested a review from edymtt April 17, 2023 16:47
Copy link
Contributor

@egorzhdan egorzhdan left a comment

Choose a reason for hiding this comment

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

Thanks!

@nkcsgexi
Copy link
Contributor

@edymtt does this look safe for 5.9 for you?

@edymtt
Copy link
Contributor

edymtt commented Apr 17, 2023

This looks safe, however I would prefer to test some internal configurations before merging this.

Copy link
Contributor

@edymtt edymtt left a comment

Choose a reason for hiding this comment

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

This change did not regress any of the internal configurations -- this can be merged at your convenience.

@drodriguez drodriguez merged commit a1ed90e into swiftlang:release/5.9 Apr 19, 2023
@drodriguez drodriguez deleted the isolated-stdlib-builds-5.9 branch April 19, 2023 23:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🍒 release cherry pick Flag: Release branch cherry picks swift 5.9
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants