Skip to content

Commit b8c9cf7

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

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
@@ -1298,17 +1298,31 @@ elif (run_os in ['linux-gnu', 'linux-gnueabihf', 'freebsd', 'openbsd', 'windows-
12981298

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

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

21312146
# Disabe COW sanity checks in the swift runtime by default.
21322147
# (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)