diff options
author | Brad King <brad.king@kitware.com> | 2023-01-25 16:11:22 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-01-25 16:11:37 (GMT) |
commit | 3c8a65d3aae09ddba7caf53efdaa39c9dbf7ccd4 (patch) | |
tree | 8540388263445b1609103ffb83eb4777209ad652 /Tests | |
parent | 7a989a581c8da2fe9822096ee00b288c376b6117 (diff) | |
parent | 1730d208b5c94c600f08241a47cb41f81f4db097 (diff) | |
download | CMake-3c8a65d3aae09ddba7caf53efdaa39c9dbf7ccd4.zip CMake-3c8a65d3aae09ddba7caf53efdaa39c9dbf7ccd4.tar.gz CMake-3c8a65d3aae09ddba7caf53efdaa39c9dbf7ccd4.tar.bz2 |
Merge topic 'swiftmodule-dependency-tracking'
1730d208b5 Add incremental Swift static lib build test
bf3a8ef6d5 Ninja: Swift: Add dependency edge to swiftmodule file
d0b469b7e0 Ninja: NFC: refactor swift module name computations
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !8084
Diffstat (limited to 'Tests')
5 files changed, 49 insertions, 0 deletions
diff --git a/Tests/RunCMake/Swift/IncrementalSwift-second-result.txt b/Tests/RunCMake/Swift/IncrementalSwift-second-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/Swift/IncrementalSwift-second-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Swift/IncrementalSwift-second-stderr.txt b/Tests/RunCMake/Swift/IncrementalSwift-second-stderr.txt new file mode 100644 index 0000000..7a882f8 --- /dev/null +++ b/Tests/RunCMake/Swift/IncrementalSwift-second-stderr.txt @@ -0,0 +1,2 @@ +ninja explain: A.swiftmodule is dirty +ninja explain: libB.a is dirty diff --git a/Tests/RunCMake/Swift/IncrementalSwift-second-stdout.txt b/Tests/RunCMake/Swift/IncrementalSwift-second-stdout.txt new file mode 100644 index 0000000..bb08a49 --- /dev/null +++ b/Tests/RunCMake/Swift/IncrementalSwift-second-stdout.txt @@ -0,0 +1,3 @@ +.*Linking Swift static library libA.a +.*Linking Swift static library libB.a +FAILED: libB.a CMakeFiles/B.dir/b.swift.o B.swiftmodule diff --git a/Tests/RunCMake/Swift/IncrementalSwift.cmake b/Tests/RunCMake/Swift/IncrementalSwift.cmake new file mode 100644 index 0000000..092269f --- /dev/null +++ b/Tests/RunCMake/Swift/IncrementalSwift.cmake @@ -0,0 +1,22 @@ +enable_language(Swift) + +# Write initial files to build directory +# The files are generated into the build directory to avoid dirtying the source +# directory. This is done because the source files are changed during the test +# to ensure correct incremental build behavior. +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/a.swift + "let number: Int = 32\n" + "public func callA() -> Int { return number }\n") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/b.swift + "import A\n" + "public func callB() -> Int { return callA() + 1 }\n") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/exec.swift + "import B\n" + "print(callB())\n") + +add_library(A STATIC ${CMAKE_CURRENT_BINARY_DIR}/a.swift) +add_library(B STATIC ${CMAKE_CURRENT_BINARY_DIR}/b.swift) +target_link_libraries(B PRIVATE A) + +add_executable(exec ${CMAKE_CURRENT_BINARY_DIR}/exec.swift) +target_link_libraries(exec PRIVATE B) diff --git a/Tests/RunCMake/Swift/RunCMakeTest.cmake b/Tests/RunCMake/Swift/RunCMakeTest.cmake index 7f4464d..5537c01 100644 --- a/Tests/RunCMake/Swift/RunCMakeTest.cmake +++ b/Tests/RunCMake/Swift/RunCMakeTest.cmake @@ -24,6 +24,27 @@ elseif(RunCMake_GENERATOR STREQUAL Ninja) run_cmake_command(NoWorkToDo-build ${CMAKE_COMMAND} --build .) run_cmake_command(NoWorkToDo-nowork ${CMAKE_COMMAND} --build . -- -d explain) endblock() + + # Test that intermediate static libraries are rebuilt when the public + # interface of their dependency changes + block() + set(IncrementalSwift_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/IncrementalSwift-build) + set(IncrementalSwift_TEST_NO_CLEAN 1) + set(IncrementalSwift_TEST_OUTPUT_MERGE 1) + # Since files are modified during test, the files are created in the cmake + # file into the build directory + run_cmake(IncrementalSwift) + run_cmake_command(IncrementalSwift-first ${CMAKE_COMMAND} --build ${IncrementalSwift_TEST_BINARY_DIR}) + + # Modify public interface of libA requiring rebuild of libB + file(WRITE ${IncrementalSwift_TEST_BINARY_DIR}/a.swift + "public func callA() -> Float { return 32.0 }\n") + + # Note: We still expect this to fail, but instead of failure at link time, + # it should fail while re-compiling libB because the function changed + run_cmake_command(IncrementalSwift-second ${CMAKE_COMMAND} --build ${IncrementalSwift_TEST_BINARY_DIR} -- -d explain) + endblock() + endif() elseif(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config") if(CMAKE_Swift_COMPILER) |