Skip to content

Commit e695fe1

Browse files
kateinoigakukunDougGregor
authored andcommitted
Add test case to ensure working static link with concurrency module
(cherry picked from commit 1719148)
1 parent 83913d6 commit e695fe1

File tree

5 files changed

+46
-1
lines changed

5 files changed

+46
-1
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Statically link a program with concurrency module
2+
// REQUIRES: OS=linux-gnu
3+
// REQUIRES: static_stdlib
4+
// REQUIRES: concurrency
5+
// REQUIRES: libdispatch_static
6+
7+
// RUN: %empty-directory(%t)
8+
// RUN: echo 'public func asyncFunc() async { print("Hello") }' > %t/asyncModule.swift
9+
10+
// RUN: %target-swiftc_driver -emit-library -emit-module -module-name asyncModule -module-link-name asyncModule %t/asyncModule.swift -static -static-stdlib -o %t/libasyncModule.a
11+
// TODO: "-ldispatch -lBlocksRuntime" should be told by asyncModule.swiftmodule transitively
12+
// RUN: %target-swiftc_driver -parse-as-library -static -static-stdlib -module-name main %s %import-static-libdispatch -I%t -L%t -ldispatch -lBlocksRuntime -o %t/main
13+
14+
// RUN: %t/main | %FileCheck %s
15+
// CHECK: Hello
16+
// RUN: ldd %t/main | %FileCheck %s --check-prefix=LDD
17+
// LDD-NOT: libswiftCore.so
18+
// LDD-NOT: libswift_Concurrency.so
19+
20+
import asyncModule
21+
22+
@main
23+
struct Main {
24+
static func main() async {
25+
await asyncFunc()
26+
}
27+
}

test/lit.cfg

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1297,17 +1297,31 @@ elif (run_os in ['linux-gnu', 'linux-gnueabihf', 'freebsd', 'openbsd', 'windows-
12971297

12981298
libdispatch_artifact_dir = config.libdispatch_build_path
12991299
libdispatch_swift_module_dir = make_path(libdispatch_artifact_dir, 'src', 'swift', 'swift')
1300+
libdispatch_source_dir = make_path(config.swift_src_root, os.pardir, 'swift-corelibs-libdispatch')
13001301
libdispatch_artifacts = [
13011302
make_path(libdispatch_artifact_dir, 'libdispatch.so'),
13021303
make_path(libdispatch_artifact_dir, 'libswiftDispatch.so'),
13031304
make_path(libdispatch_swift_module_dir, 'Dispatch.swiftmodule')]
13041305
if (all(os.path.exists(p) for p in libdispatch_artifacts)):
13051306
config.available_features.add('libdispatch')
13061307
config.libdispatch_artifact_dir = libdispatch_artifact_dir
1307-
libdispatch_source_dir = make_path(config.swift_src_root, os.pardir, 'swift-corelibs-libdispatch')
13081308
config.import_libdispatch = ('-I %s -I %s -L %s'
13091309
% (libdispatch_source_dir, libdispatch_swift_module_dir, libdispatch_artifact_dir))
13101310

1311+
libdispatch_static_artifact_dir = config.libdispatch_static_build_path
1312+
libdispatch_swift_static_module_dir = make_path(libdispatch_static_artifact_dir, 'src', 'swift', 'swift')
1313+
libdispatch_static_artifacts = [
1314+
make_path(libdispatch_static_artifact_dir, 'src', 'libdispatch.a'),
1315+
make_path(libdispatch_static_artifact_dir, 'src', 'swift', 'libswiftDispatch.a'),
1316+
make_path(libdispatch_swift_static_module_dir, 'Dispatch.swiftmodule')]
1317+
if (all(os.path.exists(p) for p in libdispatch_static_artifacts)):
1318+
config.available_features.add('libdispatch_static')
1319+
config.import_libdispatch_static = ('-I %s -I %s -L %s -L %s -L %s'
1320+
% (libdispatch_source_dir, libdispatch_swift_static_module_dir,
1321+
make_path(libdispatch_static_artifact_dir, 'src'),
1322+
make_path(libdispatch_static_artifact_dir, 'src', 'BlocksRuntime'),
1323+
make_path(libdispatch_static_artifact_dir, 'src', 'swift')))
1324+
13111325
config.target_build_swift = (
13121326
'%s -target %s -toolchain-stdlib-rpath %s %s %s %s %s'
13131327
% (config.swiftc, config.variant_triple, resource_dir_opt, mcp_opt,
@@ -2163,6 +2177,7 @@ run_filecheck = '%s %s --sanitize BUILD_DIR=%s --sanitize SOURCE_DIR=%s --use-fi
21632177
config.substitutions.append(('%FileCheck', run_filecheck))
21642178
config.substitutions.append(('%raw-FileCheck', shell_quote(config.filecheck)))
21652179
config.substitutions.append(('%import-libdispatch', getattr(config, 'import_libdispatch', '')))
2180+
config.substitutions.append(('%import-static-libdispatch', getattr(config, 'import_libdispatch_static', '')))
21662181

21672182
# Disabe COW sanity checks in the swift runtime by default.
21682183
# (But it's required to set this environment variable to something)

test/lit.site.cfg.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ config.swift_test_results_dir = \
3434
config.coverage_mode = "@SWIFT_ANALYZE_CODE_COVERAGE@"
3535
config.lldb_build_root = "@LLDB_BUILD_DIR@"
3636
config.libdispatch_build_path = "@SWIFT_PATH_TO_LIBDISPATCH_BUILD@"
37+
config.libdispatch_static_build_path = "@SWIFT_PATH_TO_LIBDISPATCH_STATIC_BUILD@"
3738
config.swift_driver_test_options = "@SWIFT_DRIVER_TEST_OPTIONS@"
3839
config.swift_frontend_test_options = "@SWIFT_FRONTEND_TEST_OPTIONS@"
3940

utils/build-script-impl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2002,6 +2002,7 @@ for host in "${ALL_HOSTS[@]}"; do
20022002
-DSWIFT_PATH_TO_CMARK_BUILD:PATH="$(build_directory ${host} cmark)"
20032003
-DSWIFT_PATH_TO_LIBDISPATCH_SOURCE:PATH="${LIBDISPATCH_SOURCE_DIR}"
20042004
-DSWIFT_PATH_TO_LIBDISPATCH_BUILD:PATH="$(build_directory ${host} libdispatch)"
2005+
-DSWIFT_PATH_TO_LIBDISPATCH_STATIC_BUILD:PATH="$(build_directory ${host} libdispatch_static)"
20052006
)
20062007

20072008
if [[ ! "${SKIP_BUILD_LIBICU}" ]] ; then

validation-test/lit.site.cfg.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ else:
5656
config.coverage_mode = "@SWIFT_ANALYZE_CODE_COVERAGE@"
5757
config.lldb_build_root = "@LLDB_BUILD_DIR@"
5858
config.libdispatch_build_path = "@SWIFT_PATH_TO_LIBDISPATCH_BUILD@"
59+
config.libdispatch_static_build_path = "@SWIFT_PATH_TO_LIBDISPATCH_STATIC_BUILD@"
5960

6061
if "@SWIFT_ASAN_BUILD@" == "TRUE":
6162
config.available_features.add("asan")

0 commit comments

Comments
 (0)