| # 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"], |
| data = ["init/init_download.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"], |
| ) |