blob: 053d67bc78316591f80abd41835ea85635136256 [file] [log] [blame]
# Copyright (C) 2021 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
load("@bazel_skylib//lib:paths.bzl", "paths")
load("@kernel_toolchain_info//:dict.bzl", "VARS")
load("//build/kernel/kleaf:hermetic_tools.bzl", "hermetic_genrule", "hermetic_tools")
load("//build/kernel/kleaf/impl:bison_wrapper.bzl", "bison_wrapper")
filegroup(
name = "sysroot",
srcs = glob(
["build-tools/sysroot/**"],
allow_empty = False,
),
visibility = [
":__subpackages__",
"@kleaf_clang_toolchain//:__subpackages__",
],
)
bison_wrapper(
name = "bison",
actual = "//prebuilts/build-tools:linux-x86/bin/bison",
pkgdata_dir = "//prebuilts/build-tools:bison.runfiles_dir",
pkgdata_files = "//prebuilts/build-tools:bison.runfiles",
visibility = ["//visibility:private"],
)
_HERMETIC_TOOLS = [
# keep sorted
":bison",
"//prebuilts/build-tools:linux-x86/bin/flex",
"//prebuilts/build-tools:linux-x86/bin/m4",
"//prebuilts/build-tools:linux-x86/bin/make",
"//prebuilts/build-tools:linux-x86/bin/openssl",
"//prebuilts/build-tools:linux-x86/bin/runextractor",
"//prebuilts/build-tools:path/linux-x86/awk",
"//prebuilts/build-tools:path/linux-x86/basename",
"//prebuilts/build-tools:path/linux-x86/bc",
"//prebuilts/build-tools:path/linux-x86/bzcat",
"//prebuilts/build-tools:path/linux-x86/bzip2",
"//prebuilts/build-tools:path/linux-x86/cat",
"//prebuilts/build-tools:path/linux-x86/chmod",
"//prebuilts/build-tools:path/linux-x86/cmp",
"//prebuilts/build-tools:path/linux-x86/comm",
"//prebuilts/build-tools:path/linux-x86/cp",
"//prebuilts/build-tools:path/linux-x86/cpio",
"//prebuilts/build-tools:path/linux-x86/cut",
"//prebuilts/build-tools:path/linux-x86/date",
"//prebuilts/build-tools:path/linux-x86/dirname",
"//prebuilts/build-tools:path/linux-x86/du",
"//prebuilts/build-tools:path/linux-x86/echo",
"//prebuilts/build-tools:path/linux-x86/egrep",
"//prebuilts/build-tools:path/linux-x86/env",
"//prebuilts/build-tools:path/linux-x86/getconf",
"//prebuilts/build-tools:path/linux-x86/grep",
"//prebuilts/build-tools:path/linux-x86/head",
"//prebuilts/build-tools:path/linux-x86/hostname",
"//prebuilts/build-tools:path/linux-x86/id",
"//prebuilts/build-tools:path/linux-x86/install",
"//prebuilts/build-tools:path/linux-x86/ln",
"//prebuilts/build-tools:path/linux-x86/ls",
"//prebuilts/build-tools:path/linux-x86/md5sum",
"//prebuilts/build-tools:path/linux-x86/mkdir",
"//prebuilts/build-tools:path/linux-x86/mktemp",
"//prebuilts/build-tools:path/linux-x86/mv",
"//prebuilts/build-tools:path/linux-x86/od",
"//prebuilts/build-tools:path/linux-x86/paste",
"//prebuilts/build-tools:path/linux-x86/pgrep",
"//prebuilts/build-tools:path/linux-x86/pkill",
"//prebuilts/build-tools:path/linux-x86/ps",
"//prebuilts/build-tools:path/linux-x86/pwd",
"//prebuilts/build-tools:path/linux-x86/readlink",
"//prebuilts/build-tools:path/linux-x86/realpath",
"//prebuilts/build-tools:path/linux-x86/rm",
"//prebuilts/build-tools:path/linux-x86/rmdir",
"//prebuilts/build-tools:path/linux-x86/sed",
"//prebuilts/build-tools:path/linux-x86/seq",
"//prebuilts/build-tools:path/linux-x86/setsid",
"//prebuilts/build-tools:path/linux-x86/sha1sum",
"//prebuilts/build-tools:path/linux-x86/sha256sum",
"//prebuilts/build-tools:path/linux-x86/sha512sum",
"//prebuilts/build-tools:path/linux-x86/sleep",
"//prebuilts/build-tools:path/linux-x86/sort",
"//prebuilts/build-tools:path/linux-x86/stat",
"//prebuilts/build-tools:path/linux-x86/tail",
"//prebuilts/build-tools:path/linux-x86/tee",
"//prebuilts/build-tools:path/linux-x86/test",
"//prebuilts/build-tools:path/linux-x86/timeout",
"//prebuilts/build-tools:path/linux-x86/touch",
"//prebuilts/build-tools:path/linux-x86/tr",
"//prebuilts/build-tools:path/linux-x86/true",
"//prebuilts/build-tools:path/linux-x86/truncate",
"//prebuilts/build-tools:path/linux-x86/uname",
"//prebuilts/build-tools:path/linux-x86/uniq",
"//prebuilts/build-tools:path/linux-x86/unix2dos",
"//prebuilts/build-tools:path/linux-x86/wc",
"//prebuilts/build-tools:path/linux-x86/which",
"//prebuilts/build-tools:path/linux-x86/whoami",
"//prebuilts/build-tools:path/linux-x86/xargs",
"//prebuilts/build-tools:path/linux-x86/xxd",
"//prebuilts/build-tools:path/linux-x86/xz",
"//prebuilts/build-tools:path/linux-x86/xzcat",
"//prebuilts/build-tools:path/linux-x86/zipinfo",
"//prebuilts/kernel-build-tools:linux-x86/bin/avbtool",
"//prebuilts/kernel-build-tools:linux-x86/bin/blk_alloc_to_base_fs",
"//prebuilts/kernel-build-tools:linux-x86/bin/build_image",
"//prebuilts/kernel-build-tools:linux-x86/bin/build_super_image",
"//prebuilts/kernel-build-tools:linux-x86/bin/certify_bootimg",
"//prebuilts/kernel-build-tools:linux-x86/bin/dtc",
"//prebuilts/kernel-build-tools:linux-x86/bin/e2fsck",
"//prebuilts/kernel-build-tools:linux-x86/bin/e2fsdroid",
"//prebuilts/kernel-build-tools:linux-x86/bin/fec",
"//prebuilts/kernel-build-tools:linux-x86/bin/img2simg",
"//prebuilts/kernel-build-tools:linux-x86/bin/interceptor",
"//prebuilts/kernel-build-tools:linux-x86/bin/interceptor_analysis",
"//prebuilts/kernel-build-tools:linux-x86/bin/lpmake",
"//prebuilts/kernel-build-tools:linux-x86/bin/lz4",
"//prebuilts/kernel-build-tools:linux-x86/bin/mkbootfs",
"//prebuilts/kernel-build-tools:linux-x86/bin/mkdtimg",
"//prebuilts/kernel-build-tools:linux-x86/bin/mke2fs",
"//prebuilts/kernel-build-tools:linux-x86/bin/mkfs.erofs",
"//prebuilts/kernel-build-tools:linux-x86/bin/mkuserimg_mke2fs",
"//prebuilts/kernel-build-tools:linux-x86/bin/pahole",
"//prebuilts/kernel-build-tools:linux-x86/bin/simg2img",
"//prebuilts/kernel-build-tools:linux-x86/bin/soong_zip",
"//prebuilts/kernel-build-tools:linux-x86/bin/stgdiff",
"//prebuilts/kernel-build-tools:linux-x86/bin/swig",
"//prebuilts/kernel-build-tools:linux-x86/bin/tune2fs",
"//prebuilts/kernel-build-tools:linux-x86/bin/ufdt_apply_overlay",
"//prebuilts/clang/host/linux-x86/clang-{}:bin/llvm-strings".format(VARS["CLANG_VERSION"]),
] + glob([
# Intentionally glob here to test for existance of alias destination
# buildifier: disable=constant-glob
"build-tools/kleaf_internal_do_not_use_path/linux-x86/cxx_extractor",
])
# DO NOT ADD MORE TO THIS LIST.
# The duplication of items in this list and other fields in hermetic-tools is
# intentional. These aliases are deprecated but kept for backwards
# compatibility.
# Existing users of individual tools are advised to migrate to
# hermetic_toolchain or hermetic_genrule.
_DEPRECATED_DO_NOT_ADD_MORE_ALIASES = [
# keep sorted
"avbtool",
"awk",
"basename",
"bash",
"bc",
"bison",
"blk_alloc_to_base_fs",
"build_image",
"build_super_image",
"bzcat",
"bzip2",
"cat",
"certify_bootimg",
"chmod",
"cmp",
"comm",
"cp",
"cpio",
"cut",
"cxx_extractor",
"date",
"dd",
"depmod",
"diff",
"dirname",
"dtc",
"du",
"e2fsck",
"e2fsdroid",
"echo",
"egrep",
"env",
"expr",
"fec",
"find",
"flex",
"getconf",
"grep",
"gzip",
"head",
"hostname",
"id",
"img2simg",
"install",
"interceptor",
"interceptor_analysis",
"llvm-strings",
"ln",
"lpmake",
"ls",
"lz4",
"m4",
"make",
"md5sum",
"mkbootfs",
"mkdir",
"mkdtimg",
"mke2fs",
"mkfs.erofs",
"mktemp",
"mkuserimg_mke2fs",
"modinfo",
"mv",
"nproc",
"od",
"openssl",
"pahole",
"paste",
"perl",
"pgrep",
"pkill",
"ps",
"pwd",
"python",
"python3",
"readlink",
"realpath",
"rm",
"rmdir",
"rsync",
"runextractor",
"sed",
"seq",
"setsid",
"sh",
"sha1sum",
"sha256sum",
"sha512sum",
"simg2img",
"sleep",
"soong_zip",
"sort",
"stat",
"stgdiff",
"swig",
"tail",
"tar",
"tee",
"test",
"timeout",
"touch",
"tr",
"true",
"truncate",
"tune2fs",
"ufdt_apply_overlay",
"uname",
"uniq",
"unix2dos",
"unzip",
"wc",
"which",
"whoami",
"xargs",
"xxd",
"xz",
"xzcat",
"zipinfo",
]
# Hermetic tools symlinks (other than _HERMETIC_TOOLS)
_ADDITIONAL_TOYS = [
"dd",
"diff",
"expr",
"nproc",
# Real tar binary that shouldn't be used directly
"kleaf_internal_do_not_use/tar",
]
# Hacks to allow duplicate keys in hermetic_tools.symlinks.
# This can't be an alias because it resolves to the same target during
# analysis phase.
filegroup(
name = "hermetic_tools_toybox_flock_alias",
srcs = ["//prebuilts/build-tools:linux-x86/bin/toybox"],
visibility = ["//visibility:private"],
)
hermetic_tools(
name = "hermetic-tools",
aliases = _DEPRECATED_DO_NOT_ADD_MORE_ALIASES,
symlinks = select({
"//build/kernel/kleaf:debug_cache_dir_conflict_needs_flock": {
":hermetic_tools_toybox_flock_alias": "flock",
},
"//conditions:default": {},
}) | select({
"//build/kernel/kleaf:workaround_btrfs_b292212788_is_true": {
"@kleaf_host_tools//:find": "find",
},
"//conditions:default": {
"//prebuilts/build-tools:path/linux-x86/find": "find",
},
}) | select({
"//build/kernel/kleaf:gzip_is_pigz_is_true": {
"@pigz": "gzip",
},
"//conditions:default": {
"//prebuilts/build-tools:path/linux-x86/gzip": "gzip",
},
}) | {
"//prebuilts/build-tools:linux-x86/bin/toybox": ":".join(_ADDITIONAL_TOYS),
# Host tools
"@kleaf_host_tools//:bash": "bash",
"@kleaf_host_tools//:sh": "sh",
"@kleaf_host_tools//:perl": "perl",
# Real rsync that shouldn't be used directly
"@kleaf_host_tools//:rsync": "kleaf_internal_do_not_use/rsync",
# Embed additional args that calls kleaf_internal_do_not_use/rsync
"build-tools/kleaf_internal_do_not_use_path/linux-x86/rsync": "rsync",
# Embeds additional args that calls kleaf_internal_do_not_use/tar
"build-tools/kleaf_internal_do_not_use_path/linux-x86/tar": "tar",
# Additional symlinks other than in //prebuilts/build-tools
"//prebuilts/kernel-build-tools:linux-x86/bin/depmod": ":".join([
# keep sorted
"depmod",
"modinfo",
]),
"//prebuilts/build-tools:linux-x86/bin/ziptool": "unzip",
# Python
"//build/kernel/kleaf/impl:python_interpreter_file": ":".join([
# keep sorted
"python",
"python3",
]),
} | {
tool: paths.basename(package_relative_label(tool).name)
for tool in _HERMETIC_TOOLS
},
visibility = ["//visibility:public"],
deps = [
":sysroot",
"//build/kernel/kleaf/impl:python_runtime_files",
"//prebuilts/build-tools:linux-x86",
"//prebuilts/kernel-build-tools:linux-x86",
"@prebuilt_ndk//:sysroot",
],
)
toolchain_type(
name = "hermetic_tools_toolchain_type",
visibility = ["//visibility:private"],
)
toolchain(
name = "hermetic_tools_toolchain",
exec_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
toolchain = ":hermetic-tools",
toolchain_type = ":hermetic_tools_toolchain_type",
visibility = ["//visibility:private"],
)
# Tools visible to all packages that uses kernel_build.
# Implementation detail of kernel_build; do not use directly.
sh_library(
name = "_setup_env",
srcs = ["_setup_env.sh"],
visibility = ["//visibility:public"],
)
# Tools visible to all packages that uses kernel_build.
# Implementation detail of kernel_build; do not use directly.
sh_library(
name = "build_utils",
srcs = ["build_utils.sh"],
visibility = ["//visibility:public"],
)
# Tools visible to all packages that uses kernel_build.
# Implementation detail of kernel_build; do not use directly.
py_binary(
name = "abi_verify_ksymtab",
srcs = ["abi/verify_ksymtab.py"],
main = "abi/verify_ksymtab.py",
visibility = ["//visibility:public"],
deps = [":symbol_extraction"],
)
# Tools visible to all packages that uses kernel_build.
# Implementation detail of kernel_build; do not use directly.
py_binary(
name = "abi_flatten_symbol_list",
srcs = ["abi/flatten_symbol_list.py"],
main = "abi/flatten_symbol_list.py",
visibility = ["//visibility:public"],
)
# Tools visible to all packages that uses kernel_build.
# Implementation detail of kernel_build; do not use directly.
py_binary(
name = "abi_process_symbols",
srcs = ["abi/process_symbols.py"],
data = [
"abi/symbols.allow",
"abi/symbols.deny",
],
main = "abi/process_symbols.py",
visibility = ["//visibility:public"],
)
py_library(
name = "symbol_extraction",
srcs = ["abi/symbol_extraction.py"],
imports = ["abi"],
visibility = ["//visibility:private"],
)
# Tools visible to all packages that uses kernel_abi
# Implementation detail of kernel_abi; do not use directly.
py_binary(
name = "check_buildtime_symbol_protection",
srcs = ["abi/check_buildtime_symbol_protection.py"],
main = "abi/check_buildtime_symbol_protection.py",
visibility = ["//visibility:public"],
deps = [":symbol_extraction"],
)
# Tools visible to all packages that uses kernel_abi.
# Implementation detail of kernel_abi; do not use directly.
py_binary(
name = "extract_symbols",
srcs = ["abi/extract_symbols.py"],
main = "abi/extract_symbols.py",
visibility = ["//visibility:public"],
deps = [":symbol_extraction"],
)
# Tools visible to all packages that uses kernel_abi.
# Implementation detail of kernel_abi; do not use directly.
py_binary(
name = "extract_protected_exports",
srcs = ["abi/extract_gki_protected_exports.py"],
main = "abi/extract_gki_protected_exports.py",
visibility = ["//visibility:public"],
deps = [":symbol_extraction"],
)
# Boostrap tool for DDK development.
py_binary(
name = "init_ddk",
srcs = ["init/init_ddk.py"],
main = "init/init_ddk.py",
visibility = ["//visibility:private"],
)
py_test(
name = "init_ddk_test",
srcs = ["init/init_ddk_test.py"],
imports = ["init"],
visibility = ["//visibility:private"],
deps = [
":init_ddk",
"@io_abseil_py//absl/testing:absltest",
"@io_abseil_py//absl/testing:parameterized",
],
)
filegroup(
name = "init_ddk_zip",
srcs = [":init_ddk"],
output_group = "python_zip_file",
visibility = ["//visibility:private"],
)
_GKI_CERTIFICATION_BINARIES_PREFIX = "//prebuilts/kernel-build-tools:linux-x86/bin/"
_GKI_CERTIFICATION_BINARIES = [
"avbtool",
"certify_bootimg",
]
hermetic_genrule(
name = "gki_certification_tools",
srcs = [_GKI_CERTIFICATION_BINARIES_PREFIX + tool for tool in _GKI_CERTIFICATION_BINARIES],
outs = ["gki_certification_tools.tar.gz"],
cmd = """
tar -czhf $@ \\
-C $$(dirname $$(dirname $(location {prefix}{first}))) \\
{files}
""".format(
files = " ".join(["bin/" + tool for tool in _GKI_CERTIFICATION_BINARIES]),
first = _GKI_CERTIFICATION_BINARIES[0],
prefix = _GKI_CERTIFICATION_BINARIES_PREFIX,
),
visibility = ["//visibility:public"],
)