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

[CAS] swift dependency scanning using CAS for compiler caching #66366

Merged
merged 4 commits into from
Jun 12, 2023

Conversation

cachemeifyoucan
Copy link
Contributor

Teach swift dependency scanner to scan dependency with a CAS for compiler caching.

include/swift/AST/ModuleDependencies.h Outdated Show resolved Hide resolved
include/swift/AST/ModuleDependencies.h Outdated Show resolved Hide resolved
include/swift/AST/ModuleDependencies.h Outdated Show resolved Hide resolved
include/swift/AST/ModuleDependencies.h Outdated Show resolved Hide resolved
include/swift/AST/ModuleDependencies.h Show resolved Hide resolved
SwiftDependencyScanningService::SwiftDependencyScanningService() {
ClangScanningService.emplace(
clang::tooling::dependencies::ScanningMode::DependencyDirectivesScan,
clang::tooling::dependencies::ScanningOutputFormat::FullTree,
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this to be set irrespective of whether CAS is used?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Default initializer just creates a non-CAS scanning service. I still need to improve to create different ClangScanningService for different CASOptions.

lib/AST/ModuleDependencies.cpp Show resolved Hide resolved
lib/ClangImporter/ClangModuleDependencyScanner.cpp Outdated Show resolved Hide resolved
@cachemeifyoucan
Copy link
Contributor Author

@swift-ci please smoke test

@cachemeifyoucan
Copy link
Contributor Author

@swift-ci please smoke test

Using clang include tree for dependency scanning and building for all
clang modules and PCHs.
@cachemeifyoucan
Copy link
Contributor Author

@swift-ci please smoke test

Remove a trailing common that makes the JSON output from
`-scan-dependencies` to be invalide JSON format.
@cachemeifyoucan
Copy link
Contributor Author

@swift-ci please smoke test

@cachemeifyoucan
Copy link
Contributor Author

@swift-ci please test windows platform

@cachemeifyoucan cachemeifyoucan merged commit b1f99b8 into apple:main Jun 12, 2023
3 checks passed
hjyamauchi pushed a commit to hjyamauchi/swift that referenced this pull request Jun 28, 2023
…#66366)

Teach swift dependency scanner to use CAS to capture the full dependencies for a build and construct build commands with immutable inputs from CAS.

This allows swift compilation caching using CAS.
drodriguez added a commit to drodriguez/swift that referenced this pull request Jul 12, 2023
The code of `ScanDependencies.cpp` was creating invalid JSON since apple#66031
because in the case of having `extraPcmArgs` and `swiftOverlayDependencies`,
but not `bridgingHeader`, a comma will not be added at the end of
`extraPcmArgs`, creating an invalid JSON file. Additionally that same PR
added a trailing comma at the end of the `swiftOverlayDependencies`, which
valid JSON does not allow, but that bug was removed in apple#66366.

Both problems are, however, present in the 5.9 branch, because apple#66936
included apple#66031, but not apple#66366.

Besides fixing the problem in `ScanDependencies.cpp` I modified every test
that uses `--scan-dependencies` to pass the produced JSON through
Python's `json.tool` in order to validate proper JSON is produced. In
most cases I was able to pipe the output of the tool into `FileCheck`,
but in some cases the validation is done by itself because the checks
depend on the exact format generated by `--scan-dependencies`. In
a couple of tests I added a call to `FileCheck` that seemed to be
missing.

Without these changes, two tests seems to be generating invalid JSON in
my machine:

- `ScanDependencies/local_cache_consistency.swift` (which outputs `Expecting ',' delimiter: line 525 column 11 (char 22799)`)
- `ScanDependencies/placholder_overlay_deps.swift`
drodriguez added a commit that referenced this pull request Jul 12, 2023
…67246)

The code of `ScanDependencies.cpp` was creating invalid JSON since #66031
because in the case of having `extraPcmArgs` and `swiftOverlayDependencies`,
but not `bridgingHeader`, a comma will not be added at the end of
`extraPcmArgs`, creating an invalid JSON file. Additionally that same PR
added a trailing comma at the end of the `swiftOverlayDependencies`, which
valid JSON does not allow, but that bug was removed in #66366.

Both problems are, however, present in the 5.9 branch, because #66936
included #66031, but not #66366.

Besides fixing the problem in `ScanDependencies.cpp` I modified every test
that uses `--scan-dependencies` to pass the produced JSON through
Python's `json.tool` in order to validate proper JSON is produced. In
most cases I was able to pipe the output of the tool into `FileCheck`,
but in some cases the validation is done by itself because the checks
depend on the exact format generated by `--scan-dependencies`. In
a couple of tests I added a call to `FileCheck` that seemed to be
missing.

Without these changes, two tests seems to be generating invalid JSON in
my machine:

- `ScanDependencies/local_cache_consistency.swift` (which outputs `Expecting ',' delimiter: line 525 column 11 (char 22799)`)
- `ScanDependencies/placholder_overlay_deps.swift`
drodriguez added a commit that referenced this pull request Jul 14, 2023
…es. (#67265)

The code of `ScanDependencies.cpp` was creating invalid JSON since #66031
because in the case of having `extraPcmArgs` and `swiftOverlayDependencies`,
but not `bridgingHeader`, a comma will not be added at the end of
`extraPcmArgs`, creating an invalid JSON file. Additionally that same PR
added a trailing comma at the end of the `swiftOverlayDependencies`, which
valid JSON does not allow, but that bug was removed in #66366.

Both problems are, however, present in the 5.9 branch, because #66936
included #66031, but not #66366.

Besides fixing the problem in `ScanDependencies.cpp` I modified every test
that uses `--scan-dependencies` to pass the produced JSON through
Python's `json.tool` in order to validate proper JSON is produced. In
most cases I was able to pipe the output of the tool into `FileCheck`,
but in some cases the validation is done by itself because the checks
depend on the exact format generated by `--scan-dependencies`. In
a couple of tests I added a call to `FileCheck` that seemed to be
missing.

Without these changes, two tests seems to be generating invalid JSON in
my machine:

- `ScanDependencies/local_cache_consistency.swift` (which outputs `Expecting ',' delimiter: line 525 column 11 (char 22799)`)
- `ScanDependencies/placholder_overlay_deps.swift`

Additional changes for the cherry-pick:

- Removed some changes in some CAS tests that are not present in
  release/5.9.
- Switch `trailingComma` from `true` to `false` for
  `swiftOverlayDependencies` similar to what #66366 did in `main`.
- Remove the new `RUN` line in `optional_deps_of_testable_imports.swift`
  because it fails in 5.9 if the `CHECK` is performed.

(cherry picked from commit 7de1089)
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.

None yet

2 participants