Swift: enable dynamic mode

Providing `--dynamic_mode=fully` (for example setting it in
`local.bazelrc`) will now work.

All runfiles are now copied in the extractor pack: in dynamic mode,
those will be the executable and the dynamic libraries, while in static
mode only the executable will be part of the runfiles.

Setting the correct `LD_LIBRARY_PATH` in `qltest.sh` then allows to
run tests with this pakcage. If we need something more, we can switch to
a wrapper script in place of `extractor` in the future.

Notice that `LD_LIBRARY_PATH` is also set in static mode, but that has
no consequence.
This commit is contained in:
Paolo Tranquilli
2022-05-03 09:54:15 +02:00
parent 56ed68b3eb
commit c2be267feb
8 changed files with 54 additions and 22 deletions

3
.gitignore vendored
View File

@@ -37,5 +37,8 @@ csharp/extractor/Semmle.Extraction.CSharp.Driver/Properties/launchSettings.json
# links created by bazel # links created by bazel
/bazel-* /bazel-*
# local bazel options
/local.bazelrc
# CLion project files # CLion project files
/.clwb /.clwb

View File

@@ -0,0 +1,33 @@
load("@rules_pkg//:mappings.bzl", "pkg_attributes", "pkg_files")
def _runfiles_group_impl(ctx):
files = []
for src in ctx.attr.srcs:
rf = src[DefaultInfo].default_runfiles
if rf != None:
files.append(rf.files)
return [
DefaultInfo(
files = depset(transitive = files),
),
]
_runfiles_group = rule(
implementation = _runfiles_group_impl,
attrs = {
"srcs": attr.label_list(),
},
)
def pkg_runfiles(*, name, srcs, **kwargs):
internal_name = "_%s_runfiles" % name
_runfiles_group(
name = internal_name,
srcs = srcs,
)
kwargs.setdefault("attributes", pkg_attributes(mode = "0755"))
pkg_files(
name = name,
srcs = [internal_name],
**kwargs
)

View File

@@ -22,7 +22,7 @@ def codeql_workspace(repository_name = "codeql"):
_swift_prebuilt_version, _swift_prebuilt_version,
repo_arch, repo_arch,
), ),
build_file = "@%s//swift/extractor:BUILD.swift-prebuilt.bazel" % repository_name, build_file = "@%s//swift/tools/prebuilt:BUILD.swift-prebuilt.bazel" % repository_name,
sha256 = sha256, sha256 = sha256,
) )
@@ -55,4 +55,3 @@ def codeql_workspace(repository_name = "codeql"):
"https://github.com/bazelbuild/rules_python/archive/refs/tags/0.8.1.tar.gz", "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.8.1.tar.gz",
], ],
) )

View File

@@ -1,6 +1,7 @@
load("@rules_pkg//:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files", "strip_prefix") load("@rules_pkg//:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files", "strip_prefix")
load("@rules_pkg//:install.bzl", "pkg_install") load("@rules_pkg//:install.bzl", "pkg_install")
load("//:defs.bzl", "codeql_platform") load("//:defs.bzl", "codeql_platform")
load("//misc/bazel:pkg_runfiles.bzl", "pkg_runfiles")
filegroup( filegroup(
name = "dbscheme", name = "dbscheme",
@@ -45,24 +46,15 @@ pkg_filegroup(
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
) )
pkg_files( pkg_runfiles(
name = "extractor", name = "extractor",
srcs = ["//swift/extractor"], srcs = ["//swift/extractor"],
attributes = pkg_attributes(mode = "0755"),
prefix = "tools/" + codeql_platform, prefix = "tools/" + codeql_platform,
) )
alias(
name = "swift-test-sdk",
actual = select({
"@bazel_tools//src/conditions:%s" % arch: "@swift_prebuilt_%s//:swift-test-sdk" % arch
for arch in ("linux", "darwin_x86_64", "darwin_arm64")
}),
)
pkg_files( pkg_files(
name = "swift-test-sdk-arch", name = "swift-test-sdk-arch",
srcs = [":swift-test-sdk"], srcs = ["//swift/tools/prebuilt:swift-test-sdk"],
prefix = "qltest/" + codeql_platform, prefix = "qltest/" + codeql_platform,
strip_prefix = strip_prefix.from_pkg(), strip_prefix = strip_prefix.from_pkg(),
) )

View File

@@ -1,13 +1,5 @@
load("//swift:rules.bzl", "swift_cc_binary") load("//swift:rules.bzl", "swift_cc_binary")
alias(
name = "swift-llvm-support",
actual = select({
"@bazel_tools//src/conditions:%s" % arch: "@swift_prebuilt_%s//:swift-llvm-support" % arch
for arch in ("linux", "darwin_x86_64", "darwin_arm64")
}),
)
swift_cc_binary( swift_cc_binary(
name = "extractor", name = "extractor",
srcs = [ srcs = [
@@ -18,7 +10,7 @@ swift_cc_binary(
], ],
visibility = ["//swift:__pkg__"], visibility = ["//swift:__pkg__"],
deps = [ deps = [
":swift-llvm-support", "//swift/tools/prebuilt:swift-llvm-support",
"//swift/extractor/trap", "//swift/extractor/trap",
], ],
) )

View File

@@ -0,0 +1,11 @@
package(default_visibility = ["//swift:__subpackages__"])
[
alias(
name = name,
actual = select({
"@bazel_tools//src/conditions:%s" % arch: "@swift_prebuilt_%s//:%s" % (arch, name)
for arch in ("linux", "darwin_x86_64", "darwin_arm64")
}),
) for name in ("swift-llvm-support", "swift-test-sdk")
]

View File

@@ -4,4 +4,6 @@ mkdir -p "$CODEQL_EXTRACTOR_SWIFT_TRAP_DIR"
QLTEST_LOG="$CODEQL_EXTRACTOR_SWIFT_LOG_DIR"/qltest.log QLTEST_LOG="$CODEQL_EXTRACTOR_SWIFT_LOG_DIR"/qltest.log
export LD_LIBRARY_PATH="$CODEQL_EXTRACTOR_SWIFT_ROOT/tools/$CODEQL_PLATFORM"
exec "$CODEQL_EXTRACTOR_SWIFT_ROOT/tools/$CODEQL_PLATFORM/extractor" -sdk "$CODEQL_EXTRACTOR_SWIFT_ROOT/qltest/$CODEQL_PLATFORM/sdk" -c *.swift >> $QLTEST_LOG 2>&1 exec "$CODEQL_EXTRACTOR_SWIFT_ROOT/tools/$CODEQL_PLATFORM/extractor" -sdk "$CODEQL_EXTRACTOR_SWIFT_ROOT/qltest/$CODEQL_PLATFORM/sdk" -c *.swift >> $QLTEST_LOG 2>&1