Skip to content

Attempt to unbreak the build by building SwiftDriver module with -enable-testing in CMake. #363

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

Merged
merged 4 commits into from
Nov 17, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions Tests/SwiftDriverTests/IncrementalCompilationTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
import XCTest
import TSCBasic

#if false
// FIXME: Disabled due to @testable import
@testable import SwiftDriver

final class NonincrementalCompilationTests: XCTestCase {
Expand Down Expand Up @@ -618,4 +616,3 @@ final class IncrementalCompilationTests: XCTestCase {
try! localFileSystem.writeFileContents(dst, bytes: ByteString(d))
}
}
#endif
4 changes: 0 additions & 4 deletions Tests/SwiftDriverTests/ModuleDependencyGraphTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@
//===----------------------------------------------------------------------===//

import XCTest

#if false
// FIXME: Disabled due to @testable import
@testable import SwiftDriver
import TSCBasic

Expand Down Expand Up @@ -1368,4 +1365,3 @@ fileprivate extension Set where Element == ExternalDependency {
contains(s.asExternal)
}
}
#endif
3 changes: 0 additions & 3 deletions Tests/SwiftDriverTests/TwoDMapTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@
//
//===----------------------------------------------------------------------===//

#if false
import XCTest
// FIXME: Disabled due to testable import
@testable import SwiftDriver

class TwoDMapTests: XCTestCase {
Expand Down Expand Up @@ -108,4 +106,3 @@ class TwoDMapTests: XCTestCase {
}

}
#endif
102 changes: 102 additions & 0 deletions Tests/SwiftDriverTests/XCTestManifests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand All @@ -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`
Expand Down Expand Up @@ -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
80 changes: 46 additions & 34 deletions Utilities/build-script-helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -379,12 +380,10 @@ 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:
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)

Expand All @@ -394,17 +393,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')
Expand All @@ -426,73 +430,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))

cmake_build(args, swiftc_exec, yams_flags, yams_source_dir, yams_build_dir)
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)

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:
Expand Down