mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
193 lines
10 KiB
Swift
193 lines
10 KiB
Swift
// RUN: %empty-directory(%t)
|
|
|
|
// 1) Build a prebuilt cache for our SDK
|
|
//
|
|
// RUN: mkdir %t/MCP %t/prebuilt-cache %t/my-sdk
|
|
// RUN: cp -r %S/Inputs/mock-sdk/. %t/my-sdk
|
|
// RUN: %target-swift-frontend -compile-module-from-interface -serialize-parseable-module-interface-dependency-hashes -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -I %t/my-sdk -module-cache-path %t/MCP -o %t/prebuilt-cache/ExportedLib.swiftmodule -track-system-dependencies -module-name ExportedLib %t/my-sdk/ExportedLib.swiftinterface
|
|
// RUN: %target-swift-frontend -compile-module-from-interface -serialize-parseable-module-interface-dependency-hashes -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -I %t/my-sdk -module-cache-path %t/MCP -o %t/prebuilt-cache/SdkLib.swiftmodule -track-system-dependencies -module-name SdkLib %t/my-sdk/SdkLib.swiftinterface
|
|
//
|
|
// Check the prebuilt modules don't contain dependencies in the module cache, prebuilt cache, or resource dir
|
|
// RUN: llvm-bcanalyzer -dump %t/prebuilt-cache/ExportedLib.swiftmodule | %FileCheck %s -check-prefix=PREBUILT
|
|
// RUN: llvm-bcanalyzer -dump %t/prebuilt-cache/SdkLib.swiftmodule | %FileCheck %s -check-prefix=PREBUILT
|
|
//
|
|
// PREBUILT: MODULE_BLOCK
|
|
// PREBUILT-NOT: FILE_DEPENDENCY {{.*[/\\]MCP[/\\]}}
|
|
// PREBUILT-NOT: FILE_DEPENDENCY {{.*[/\\]prebuilt-cache[/\\]}}
|
|
// PREBUILD-NOT: FILE_DEPENDENCY {{.*[/\\]lib[/\\]swift[/\\]}}
|
|
//
|
|
// Re-build them in the opposite order
|
|
// RUN: %empty-directory(%t/prebuilt-cache)
|
|
// RUN: %empty-directory(%t/MCP)
|
|
// RUN: %target-swift-frontend -compile-module-from-interface -serialize-parseable-module-interface-dependency-hashes -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -I %t/my-sdk -module-cache-path %t/MCP -o %t/prebuilt-cache/SdkLib.swiftmodule -track-system-dependencies -module-name SdkLib %t/my-sdk/SdkLib.swiftinterface
|
|
// RUN: %target-swift-frontend -compile-module-from-interface -serialize-parseable-module-interface-dependency-hashes -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -I %t/my-sdk -module-cache-path %t/MCP -o %t/prebuilt-cache/ExportedLib.swiftmodule -track-system-dependencies -module-name ExportedLib %t/my-sdk/ExportedLib.swiftinterface
|
|
//
|
|
// Check they still don't contain dependencies in the module cache or prebuilt cache
|
|
// RUN: llvm-bcanalyzer -dump %t/prebuilt-cache/ExportedLib.swiftmodule | %FileCheck %s -check-prefix=PREBUILT
|
|
// RUN: llvm-bcanalyzer -dump %t/prebuilt-cache/SdkLib.swiftmodule | %FileCheck %s -check-prefix=PREBUILT
|
|
//
|
|
// RUN: %empty-directory(%t/MCP)
|
|
// RUN: echo '1: PASSED'
|
|
|
|
|
|
// 2) Baseline check: Make sure we use the interface when not passing the prebuilt module cache path
|
|
//
|
|
// RUN: %target-swift-frontend -typecheck -I %t/my-sdk -sdk %t/my-sdk -module-cache-path %t/MCP -emit-dependencies-path %t/dummy.d -track-system-dependencies -disable-modules-validate-system-headers %s
|
|
//
|
|
// Check SdkLib and ExportedLib are in the module cache
|
|
// RUN: test -f %t/MCP/ExportedLib-*.swiftmodule
|
|
// RUN: test -f %t/MCP/SdkLib-*.swiftmodule
|
|
//
|
|
// Check they are *not* forwarding modules
|
|
// RUN: not %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: not %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/ExportedLib-*.swiftmodule
|
|
//
|
|
// Check they don't contain dependencies in the module cache (..or prebuilt cache)
|
|
// RUN: llvm-bcanalyzer -dump %t/MCP/SdkLib-*.swiftmodule | %FileCheck %s -check-prefix=PREBUILT
|
|
// RUN: llvm-bcanalyzer -dump %t/MCP/ExportedLib-*.swiftmodule | %FileCheck %s -check-prefix=PREBUILT
|
|
//
|
|
// Check we didn't emit anything from the cache in the .d file either
|
|
// RUN: cat %t/dummy.d | %FileCheck %s -check-prefix=DEPFILE-NEGATIVE
|
|
// RUN: cat %t/dummy.d | %FileCheck %s -check-prefix=DEPFILE
|
|
//
|
|
// DEPFILE-NEGATIVE-NOT: {{[/\\]MCP[/\\]}}
|
|
// DEPFILE-NEGATIVE-NOT: {{[/\\]prebuilt-cache[/\\]}}
|
|
//
|
|
// DEPFILE-DAG: SomeCModule.h
|
|
// DEPFILE-DAG: SdkLib.swiftinterface
|
|
// DEPFILE-DAG: ExportedLib.swiftinterface
|
|
// DEPFILE-DAG: SDKDependencies-disable-validation.swift
|
|
//
|
|
// RUN: %empty-directory(%t/MCP)
|
|
// RUN: echo '2: PASSED'
|
|
|
|
|
|
// 3) Baseline check: Make sure we use the the prebuilt module cache when using the SDK it was built with
|
|
//
|
|
// RUN: %target-swift-frontend -typecheck -I %t/my-sdk -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -module-cache-path %t/MCP -emit-dependencies-path %t/dummy.d -track-system-dependencies -disable-modules-validate-system-headers %s
|
|
//
|
|
// Check SdkLib and ExportedLib are in the module cache
|
|
// RUN: test -f %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: test -f %t/MCP/ExportedLib-*.swiftmodule
|
|
//
|
|
// Check they *are* forwarding modules
|
|
// RUN: %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/ExportedLib-*.swiftmodule
|
|
//
|
|
// Check they contain the expected dependencies
|
|
// RUN: cat %t/MCP/ExportedLib-*.swiftmodule | %FileCheck %s -check-prefix=EXLIB
|
|
// RUN: cat %t/MCP/SdkLib-*.swiftmodule | %FileCheck %s -check-prefixes=EXLIB,SDKLIB
|
|
//
|
|
// EXLIB: dependencies:
|
|
// EXLIB-DAG: path: '{{usr[/\\]include[/\\]}}module.modulemap'
|
|
// EXLIB-DAG: path: '{{usr[/\\]include[/\\]}}SomeCModule.h'
|
|
// EXLIB-DAG: path: ExportedLib.swiftinterface
|
|
// SDKLIB-DAG: SdkLib.swiftinterface
|
|
//
|
|
// Check they don't contain any dependencies from either cache other than themselves
|
|
// RUN: cat %t/MCP/ExportedLib-*.swiftmodule | %FileCheck %s -check-prefix=NOCACHE -DLIB_NAME=ExportedLib
|
|
// RUN: cat %t/MCP/SdkLib-*.swiftmodule | %FileCheck %s -check-prefix=NOCACHE -DLIB_NAME=SdkLib
|
|
//
|
|
// NOCACHE: dependencies:
|
|
// NOCACHE-NOT: {{[/\\]prebuilt-cache[/\\]}}
|
|
// NOCACHE-NOT: {{[/\\]MCP[/\\]}}
|
|
// NOCACHE: {{[/\\]prebuilt-cache[/\\]}}[[LIB_NAME]].swiftmodule
|
|
// NOCACHE-NOT: {{[/\\]prebuilt-cache[/\\]}}
|
|
// NOCACHE-NOT: {{[/\\]MCP[/\\]}}
|
|
//
|
|
// Check we didn't emit anything from the cache in the .d file either
|
|
// RUN: cat %t/dummy.d | %FileCheck %s -check-prefix=DEPFILE-NEGATIVE
|
|
// RUN: cat %t/dummy.d | %FileCheck %s -check-prefix=DEPFILE
|
|
//
|
|
// RUN: echo '3: PASSED'
|
|
|
|
|
|
// 4) Now change the SDK's content WITHOUT clearing the module cache and check
|
|
// that it doesn't change anything...
|
|
//
|
|
// RUN: echo "// size change" >> %t/my-sdk/SdkLib.swiftinterface
|
|
// RUN: %target-swift-frontend -typecheck -I %t/my-sdk -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -module-cache-path %t/MCP -emit-dependencies-path %t/dummy.d -track-system-dependencies -disable-modules-validate-system-headers %s
|
|
//
|
|
// Check SDKLib and ExportedLib are in the module cache
|
|
// RUN: test -f %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: test -f %t/MCP/ExportedLib-*.swiftmodule
|
|
//
|
|
// Check that they're both still forwarding modules, because we didn't stat
|
|
// the system dependencies.
|
|
// RUN: %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/ExportedLib-*.swiftmodule
|
|
// RUN: %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/SdkLib-*.swiftmodule
|
|
//
|
|
// Check ExportedLib still contains the same dependencies
|
|
// RUN: cat %t/MCP/ExportedLib-*.swiftmodule | %FileCheck %s -check-prefix=EXLIB
|
|
// RUN: cat %t/MCP/ExportedLib-*.swiftmodule | %FileCheck %s -check-prefix=NOCACHE -DLIB_NAME=ExportedLib
|
|
//
|
|
// RUN: echo '4: PASSED'
|
|
|
|
// 5) ...but if we clear the module cache and start over, we won't be using the
|
|
// prebuilt module anymore for SDKLib.
|
|
//
|
|
// RUN: %empty-directory(%t/MCP)
|
|
// RUN: %target-swift-frontend -typecheck -I %t/my-sdk -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -module-cache-path %t/MCP -emit-dependencies-path %t/dummy.d -track-system-dependencies -disable-modules-validate-system-headers %s
|
|
//
|
|
// Check SDKLib and ExportedLib are in the module cache
|
|
// RUN: test -f %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: test -f %t/MCP/ExportedLib-*.swiftmodule
|
|
//
|
|
// Check ExportedLib is still a forwarding module and SdkLib is not
|
|
// RUN: %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/ExportedLib-*.swiftmodule
|
|
// RUN: not %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/SdkLib-*.swiftmodule
|
|
//
|
|
// Check ExportedLib still contains the same dependencies
|
|
// RUN: cat %t/MCP/ExportedLib-*.swiftmodule | %FileCheck %s -check-prefix=EXLIB
|
|
// RUN: cat %t/MCP/ExportedLib-*.swiftmodule | %FileCheck %s -check-prefix=NOCACHE -DLIB_NAME=ExportedLib
|
|
//
|
|
// Check SdkLib doesn't contain dependencies in the module cache or prebuilt cache
|
|
// RUN: llvm-bcanalyzer -dump %t/MCP/SdkLib-*.swiftmodule | %FileCheck %s -check-prefix=PREBUILT
|
|
//
|
|
// RUN: echo '5: PASSED'
|
|
|
|
// 6) If we do one more change, we won't rebuild SdkLib *again*...
|
|
//
|
|
// RUN: %{python} %S/Inputs/make-old.py %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: echo "// size change" >> %t/my-sdk/SdkLib.swiftinterface
|
|
// RUN: %target-swift-frontend -typecheck -I %t/my-sdk -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -module-cache-path %t/MCP -emit-dependencies-path %t/dummy.d -track-system-dependencies -disable-modules-validate-system-headers %s
|
|
//
|
|
// Check SDKLib and ExportedLib are in the module cache
|
|
// RUN: test -f %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: test -f %t/MCP/ExportedLib-*.swiftmodule
|
|
//
|
|
// Check ExportedLib is still a forwarding module and SdkLib is not
|
|
// RUN: %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/ExportedLib-*.swiftmodule
|
|
// RUN: not %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/SdkLib-*.swiftmodule
|
|
//
|
|
// Check SdkLib hasn't been rebuilt.
|
|
// RUN: %{python} %S/Inputs/check-is-old.py %t/MCP/SdkLib-*.swiftmodule
|
|
//
|
|
// RUN: echo '6: PASSED'
|
|
|
|
// 7) ...until we turn off -disable-modules-validate-system-headers.
|
|
//
|
|
// RUN: %{python} %S/Inputs/make-old.py %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: echo "// size change" >> %t/my-sdk/SdkLib.swiftinterface
|
|
// RUN: %target-swift-frontend -typecheck -I %t/my-sdk -sdk %t/my-sdk -prebuilt-module-cache-path %t/prebuilt-cache -module-cache-path %t/MCP -emit-dependencies-path %t/dummy.d -track-system-dependencies %s
|
|
//
|
|
// Check SDKLib and ExportedLib are in the module cache
|
|
// RUN: test -f %t/MCP/SdkLib-*.swiftmodule
|
|
// RUN: test -f %t/MCP/ExportedLib-*.swiftmodule
|
|
//
|
|
// Check ExportedLib is still a forwarding module and SdkLib is not
|
|
// RUN: %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/ExportedLib-*.swiftmodule
|
|
// RUN: not %{python} %S/Inputs/check-is-forwarding-module.py %t/MCP/SdkLib-*.swiftmodule
|
|
//
|
|
// Check SdkLib has been rebuilt.
|
|
// RUN: not %{python} %S/Inputs/check-is-old.py %t/MCP/SdkLib-*.swiftmodule
|
|
//
|
|
// RUN: echo '7: PASSED'
|
|
|
|
|
|
import SdkLib
|
|
|
|
func foo() -> ExportedInterface {
|
|
return x > 3 ? testValue : testValue2
|
|
}
|