mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[CMake] Stop compiling API notes files to a binary format (#19205)
Clang's been able to read the textual format for a long time, and indeed that's what's used in the SDK. This isn't even really a performance win because the information is cached in PCMs. rdar://problem/34293901
This commit is contained in:
@@ -6,75 +6,12 @@ original Objective-C headers. This semantic information can then be
|
|||||||
used by the Swift compiler when importing the corresponding Objective-C
|
used by the Swift compiler when importing the corresponding Objective-C
|
||||||
module to provide a better mapping of Objective-C APIs into Swift.
|
module to provide a better mapping of Objective-C APIs into Swift.
|
||||||
|
|
||||||
API notes are organized into a set of `.apinotes` files. Each
|
API notes are organized into a set of `.apinotes` files. Each `.apinotes` file
|
||||||
`.apinotes` file contains annotations for a single Objective-C module,
|
contains annotations for a single Objective-C module, written in YAML (FIXME:
|
||||||
written in YAML (FIXME: to be) described below. These YAML sources
|
to be) described in the Clang repository. These YAML sources are lazily loaded
|
||||||
must be manually compiled into a binary representation (`.apinotesc`)
|
by the Swift compiler when it imports the corresponding framework, also
|
||||||
that the Swift compiler will lazily load when it builds code, also
|
|
||||||
described below.
|
described below.
|
||||||
|
|
||||||
# API Notes YAML Format
|
|
||||||
|
|
||||||
TBD...
|
|
||||||
|
|
||||||
# Compiling API notes
|
|
||||||
|
|
||||||
The Swift compiler lazily loads API notes from compiled API notes
|
|
||||||
files (`.apinotesc` files) and uses these annotations to affect the
|
|
||||||
Swift signatures of imported Objective-C APIs. Compiled API notes
|
|
||||||
files reside in the Swift module directory, i.e., the same directory
|
|
||||||
where the `.swiftmodule` file would reside for the Swift overlay of
|
|
||||||
that module. For system modules, the path depends on the platform
|
|
||||||
and architecture.
|
|
||||||
|
|
||||||
Platform | Path
|
|
||||||
:------------- | :-------------
|
|
||||||
macOS | `$SWIFT_EXEC/lib/swift/macosx/`
|
|
||||||
iOS (32-bit) | `$SWIFT_EXEC/lib/swift/iphoneos/32`
|
|
||||||
iOS (64-bit) | `$SWIFT_EXEC/lib/swift/iphoneos`
|
|
||||||
iOS Simulator (32-bit) | `$SWIFT_EXEC/lib/swift/iphonesimulator/32`
|
|
||||||
iOS Simulator (64-bit) | `$SWIFT_EXEC/lib/swift/iphonesimulator`
|
|
||||||
|
|
||||||
where `$SWIFT_EXEC/bin/swift` is the path to the Swift compiler
|
|
||||||
executable.
|
|
||||||
|
|
||||||
When updating API notes for a system module, recompile the API notes
|
|
||||||
and place the result in the appropriate directories listed above. The
|
|
||||||
Swift compiler itself need not be recompiled except in rare cases
|
|
||||||
where the changes affect how the SDK overlays are built. To recompile
|
|
||||||
API notes for a given module `$MODULE` and place them into their
|
|
||||||
|
|
||||||
### macOS
|
|
||||||
```
|
|
||||||
xcrun swift -apinotes -yaml-to-binary -target x86_64-apple-macosx10.10 -o $SWIFT_EXEC/lib/swift/macosx/$MODULE.apinotesc $MODULE.apinotes
|
|
||||||
```
|
|
||||||
|
|
||||||
### iOS (32-bit)
|
|
||||||
```
|
|
||||||
xcrun swift -apinotes -yaml-to-binary -target armv7-apple-ios7.0 -o $SWIFT_EXEC/lib/swift/iphoneos/32/$MODULE.apinotesc $MODULE.apinotes
|
|
||||||
```
|
|
||||||
|
|
||||||
### iOS (64-bit)
|
|
||||||
```
|
|
||||||
xcrun swift -apinotes -yaml-to-binary -target arm64-apple-ios7.0 -o $SWIFT_EXEC/lib/swift/iphoneos/$MODULE.apinotesc $MODULE.apinotes
|
|
||||||
```
|
|
||||||
|
|
||||||
### iOS Simulator (32-bit)
|
|
||||||
```
|
|
||||||
xcrun swift -apinotes -yaml-to-binary -target i386-apple-ios7.0 -o $SWIFT_EXEC/lib/swift/iphonesimulator/32/$MODULE.apinotesc $MODULE.apinotes
|
|
||||||
```
|
|
||||||
|
|
||||||
### iOS Simulator (64-bit)
|
|
||||||
```
|
|
||||||
xcrun swift -apinotes -yaml-to-binary -target x86_64-apple-ios7.0 -o $SWIFT_EXEC/lib/swift/iphonesimulator/$MODULE.apinotesc $MODULE.apinotes
|
|
||||||
```
|
|
||||||
|
|
||||||
To add API notes for a system module `$MODULE` that does not have them yet,
|
To add API notes for a system module `$MODULE` that does not have them yet,
|
||||||
create a new source file `$MODULE.apinotes` and update CMakeLists.txt.
|
create a new source file `$MODULE.apinotes` and update CMakeLists.txt.
|
||||||
Updated API notes will be found by the build system during the next build.
|
Updated API notes will be found by the build system during the next build.
|
||||||
|
|
||||||
Note that Swift provides decompilation of binary API notes files via
|
|
||||||
the `-apinotes -binary-to-yaml` option, which allows one to inspect
|
|
||||||
the information the compiler is using internally. The order of the
|
|
||||||
entities in the original YAML input is not preserved, so all entities
|
|
||||||
in the resulting YAML output are sorted alphabetically.
|
|
||||||
|
|||||||
@@ -354,16 +354,14 @@ function(_compile_swift_files
|
|||||||
set(apinote_files)
|
set(apinote_files)
|
||||||
|
|
||||||
foreach(apinote_module ${SWIFTFILE_API_NOTES})
|
foreach(apinote_module ${SWIFTFILE_API_NOTES})
|
||||||
set(apinote_file "${module_dir}/${apinote_module}.apinotesc")
|
set(apinote_file "${module_dir}/${apinote_module}.apinotes")
|
||||||
set(apinote_input_file
|
set(apinote_input_file
|
||||||
"${SWIFT_API_NOTES_PATH}/${apinote_module}.apinotes")
|
"${SWIFT_API_NOTES_PATH}/${apinote_module}.apinotes")
|
||||||
|
|
||||||
list(APPEND command_create_apinotes
|
list(APPEND command_create_apinotes
|
||||||
COMMAND
|
COMMAND
|
||||||
"${swift_compiler_tool}" "-apinotes" "-yaml-to-binary"
|
"${CMAKE_COMMAND}" "-E" "copy_if_different"
|
||||||
"-o" "${apinote_file}"
|
"${apinote_input_file}" "${apinote_file}")
|
||||||
"-target" "${SWIFT_SDK_${SWIFTFILE_SDK}_ARCH_${SWIFTFILE_ARCHITECTURE}_TRIPLE}"
|
|
||||||
"${apinote_input_file}")
|
|
||||||
list(APPEND depends_create_apinotes "${apinote_input_file}")
|
list(APPEND depends_create_apinotes "${apinote_input_file}")
|
||||||
|
|
||||||
list(APPEND apinote_files "${apinote_file}")
|
list(APPEND apinote_files "${apinote_file}")
|
||||||
@@ -447,10 +445,9 @@ function(_compile_swift_files
|
|||||||
COMMAND ""
|
COMMAND ""
|
||||||
OUTPUT ${apinotes_outputs}
|
OUTPUT ${apinotes_outputs}
|
||||||
DEPENDS
|
DEPENDS
|
||||||
${swift_compiler_tool_dep}
|
|
||||||
${depends_create_apinotes}
|
${depends_create_apinotes}
|
||||||
${obj_dirs_dependency_target}
|
${obj_dirs_dependency_target}
|
||||||
COMMENT "Generating API notes ${first_output}")
|
COMMENT "Copying API notes for ${first_output}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Then we can compile both the object files and the swiftmodule files
|
# Then we can compile both the object files and the swiftmodule files
|
||||||
|
|||||||
Reference in New Issue
Block a user