# 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"], )