Skip to content

Commit 93b9115

Browse files
committed
Swift: package resource dir from precomiled toolchain
1 parent c945d65 commit 93b9115

File tree

6 files changed

+34
-6
lines changed

6 files changed

+34
-6
lines changed

swift/BUILD.bazel

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ pkg_runfiles(
6464
prefix = "tools/" + codeql_platform,
6565
)
6666

67+
pkg_filegroup(
68+
name = "resource-dir-arch",
69+
srcs = ["//swift/third_party/swift-llvm-support:swift-resource-dir"],
70+
prefix = "resource-dir/" + codeql_platform,
71+
visibility = ["//visibility:public"],
72+
)
73+
6774
pkg_files(
6875
name = "swift-test-sdk-arch",
6976
srcs = ["//swift/third_party/swift-llvm-support:swift-test-sdk"],
@@ -76,6 +83,7 @@ pkg_filegroup(
7683
srcs = [
7784
":extractor",
7885
":swift-test-sdk-arch",
86+
":resource-dir-arch",
7987
] + select({
8088
"@platforms//os:linux": [
8189
":incompatible-os",

swift/extractor/main.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,23 @@ codeql::TrapDomain invocationTrapDomain(codeql::SwiftExtractorState& state) {
174174
return std::move(maybeDomain.value());
175175
}
176176

177-
codeql::SwiftExtractorConfiguration configure(int argc, char** argv) {
177+
codeql::SwiftExtractorConfiguration configure(int argc,
178+
char** argv,
179+
const std::string& resourceDir) {
178180
codeql::SwiftExtractorConfiguration configuration{};
179181
configuration.trapDir = getenv_or("CODEQL_EXTRACTOR_SWIFT_TRAP_DIR", "extractor-out/trap/swift");
180182
configuration.sourceArchiveDir =
181183
getenv_or("CODEQL_EXTRACTOR_SWIFT_SOURCE_ARCHIVE_DIR", "extractor-out/src");
182184
configuration.scratchDir =
183185
getenv_or("CODEQL_EXTRACTOR_SWIFT_SCRATCH_DIR", "extractor-out/working");
184186
configuration.frontendOptions.assign(argv + 1, argv + argc);
187+
// TODO: Should be moved to the tracer config
188+
for (int i = 0; i < argc - 1; i++) {
189+
if (std::string("-resource-dir") == configuration.frontendOptions[i]) {
190+
configuration.frontendOptions[i + 1] = resourceDir.c_str();
191+
break;
192+
}
193+
}
185194
return configuration;
186195
}
187196

@@ -214,7 +223,9 @@ int main(int argc, char** argv, char** envp) {
214223
INITIALIZE_LLVM();
215224
initializeSwiftModules();
216225

217-
const auto configuration = configure(argc, argv);
226+
std::string resourceDir = getenv_or("CODEQL_EXTRACTOR_SWIFT_ROOT", ".") + "/resource-dir/" +
227+
getenv_or("CODEQL_PLATFORM", ".");
228+
const auto configuration = configure(argc, argv, resourceDir);
218229
LOG_INFO("calling extractor with arguments \"{}\"", argDump(argc, argv));
219230
LOG_DEBUG("environment:\n{}\n", envDump(envp));
220231

swift/third_party/BUILD.swift-llvm-support.bazel

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,12 @@ pkg_files(
3131
strip_prefix = strip_prefix.from_pkg(),
3232
visibility = ["//visibility:public"],
3333
)
34+
35+
pkg_files(
36+
name = "swift-resource-dir",
37+
srcs = glob([
38+
"toolchain/lib/swift/**/*",
39+
]),
40+
strip_prefix = "toolchain/lib/swift",
41+
visibility = ["//visibility:public"],
42+
)

swift/third_party/swift-llvm-support/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ _arch_override = {
1717
for arch in ("linux", "darwin_x86_64", "darwin_arm64")
1818
}),
1919
)
20-
for name in ("swift-llvm-support", "swift-test-sdk")
20+
for name in ("swift-llvm-support", "swift-test-sdk", "swift-resource-dir")
2121
]

swift/tools/qltest.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ QLTEST_LOG="$CODEQL_EXTRACTOR_SWIFT_LOG_DIR"/qltest.log
66

77
EXTRACTOR="$CODEQL_EXTRACTOR_SWIFT_ROOT/tools/$CODEQL_PLATFORM/extractor"
88
SDK="$CODEQL_EXTRACTOR_SWIFT_ROOT/qltest/$CODEQL_PLATFORM/sdk"
9+
RESOURCE_DIR="$CODEQL_EXTRACTOR_SWIFT_ROOT/resource-dir/$CODEQL_PLATFORM"
910
export CODEQL_EXTRACTOR_SWIFT_LOG_LEVELS=${CODEQL_EXTRACTOR_SWIFT_LOG_LEVELS:-out:text:no_logs,out:console:info}
10-
1111
for src in *.swift; do
1212
env=()
13-
opts=(-sdk "$SDK" -c -primary-file "$src")
13+
opts=(-sdk "$SDK" -resource-dir "$RESOURCE_DIR" -c -primary-file "$src")
1414
opts+=($(sed -n '1 s=//codeql-extractor-options:==p' $src))
1515
expected_status=$(sed -n 's=//codeql-extractor-expected-status:[[:space:]]*==p' $src)
1616
expected_status=${expected_status:-0}

swift/tools/test/qltest/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def assert_extractor_executed_with(*flags):
6060
for actual, expected in itertools.zip_longest(execution, flags):
6161
if actual:
6262
actual = actual.strip()
63-
expected_prefix = f"-sdk {swift_root}/qltest/{platform}/sdk -c -primary-file "
63+
expected_prefix = f"-sdk {swift_root}/qltest/{platform}/sdk -resource-dir {swift_root}/resource-dir/{platform} -c -primary-file "
6464
assert actual.startswith(expected_prefix), f"correct sdk option not found in\n{actual}"
6565
actual = actual[len(expected_prefix):]
6666
assert actual, f"\nnot encountered: {expected}"

0 commit comments

Comments
 (0)