From 3547c11ed618a5e34320dbae074d8bba160c7479 Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Fri, 13 Nov 2020 17:01:57 -0800 Subject: [PATCH 1/4] Attempt to unbreak the build by building Swift modules with `-enable-testing`. --- Utilities/build-script-helper.py | 77 +++++++++++++++++++------------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/Utilities/build-script-helper.py b/Utilities/build-script-helper.py index 4d59daed5..4918102dc 100755 --- a/Utilities/build-script-helper.py +++ b/Utilities/build-script-helper.py @@ -382,9 +382,9 @@ def build_using_cmake(args, toolchain_bin, build_dir): else: swift_flags.append('-O') + base_cmake_flags = [] for target in targets: swift_flags.append('-target %s' % target) - base_cmake_flags = ['-DCMAKE_Swift_FLAGS=' + ' '.join(swift_flags)] if platform.system() == 'Darwin': base_cmake_flags.append('-DCMAKE_OSX_DEPLOYMENT_TARGET=%s' % macos_deployment_target) @@ -394,17 +394,22 @@ def build_using_cmake(args, toolchain_bin, build_dir): dependencies_dir = os.path.join(driver_dir, 'dependencies') # LLBuild - build_llbuild_using_cmake(args, target, swiftc_exec, dependencies_dir, base_cmake_flags) + build_llbuild_using_cmake(args, target, swiftc_exec, dependencies_dir, + base_cmake_flags, swift_flags) # TSC - build_tsc_using_cmake(args, target, swiftc_exec, dependencies_dir, base_cmake_flags) + build_tsc_using_cmake(args, target, swiftc_exec, dependencies_dir, + base_cmake_flags, swift_flags) # Argument Parser - build_argument_parser_using_cmake(args, target, swiftc_exec, dependencies_dir, base_cmake_flags) + build_argument_parser_using_cmake(args, target, swiftc_exec, dependencies_dir, + base_cmake_flags, swift_flags) # Yams - build_yams_using_cmake(args, target, swiftc_exec, dependencies_dir, base_cmake_flags) + build_yams_using_cmake(args, target, swiftc_exec, dependencies_dir, + base_cmake_flags, swift_flags) # SwiftDriver - build_swift_driver_using_cmake(args, target, swiftc_exec, driver_dir, base_cmake_flags) + build_swift_driver_using_cmake(args, target, swiftc_exec, driver_dir, + base_cmake_flags, swift_flags) -def build_llbuild_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags): +def build_llbuild_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags, swift_flags): print('Building llbuild for target: %s' % target) llbuild_source_dir = os.path.join(os.path.dirname(args.package_path), 'llbuild') llbuild_build_dir = os.path.join(build_dir, 'llbuild') @@ -426,73 +431,81 @@ def build_llbuild_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_f # on some machines. This is also Darwin-specific... if platform.system() == 'Darwin': llbuild_cmake_flags.append('-DSQLite3_LIBRARY=%s/usr/lib/libsqlite3.tbd' % args.sysroot) + llbuild_swift_flags = swift_flags[:] # Build only a subset of llbuild (in particular skipping tests) - cmake_build(args, swiftc_exec, llbuild_cmake_flags, llbuild_source_dir, llbuild_build_dir, 'products/all') + cmake_build(args, swiftc_exec, llbuild_cmake_flags, llbuild_swift_flags, + llbuild_source_dir, llbuild_build_dir, 'products/all') -def build_tsc_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags): +def build_tsc_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags, swift_flags): print('Building TSC for target: %s' % target) tsc_source_dir = os.path.join(os.path.dirname(args.package_path), 'swift-tools-support-core') tsc_build_dir = os.path.join(build_dir, 'swift-tools-support-core') - cmake_build(args, swiftc_exec, base_cmake_flags, tsc_source_dir, tsc_build_dir) + tsc_swift_flags = swift_flags[:] + cmake_build(args, swiftc_exec, base_cmake_flags, tsc_swift_flags, + tsc_source_dir, tsc_build_dir) -def build_yams_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags): +def build_yams_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags, swift_flags): print('Building Yams for target: %s' % target) yams_source_dir = os.path.join(os.path.dirname(args.package_path), 'yams') yams_build_dir = os.path.join(build_dir, 'yams') - yams_flags = base_cmake_flags + [ + yams_cmake_flags = base_cmake_flags + [ '-DCMAKE_C_COMPILER:=clang', '-DBUILD_SHARED_LIBS=OFF'] if platform.system() == 'Darwin': - yams_flags.append('-DCMAKE_OSX_DEPLOYMENT_TARGET=%s' % macos_deployment_target) - yams_flags.append('-DCMAKE_C_FLAGS=-target %s' % target) + yams_cmake_flags.append('-DCMAKE_OSX_DEPLOYMENT_TARGET=%s' % macos_deployment_target) + yams_cmake_flags.append('-DCMAKE_C_FLAGS=-target %s' % target) else: - yams_flags.append('-DCMAKE_C_FLAGS=-fPIC -target %s' % target) + yams_cmake_flags.append('-DCMAKE_C_FLAGS=-fPIC -target %s' % target) if args.dispatch_build_dir: - yams_flags.append(get_dispatch_cmake_arg(args)) + yams_cmake_flags.append(get_dispatch_cmake_arg(args)) if args.foundation_build_dir: - yams_flags.append(get_foundation_cmake_arg(args)) + yams_cmake_flags.append(get_foundation_cmake_arg(args)) + yams_swift_flags = swift_flags[:] + cmake_build(args, swiftc_exec, yams_cmake_flags, yams_swift_flags, + yams_source_dir, yams_build_dir) - cmake_build(args, swiftc_exec, yams_flags, yams_source_dir, yams_build_dir) - -def build_argument_parser_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags): +def build_argument_parser_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags, swift_flags): print('Building Argument Parser for target: %s' % target) parser_source_dir = os.path.join(os.path.dirname(args.package_path), 'swift-argument-parser') parser_build_dir = os.path.join(build_dir, 'swift-argument-parser') custom_flags = ['-DBUILD_TESTING=NO', '-DBUILD_EXAMPLES=NO'] - parser_flags = base_cmake_flags + custom_flags - cmake_build(args, swiftc_exec, parser_flags, parser_source_dir, parser_build_dir) + parser_cmake_flags = base_cmake_flags + custom_flags + parser_swift_flags = swift_flags[:] + cmake_build(args, swiftc_exec, parser_cmake_flags, parser_swift_flags, + parser_source_dir, parser_build_dir) return -def build_swift_driver_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags): +def build_swift_driver_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_flags, swift_flags): print('Building Swift Driver for target: %s' % target) driver_source_dir = args.package_path driver_build_dir = build_dir dependencies_dir = os.path.join(build_dir, 'dependencies') # TODO: Enable Library Evolution - swift_flags = '' + driver_swift_flags = swift_flags[:] flags = [ '-DLLBuild_DIR=' + os.path.join(os.path.join(dependencies_dir, 'llbuild'), 'cmake/modules'), '-DTSC_DIR=' + os.path.join(os.path.join(dependencies_dir, 'swift-tools-support-core'), 'cmake/modules'), '-DYams_DIR=' + os.path.join(os.path.join(dependencies_dir, 'yams'), 'cmake/modules'), - '-DArgumentParser_DIR=' + os.path.join(os.path.join(dependencies_dir, 'swift-argument-parser'), 'cmake/modules'), - swift_flags - ] + '-DArgumentParser_DIR=' + os.path.join(os.path.join(dependencies_dir, 'swift-argument-parser'), 'cmake/modules')] + #FIXME: Building with testing enable to allow @testable import of SwiftDriver + driver_swift_flags.append('-enable-testing') driver_cmake_flags = base_cmake_flags + flags - cmake_build(args, swiftc_exec, driver_cmake_flags, driver_source_dir, driver_build_dir) + cmake_build(args, swiftc_exec, driver_cmake_flags, driver_swift_flags, + driver_source_dir, driver_build_dir) -def cmake_build(args, swiftc_exec, cmake_args, source_path, build_dir, ninja_target=None): +def cmake_build(args, swiftc_exec, cmake_args, swift_flags, source_path, + build_dir, ninja_target=None): """Configure with CMake and build with Ninja""" - swift_flags = '' if args.sysroot: - swift_flags = '-sdk %s' % args.sysroot + swift_flags.append('-sdk %s' % args.sysroot) cmd = [ args.cmake_bin, '-G', 'Ninja', '-DCMAKE_MAKE_PROGRAM=%s' % args.ninja_bin, '-DCMAKE_BUILD_TYPE:=Release', - '-DCMAKE_Swift_FLAGS=' + swift_flags, + '-DCMAKE_Swift_FLAGS=' + ' '.join(swift_flags), '-DCMAKE_Swift_COMPILER:=%s' % (swiftc_exec), ] + cmake_args + [source_path] if args.verbose: From a1231c4a39f0c87343af4637d19b287a9b0915a2 Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Mon, 16 Nov 2020 09:15:16 -0800 Subject: [PATCH 2/4] Revert "Update LinuxMain" This reverts commit ec2b6db974e684d5cd6967be4493d309b66e81d8. --- Tests/SwiftDriverTests/XCTestManifests.swift | 102 +++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/Tests/SwiftDriverTests/XCTestManifests.swift b/Tests/SwiftDriverTests/XCTestManifests.swift index 5e7f83385..6b41a8bcc 100644 --- a/Tests/SwiftDriverTests/XCTestManifests.swift +++ b/Tests/SwiftDriverTests/XCTestManifests.swift @@ -26,6 +26,29 @@ extension ExplicitModuleBuildTests { ] } +extension IncrementalCompilationTests { + // DO NOT MODIFY: This is autogenerated, use: + // `swift test --generate-linuxmain` + // to regenerate. + static let __allTests__IncrementalCompilationTests = [ + ("testAutolinkOutputPath", testAutolinkOutputPath), + ("testIncremental", testIncremental), + ("testIncrementalDiagnostics", testIncrementalDiagnostics), + ] +} + +extension IntegrationTests { + // DO NOT MODIFY: This is autogenerated, use: + // `swift test --generate-linuxmain` + // to regenerate. + static let __allTests__IntegrationTests = [ + ("testLitDriverTests", testLitDriverTests), + ("testLitDriverValidationTests", testLitDriverValidationTests), + ("testLitInterpreterTests", testLitInterpreterTests), + ("testLitStdlibTests", testLitStdlibTests), + ] +} + extension JobExecutorTests { // DO NOT MODIFY: This is autogenerated, use: // `swift test --generate-linuxmain` @@ -40,6 +63,71 @@ extension JobExecutorTests { ] } +extension ModuleDependencyGraphTests { + // DO NOT MODIFY: This is autogenerated, use: + // `swift test --generate-linuxmain` + // to regenerate. + static let __allTests__ModuleDependencyGraphTests = [ + ("testBaselineForPrintsAndCrossType", testBaselineForPrintsAndCrossType), + ("testBasicLoad", testBasicLoad), + ("testChainedDependents", testChainedDependents), + ("testChainedExternal", testChainedExternal), + ("testChainedExternalPreMarked", testChainedExternalPreMarked), + ("testChainedExternalReverse", testChainedExternalReverse), + ("testChainedNoncascadingDependents", testChainedNoncascadingDependents), + ("testChainedNoncascadingDependents2", testChainedNoncascadingDependents2), + ("testCrossTypeDependency", testCrossTypeDependency), + ("testCrossTypeDependencyBaseline", testCrossTypeDependencyBaseline), + ("testCrossTypeDependencyBaselineWithFingerprints", testCrossTypeDependencyBaselineWithFingerprints), + ("testCrossTypeDependencyWithFingerprints", testCrossTypeDependencyWithFingerprints), + ("testDependencyLoops", testDependencyLoops), + ("testEnabledTypeBodyFingerprints", testEnabledTypeBodyFingerprints), + ("testIndependentDepKinds", testIndependentDepKinds), + ("testIndependentDepKinds2", testIndependentDepKinds2), + ("testIndependentMembers", testIndependentMembers), + ("testIndependentNodes", testIndependentNodes), + ("testLoadPassesWithFingerprint", testLoadPassesWithFingerprint), + ("testMarkIntransitive", testMarkIntransitive), + ("testMarkIntransitiveThenIndirect", testMarkIntransitiveThenIndirect), + ("testMarkIntransitiveTwice", testMarkIntransitiveTwice), + ("testMarkOneNodeTwice", testMarkOneNodeTwice), + ("testMarkOneNodeTwice2", testMarkOneNodeTwice2), + ("testMarkTwoNodes", testMarkTwoNodes), + ("testMultipleDependentsDifferent", testMultipleDependentsDifferent), + ("testMultipleDependentsSame", testMultipleDependentsSame), + ("testMutualInterfaceHash", testMutualInterfaceHash), + ("testNotTransitiveOnceMarked", testNotTransitiveOnceMarked), + ("testReloadDetectsChange", testReloadDetectsChange), + ("testSimpleDependent", testSimpleDependent), + ("testSimpleDependent2", testSimpleDependent2), + ("testSimpleDependent3", testSimpleDependent3), + ("testSimpleDependent4", testSimpleDependent4), + ("testSimpleDependent5", testSimpleDependent5), + ("testSimpleDependent6", testSimpleDependent6), + ("testSimpleDependentMember", testSimpleDependentMember), + ("testSimpleDependentReverse", testSimpleDependentReverse), + ("testSimpleExternal", testSimpleExternal), + ("testSimpleExternal2", testSimpleExternal2), + ("testUseFingerprints", testUseFingerprints), + ] +} + +extension NonincrementalCompilationTests { + // DO NOT MODIFY: This is autogenerated, use: + // `swift test --generate-linuxmain` + // to regenerate. + static let __allTests__NonincrementalCompilationTests = [ + ("testBuildRecordReading", testBuildRecordReading), + ("testDateConversion", testDateConversion), + ("testExtractSourceFileDependencyGraphFromSwiftModule", testExtractSourceFileDependencyGraphFromSwiftModule), + ("testNoIncremental", testNoIncremental), + ("testReadAndWriteBuildRecord", testReadAndWriteBuildRecord), + ("testReadBinarySourceFileDependencyGraph", testReadBinarySourceFileDependencyGraph), + ("testReadComplexSourceFileDependencyGraph", testReadComplexSourceFileDependencyGraph), + ("testShowJobLifecycleAndIncremental", testShowJobLifecycleAndIncremental), + ] +} + extension ParsableMessageTests { // DO NOT MODIFY: This is autogenerated, use: // `swift test --generate-linuxmain` @@ -193,16 +281,30 @@ extension TripleTests { ] } +extension TwoDMapTests { + // DO NOT MODIFY: This is autogenerated, use: + // `swift test --generate-linuxmain` + // to regenerate. + static let __allTests__TwoDMapTests = [ + ("testTwoDMap", testTwoDMap), + ] +} + public func __allTests() -> [XCTestCaseEntry] { return [ testCase(AssertDiagnosticsTests.__allTests__AssertDiagnosticsTests), testCase(ExplicitModuleBuildTests.__allTests__ExplicitModuleBuildTests), + testCase(IncrementalCompilationTests.__allTests__IncrementalCompilationTests), + testCase(IntegrationTests.__allTests__IntegrationTests), testCase(JobExecutorTests.__allTests__JobExecutorTests), + testCase(ModuleDependencyGraphTests.__allTests__ModuleDependencyGraphTests), + testCase(NonincrementalCompilationTests.__allTests__NonincrementalCompilationTests), testCase(ParsableMessageTests.__allTests__ParsableMessageTests), testCase(PredictableRandomNumberGeneratorTests.__allTests__PredictableRandomNumberGeneratorTests), testCase(StringAdditionsTests.__allTests__StringAdditionsTests), testCase(SwiftDriverTests.__allTests__SwiftDriverTests), testCase(TripleTests.__allTests__TripleTests), + testCase(TwoDMapTests.__allTests__TwoDMapTests), ] } #endif From 6876b79dae9106508ef0d6ddf03ba3093a066ed5 Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Mon, 16 Nov 2020 09:15:20 -0800 Subject: [PATCH 3/4] Revert "HACK: Disable tests that require @testable import." This reverts commit 10b7b0edac48d930bc0a930c88d7a5116199aba5. --- Tests/SwiftDriverTests/IncrementalCompilationTests.swift | 3 --- Tests/SwiftDriverTests/ModuleDependencyGraphTests.swift | 4 ---- Tests/SwiftDriverTests/TwoDMapTests.swift | 3 --- 3 files changed, 10 deletions(-) diff --git a/Tests/SwiftDriverTests/IncrementalCompilationTests.swift b/Tests/SwiftDriverTests/IncrementalCompilationTests.swift index a49fc080b..4c0525a4c 100644 --- a/Tests/SwiftDriverTests/IncrementalCompilationTests.swift +++ b/Tests/SwiftDriverTests/IncrementalCompilationTests.swift @@ -12,8 +12,6 @@ import XCTest import TSCBasic -#if false -// FIXME: Disabled due to @testable import @testable import SwiftDriver final class NonincrementalCompilationTests: XCTestCase { @@ -618,4 +616,3 @@ final class IncrementalCompilationTests: XCTestCase { try! localFileSystem.writeFileContents(dst, bytes: ByteString(d)) } } -#endif diff --git a/Tests/SwiftDriverTests/ModuleDependencyGraphTests.swift b/Tests/SwiftDriverTests/ModuleDependencyGraphTests.swift index 342271931..501e82ca2 100644 --- a/Tests/SwiftDriverTests/ModuleDependencyGraphTests.swift +++ b/Tests/SwiftDriverTests/ModuleDependencyGraphTests.swift @@ -11,9 +11,6 @@ //===----------------------------------------------------------------------===// import XCTest - -#if false -// FIXME: Disabled due to @testable import @testable import SwiftDriver import TSCBasic @@ -1368,4 +1365,3 @@ fileprivate extension Set where Element == ExternalDependency { contains(s.asExternal) } } -#endif diff --git a/Tests/SwiftDriverTests/TwoDMapTests.swift b/Tests/SwiftDriverTests/TwoDMapTests.swift index e99e541c5..3a3260c16 100644 --- a/Tests/SwiftDriverTests/TwoDMapTests.swift +++ b/Tests/SwiftDriverTests/TwoDMapTests.swift @@ -10,9 +10,7 @@ // //===----------------------------------------------------------------------===// -#if false import XCTest -// FIXME: Disabled due to testable import @testable import SwiftDriver class TwoDMapTests: XCTestCase { @@ -108,4 +106,3 @@ class TwoDMapTests: XCTestCase { } } -#endif From 9b7278f12e9637e903295eeca2bb8f2cc50df22d Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Mon, 16 Nov 2020 12:52:35 -0800 Subject: [PATCH 4/4] [Build script helper] Add -enable-testing on the `swift test` invocation --- Utilities/build-script-helper.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Utilities/build-script-helper.py b/Utilities/build-script-helper.py index 4918102dc..4f7e8e1d4 100755 --- a/Utilities/build-script-helper.py +++ b/Utilities/build-script-helper.py @@ -175,6 +175,7 @@ def handle_invocation(toolchain_bin, args): env['SWIFT_DRIVER_' + tool.upper().replace('-','_') + '_EXEC'] = '%s' % (tool_path) env['SWIFT_EXEC'] = '%sc' % (swift_exec) test_args = swiftpm_args + test_args += ['-Xswiftc', '-enable-testing'] if should_test_parallel(): test_args += ['--parallel'] swiftpm('test', swift_exec, test_args, env) @@ -379,8 +380,6 @@ def build_using_cmake(args, toolchain_bin, build_dir): if args.configuration == 'debug': swift_flags.append('-Onone') swift_flags.append('-DDEBUG') - else: - swift_flags.append('-O') base_cmake_flags = [] for target in targets: