| // Copyright (C) 2015 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. |
| |
| // Common variables. |
| // ========================================================= |
| package { |
| default_applicable_licenses: ["external_minijail_license"], |
| } |
| |
| // Added automatically by a large-scale-change that took the approach of |
| // 'apply every license found to every target'. While this makes sure we respect |
| // every license restriction, it may not be entirely correct. |
| // |
| // e.g. GPL in an MIT project might only apply to the contrib/ directory. |
| // |
| // Please consider splitting the single license below into multiple licenses, |
| // taking care not to lose any license_kind information, and overriding the |
| // default license using the 'licenses: [...]' property on targets as needed. |
| // |
| // For unused files, consider creating a 'fileGroup' with "//visibility:private" |
| // to attach the license to, and including a comment whether the files may be |
| // used in the current project. |
| // |
| // large-scale-change included anything that looked like it might be a license |
| // text as a license_text. e.g. LICENSE, NOTICE, COPYING etc. |
| // |
| // Please consider removing redundant or irrelevant files from 'license_text:'. |
| // See: http://go/android-license-faq |
| license { |
| name: "external_minijail_license", |
| visibility: [":__subpackages__"], |
| license_kinds: [ |
| "SPDX-license-identifier-Apache-2.0", |
| "SPDX-license-identifier-BSD", |
| ], |
| license_text: [ |
| "LICENSE", |
| "NOTICE", |
| ], |
| } |
| |
| libminijailSrcFiles = [ |
| "bpf.c", |
| "libminijail.c", |
| "signal_handler.c", |
| "syscall_filter.c", |
| "syscall_wrapper.c", |
| "system.c", |
| "util.c", |
| ] |
| |
| unittestSrcFiles = [ |
| "testrunner.cc", |
| ] |
| |
| minijailCommonLibraries = ["libcap"] |
| |
| cc_defaults { |
| name: "libminijail_flags", |
| cflags: [ |
| "-D_FILE_OFFSET_BITS=64", |
| "-DALLOW_DEBUG_LOGGING", |
| "-DALLOW_DUPLICATE_SYSCALLS", |
| "-DDEFAULT_PIVOT_ROOT=\"/var/empty\"", |
| "-Wall", |
| "-Werror", |
| ], |
| c_std: "gnu11", |
| target: { |
| darwin: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| // Static library for generated code. |
| // ========================================================= |
| cc_object { |
| name: "libminijail_gen_syscall_obj", |
| vendor_available: true, |
| product_available: true, |
| recovery_available: true, |
| header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up. |
| srcs: ["gen_syscalls.c"], |
| cflags: [ |
| "-dD", |
| "-E", |
| "-Wall", |
| "-Werror", |
| ], |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.adbd", |
| "com.android.media.swcodec", |
| "com.android.virt", |
| ], |
| min_sdk_version: "29", |
| } |
| |
| cc_genrule { |
| name: "libminijail_gen_syscall", |
| vendor_available: true, |
| product_available: true, |
| recovery_available: true, |
| tool_files: ["gen_syscalls.sh"], |
| cmd: "$(location gen_syscalls.sh) $(in) $(out)", |
| srcs: [":libminijail_gen_syscall_obj"], |
| out: ["libsyscalls.c"], |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.adbd", |
| "com.android.media.swcodec", |
| "com.android.virt", |
| ], |
| } |
| |
| cc_object { |
| name: "libminijail_gen_constants_obj", |
| vendor_available: true, |
| product_available: true, |
| recovery_available: true, |
| header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up. |
| srcs: ["gen_constants.c"], |
| cflags: [ |
| "-dD", |
| "-E", |
| "-Wall", |
| "-Werror", |
| ], |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.adbd", |
| "com.android.media.swcodec", |
| "com.android.virt", |
| ], |
| min_sdk_version: "29", |
| } |
| |
| cc_genrule { |
| name: "libminijail_gen_constants", |
| vendor_available: true, |
| product_available: true, |
| recovery_available: true, |
| tool_files: ["gen_constants.sh"], |
| cmd: "$(location gen_constants.sh) $(in) $(out)", |
| srcs: [":libminijail_gen_constants_obj"], |
| out: ["libconstants.c"], |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.adbd", |
| "com.android.media.swcodec", |
| "com.android.virt", |
| ], |
| } |
| |
| cc_library_static { |
| name: "libminijail_generated", |
| vendor_available: true, |
| product_available: true, |
| recovery_available: true, |
| defaults: ["libminijail_flags"], |
| host_supported: true, |
| |
| target: { |
| android: { |
| generated_sources: [ |
| "libminijail_gen_syscall", |
| "libminijail_gen_constants", |
| ], |
| }, |
| host: { |
| srcs: [ |
| "linux-x86/libconstants.gen.c", |
| "linux-x86/libsyscalls.gen.c", |
| ], |
| }, |
| }, |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.adbd", |
| "com.android.media.swcodec", |
| "com.android.virt", |
| ], |
| min_sdk_version: "29", |
| } |
| |
| cc_object { |
| name: "libminijail_gen_constants_llvmir", |
| vendor_available: true, |
| product_available: true, |
| recovery_available: true, |
| host_supported: true, |
| header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up. |
| cflags: [ |
| "-S", |
| "-O0", |
| "-emit-llvm", |
| ], |
| |
| target: { |
| android: { |
| generated_sources: ["libminijail_gen_constants"], |
| }, |
| host: { |
| srcs: ["linux-x86/libconstants.gen.c"], |
| }, |
| }, |
| } |
| |
| cc_object { |
| name: "libminijail_gen_syscall_llvmir", |
| vendor_available: true, |
| product_available: true, |
| recovery_available: true, |
| host_supported: true, |
| header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up. |
| cflags: [ |
| "-S", |
| "-O0", |
| "-emit-llvm", |
| ], |
| |
| target: { |
| android: { |
| generated_sources: ["libminijail_gen_syscall"], |
| }, |
| host: { |
| srcs: ["linux-x86/libsyscalls.gen.c"], |
| }, |
| }, |
| } |
| |
| // libminijail shared and static library for target. |
| // ========================================================= |
| cc_library { |
| name: "libminijail", |
| host_supported: true, |
| |
| vendor_available: true, |
| product_available: true, |
| recovery_available: true, |
| vndk: { |
| enabled: true, |
| }, |
| |
| defaults: ["libminijail_flags"], |
| |
| srcs: libminijailSrcFiles, |
| |
| static: { |
| whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries, |
| }, |
| shared: { |
| static_libs: ["libminijail_generated"], |
| shared_libs: minijailCommonLibraries, |
| }, |
| export_include_dirs: ["."], |
| |
| target: { |
| host: { |
| cflags: [ |
| "-DPRELOADPATH=\"/invalidminijailpreload.so\"", |
| ], |
| }, |
| }, |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.adbd", |
| "com.android.media.swcodec", |
| "com.android.virt", |
| ], |
| min_sdk_version: "29", |
| } |
| |
| // Example ASan-ified libminijail shared library for target. |
| // Commented out since it's only needed for local debugging. |
| // ========================================================= |
| //cc_library_shared { |
| // name: "libminijail_asan", |
| // defaults: ["libminijail_flags"], |
| // |
| // sanitize: { |
| // address: true, |
| // }, |
| // relative_install_path: "asan", |
| // srcs: libminijailSrcFiles, |
| // |
| // static_libs: ["libminijail_generated"], |
| // shared_libs: minijailCommonLibraries, |
| // export_include_dirs: ["."], |
| //} |
| |
| // libminijail native unit tests using gtest. |
| // |
| // For a device, run with: |
| // adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest |
| // |
| // For host, run with: |
| // out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest |
| // ========================================================= |
| cc_test { |
| name: "libminijail_unittest_gtest", |
| defaults: ["libminijail_flags"], |
| // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available. |
| //host_supported: true |
| |
| srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles, |
| |
| static_libs: ["libminijail_generated"], |
| shared_libs: minijailCommonLibraries, |
| |
| target: { |
| android: { |
| cflags: ["-Wno-writable-strings"], |
| test_suites: ["device-tests"], |
| }, |
| host: { |
| cflags: ["-DPRELOADPATH=\"/invalid\""], |
| }, |
| }, |
| } |
| |
| // Syscall filtering native unit tests using gtest. |
| // |
| // For a device, run with: |
| // adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest |
| // |
| // For host, run with: |
| // out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest |
| // ========================================================= |
| cc_test { |
| name: "syscall_filter_unittest_gtest", |
| defaults: ["libminijail_flags"], |
| host_supported: true, |
| |
| srcs: [ |
| "bpf.c", |
| "syscall_filter.c", |
| "syscall_wrapper.c", |
| "util.c", |
| "syscall_filter_unittest.cc", |
| ] + unittestSrcFiles, |
| |
| static_libs: ["libminijail_generated"], |
| shared_libs: minijailCommonLibraries, |
| |
| target: { |
| android: { |
| test_suites: ["device-tests"], |
| }, |
| }, |
| test_options: { |
| unit_test: true, |
| }, |
| data: ["test/*"], |
| } |
| |
| // System functionality unit tests using gtest. |
| // |
| // For a device, run with: |
| // adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest |
| // |
| // For host, run with: |
| // out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest |
| // ========================================================= |
| cc_test { |
| name: "mj_system_unittest_gtest", |
| defaults: ["libminijail_flags"], |
| host_supported: true, |
| |
| srcs: [ |
| "syscall_wrapper.c", |
| "system.c", |
| "util.c", |
| "system_unittest.cc", |
| ] + unittestSrcFiles, |
| |
| static_libs: ["libminijail_generated"], |
| shared_libs: minijailCommonLibraries, |
| |
| target: { |
| android: { |
| test_suites: ["device-tests"], |
| }, |
| }, |
| } |
| |
| // Utility functionality unit tests using gtest. |
| // |
| // For a device, run with: |
| // adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest |
| // |
| // For host, run with: |
| // out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest |
| // ========================================================= |
| cc_test { |
| name: "mj_util_unittest_gtest", |
| defaults: ["libminijail_flags"], |
| host_supported: true, |
| |
| srcs: [ |
| "util.c", |
| "util_unittest.cc", |
| ] + unittestSrcFiles, |
| |
| static_libs: ["libminijail_generated"], |
| shared_libs: minijailCommonLibraries, |
| |
| target: { |
| android: { |
| test_suites: ["device-tests"], |
| }, |
| }, |
| } |
| |
| // Utility functionality unit tests using gtest. |
| // |
| // For a device, run with: |
| // adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest |
| // |
| // For host, run with: |
| // out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest |
| // ========================================================= |
| cc_test { |
| name: "minijail0_cli_unittest_gtest", |
| defaults: ["libminijail_flags"], |
| host_supported: true, |
| |
| cflags: [ |
| "-DPRELOADPATH=\"/invalid\"", |
| ], |
| srcs: libminijailSrcFiles + [ |
| "elfparse.c", |
| "minijail0_cli.c", |
| "minijail0_cli_unittest.cc", |
| ] + unittestSrcFiles, |
| |
| static_libs: ["libminijail_generated"], |
| shared_libs: minijailCommonLibraries, |
| |
| target: { |
| android: { |
| test_suites: ["device-tests"], |
| }, |
| }, |
| } |
| |
| // libminijail_test executable for brillo_Minijail test. |
| // ========================================================= |
| cc_test { |
| name: "libminijail_test", |
| defaults: ["libminijail_flags"], |
| test_suites: ["device-tests"], |
| |
| gtest: false, |
| |
| srcs: ["test/libminijail_test.cpp"], |
| |
| shared_libs: [ |
| "libbase", |
| "libminijail", |
| ], |
| } |
| |
| // libminijail usage example. |
| // ========================================================= |
| cc_binary { |
| name: "drop_privs", |
| defaults: ["libminijail_flags"], |
| |
| // Don't build with ASan, but leave commented out for easy local debugging. |
| // sanitize: { address: true, }, |
| srcs: ["examples/drop_privs.cpp"], |
| |
| shared_libs: [ |
| "libbase", |
| "libminijail", |
| ], |
| } |
| |
| // minijail0 executable. |
| // This is not currently used on Brillo/Android, |
| // but it's convenient to be able to build it. |
| // ========================================================= |
| cc_binary { |
| name: "minijail0", |
| defaults: ["libminijail_flags"], |
| host_supported: true, |
| |
| cflags: [ |
| "-DPRELOADPATH=\"/invalidminijailpreload.so\"", |
| ], |
| srcs: [ |
| "elfparse.c", |
| "minijail0.c", |
| "minijail0_cli.c", |
| ], |
| |
| static_libs: ["libminijail_generated"], |
| shared_libs: minijailCommonLibraries + ["libminijail"], |
| } |
| |
| rust_defaults { |
| name: "libminijail_rust_defaults", |
| target: { |
| darwin: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| // This target was generated by cargo2android.py --run --device, with some |
| // manual fixes. |
| rust_library { |
| name: "libminijail_sys", |
| defaults: ["libminijail_rust_defaults"], |
| host_supported: true, |
| crate_name: "minijail_sys", |
| srcs: ["rust/minijail-sys/lib.rs"], |
| edition: "2018", |
| rustlibs: [ |
| "liblibc", |
| ], |
| shared_libs: [ |
| "libcap", |
| "libminijail", |
| ], |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.virt", |
| ], |
| } |
| |
| // This target was generated by cargo2android.py --run --device, with some |
| // manual fixes. |
| rust_library { |
| name: "libminijail_rust", |
| defaults: ["libminijail_rust_defaults"], |
| host_supported: true, |
| crate_name: "minijail", |
| srcs: ["rust/minijail/src/lib.rs"], |
| edition: "2018", |
| rustlibs: [ |
| "liblibc", |
| "libminijail_sys", |
| ], |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.virt", |
| ], |
| } |