mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Bazel: fix non-swift macOS builds
This is meant to be cleaned up in a later PR with respect to the TODOs.
This commit is contained in:
38
misc/bazel/os.bzl
Normal file
38
misc/bazel/os.bzl
Normal file
@@ -0,0 +1,38 @@
|
||||
""" Os detection facilities. """
|
||||
|
||||
def os_select(
|
||||
ctx = None,
|
||||
*,
|
||||
linux = None,
|
||||
windows = None,
|
||||
macos = None,
|
||||
default = None):
|
||||
"""
|
||||
This can work both in a macro and a rule context to choose something based on the current OS.
|
||||
If used in a rule implementation, you need to pass `ctx` and add `OS_DETECTION_ATTRS` to the
|
||||
rule attributes.
|
||||
"""
|
||||
choices = {
|
||||
"linux": linux or default,
|
||||
"windows": windows or default,
|
||||
"macos": macos or default,
|
||||
}
|
||||
if not ctx:
|
||||
return select({
|
||||
"@platforms//os:%s" % os: v
|
||||
for os, v in choices.items()
|
||||
if v != None
|
||||
})
|
||||
|
||||
for os, v in choices.items():
|
||||
if ctx.target_platform_has_constraint(getattr(ctx.attr, "_%s_constraint" % os)[platform_common.ConstraintValueInfo]):
|
||||
if v == None:
|
||||
fail("%s not supported by %s" % (os, ctx.label))
|
||||
return v
|
||||
fail("Unknown OS detected")
|
||||
|
||||
OS_DETECTION_ATTRS = {
|
||||
"_windows_constraint": attr.label(default = "@platforms//os:windows"),
|
||||
"_macos_constraint": attr.label(default = "@platforms//os:macos"),
|
||||
"_linux_constraint": attr.label(default = "@platforms//os:linux"),
|
||||
}
|
||||
@@ -7,6 +7,7 @@ load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_fil
|
||||
load("@rules_pkg//pkg:pkg.bzl", "pkg_zip")
|
||||
load("@rules_pkg//pkg:providers.bzl", "PackageFilegroupInfo", "PackageFilesInfo")
|
||||
load("@rules_python//python:defs.bzl", "py_binary")
|
||||
load("//misc/bazel:os.bzl", "OS_DETECTION_ATTRS", "os_select")
|
||||
|
||||
def _make_internal(name):
|
||||
def internal(suffix = "internal", *args):
|
||||
@@ -15,11 +16,6 @@ def _make_internal(name):
|
||||
|
||||
return internal
|
||||
|
||||
_PLAT_DETECTION_ATTRS = {
|
||||
"_windows": attr.label(default = "@platforms//os:windows"),
|
||||
"_macos": attr.label(default = "@platforms//os:macos"),
|
||||
}
|
||||
|
||||
_PLAT_PLACEHOLDER = "{CODEQL_PLATFORM}"
|
||||
|
||||
def _expand_path(path, platform):
|
||||
@@ -28,28 +24,8 @@ def _expand_path(path, platform):
|
||||
return ("arch", path)
|
||||
return ("generic", path)
|
||||
|
||||
def _platform_select(
|
||||
ctx = None,
|
||||
*,
|
||||
linux,
|
||||
windows,
|
||||
macos):
|
||||
if ctx:
|
||||
if ctx.target_platform_has_constraint(ctx.attr._windows[platform_common.ConstraintValueInfo]):
|
||||
return windows
|
||||
elif ctx.target_platform_has_constraint(ctx.attr._macos[platform_common.ConstraintValueInfo]):
|
||||
return macos
|
||||
else:
|
||||
return linux
|
||||
else:
|
||||
return select({
|
||||
"@platforms//os:linux": linux,
|
||||
"@platforms//os:macos": macos,
|
||||
"@platforms//os:windows": windows,
|
||||
})
|
||||
|
||||
def _detect_platform(ctx = None):
|
||||
return _platform_select(ctx, linux = "linux64", macos = "osx64", windows = "win64")
|
||||
return os_select(ctx, linux = "linux64", macos = "osx64", windows = "win64")
|
||||
|
||||
def codeql_pkg_files(
|
||||
*,
|
||||
@@ -131,7 +107,7 @@ _extract_pkg_filegroup = rule(
|
||||
attrs = {
|
||||
"src": attr.label(providers = [PackageFilegroupInfo, DefaultInfo]),
|
||||
"kind": attr.string(doc = "What part to extract", values = ["generic", "arch"]),
|
||||
} | _PLAT_DETECTION_ATTRS,
|
||||
} | OS_DETECTION_ATTRS,
|
||||
)
|
||||
|
||||
_ZipInfo = provider(fields = {"zips_to_prefixes": "mapping of zip files to prefixes"})
|
||||
@@ -181,7 +157,7 @@ _zip_info_filter = rule(
|
||||
attrs = {
|
||||
"srcs": attr.label_list(doc = "_ZipInfos to transform", providers = [_ZipInfo]),
|
||||
"kind": attr.string(doc = "Which zip kind to consider", values = ["generic", "arch"]),
|
||||
} | _PLAT_DETECTION_ATTRS,
|
||||
} | OS_DETECTION_ATTRS,
|
||||
)
|
||||
|
||||
def _imported_zips_manifest_impl(ctx):
|
||||
|
||||
Reference in New Issue
Block a user