Commit Graph

15 Commits

Author SHA1 Message Date
Doug Gregor
81afe50f0a Merge pull request #39756 from DougGregor/back-deployed-concurrency-disable-exclusivity 2021-10-14 21:14:11 -07:00
Doug Gregor
18323ddda9 Disable runtime exclusivity checking when using back-deployed concurrency.
The back-deployed concurrency libraries and older Swift runtimes are
not compatible, so turn off runtime exclusivity checking when running on
older systems. Fixes rdar://84274148.
2021-10-14 15:40:33 -07:00
Doug Gregor
618f0deb49 Force-link the Objective-C library in the back-deployed concurrency libs. 2021-10-14 12:30:37 -07:00
Doug Gregor
0ab6355e7c Include SwiftNativeNSObject in the back-deployed concurrency library.
SwiftNativeNSObject is part of the core runtime on OS versions that
also have the concurrency library, so we need to include a copy of
it with the back-deployed concurrency library.
2021-10-03 22:06:59 -07:00
Doug Gregor
2747285417 Always use the same TLS context as the runtime for back-deployed concurrency
The exclusivity checking support for concurrency relies on having access
to the thread-local set of active memory accesses. Teach the
back-deployed concurrency library to use the same TLS context as the
runtime, which fortunately hasn't change. This fixes the
concurrency exclusivity-checking test in back-deployed configurations
that's tracked by rdar://83064974.
2021-10-01 17:13:02 -07:00
John McCall
a76b304f00 Allow building a concurrent libSwiftConcurrency without libdispatch
The goal here is not to eventually implement a concurrent thread
pool ourselves.  We're just making it easier for integrators who
have their own pool and don't want to use Dispatch to build the
Swift concurrency runtime.  Just hook the right functions and
you should be fine.

The necessary functions to hook are:
- swift_task_enqueueGlobal
- swift_task_enqueueGlobalAfterDelay

The following functions *would* be necessary to hook:
- swift_task_enqueueMainExecutor
- swift_task_asyncMainDrainQueue (only if you have an async main?)
However, this configuration does not currently properly support
the main executor, and so `@MainActor` should be avoided for now.

rdar://83513751
2021-10-01 02:15:03 -04:00
Eric Miotto
91ce9c2db7 Set CMake minimum version for back-deploy concurrency
This is needed to be able to invoke the `CMakeList.txt` directly for
internal scenarios.
2021-09-16 15:55:41 -07:00
Arnold Schwaighofer
2381233ac1 Add flag -swift-async-framepointer=auto,never,always to
control swift extended frame information emission

On linux we default to disable the extended frame info (since the system
libraries don't support it).

On darwin the default is to automatically choose based on the deployment target.

The Concurrency library explicitly forces extended frame information and the
back deployment library explicitly disables it.
2021-09-14 12:47:16 -07:00
Doug Gregor
5b027ca456 Back-deploy creation of global-actor-qualified function type metadata.
When back-deploying, create global-actor-qualified function types via a
separate entrypoint
(`swift_getFunctionTypeMetadataGlobalActorBackDeploy`) in the
compatibility library, which checks whether it is running with a
new-enough runtime to use `swift_getFunctionTypeMetadataGlobalActor`.
Failing that, it calls into a separate copy of the implementation that
exists only in the back-deployed concurrency library.

Fixes rdar://79153988.
2021-09-13 10:35:47 -07:00
Doug Gregor
c49aa754de Ensure that we build back-deployed concurrency libraries with library evolution 2021-09-09 21:16:57 -07:00
Doug Gregor
6fd85ac7a3 Clone exclusivity save/restore for tasks into back-deployment library
The code that saves/restores the exclusivity checks for tasks was
newly introduced into the runtime. Clone that code into the back-
deployed version of the runtime.
2021-08-30 16:39:33 -07:00
Doug Gregor
75a58312ea Build the back-deployed _Concurrency library with an @rpath install name
When linking against the back-deployed _Concurrency library, ensure that
clients record an `@rpath`-relative dependency.
2021-08-27 14:04:47 -07:00
Doug Gregor
ebd7b49755 Build compiler, other libraries, and tests for back-deployed concurrency.
When build-script is given `--back-deploy-concurrency`, also use that
to build other parts of Swift with the back-deployed versions:

* The compiler allows async and actors to be defined with the
back-deployed availability, e.g., the same as `-Xfrontend
-enable-experimental-back-deploy-concurrency`. (The latter will go
away soon)
* The standard library unit testing framework and distributed actors
library are build with the older OS versions.
* The tests use the older OS versions, with some adjustments to make
them agnostic to the back-deployment setting.
2021-08-26 08:49:44 -07:00
Doug Gregor
f2995a3755 Optionally build the compiler and _Concurrency library for back deployment.
When enabling the build of the back-deployable concurrency library via
the build-script option `--back-deploy-concurrency`, also build the
compiler and (main) concurrency library to support older deployment targets.

Building the compiler for older deployment targets is effectively the
same as implicitly passing
`-Xfrontend -enable-experimental-back-deploy-concurrency`. That option
should probably go away.

Building the primary _Concurrency library for back-deployment means
setting the "SwiftStdlib 5.5" availability back to the earlier
deployment targets. This should have no effect on how the _Concurrency
library binary is built, but it does ensure that the right
availability annotations are in the _Concurrency module.
2021-08-26 08:49:44 -07:00
Doug Gregor
3f749dc13b Add an option to build the concurrency library for back deployment.
Introduce an additional build product to build-script to build
back-deployable concurrency libraries. These libraries would need to
be embedded in apps deployed prior to macOS 12/iOS 15 to support
concurrency.

The built-script option `--back-deploy-concurrency` can be provided to
build these back-deployment libraries. They are built in addition to
the normal concurrency libraries, as a separate product that installs
into `lib/swift-5.5/<platform>` within the toolchain. The macro
`SWIFT_CONCURRENCY_BACK_DEPLOYMENT` is set when building the
concurrency library, so that we can adapt the implementation to older
OS's.
2021-08-26 08:49:43 -07:00