/* * Copyright (C) 2019 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. */ package { default_applicable_licenses: ["Android-Apache-2.0"], } cc_defaults { name: "linkerconfig_defaults", cflags: [ "-Wall", "-Werror", "-Wextra", ], defaults: ["libapexutil-deps"], shared_libs: [ // Because the runtime apex depends on the shared libbase, // linkerconfig can use it as shared as well to save more bits. "libbase", ], static_libs: [ "libapexutil", "liblog_for_runtime_apex", "libprotobuf-cpp-lite", "libtinyxml2", "lib_linker_config_proto_lite", ], target: { host: { static_libs: [ "libicui18n", "libicuuc", ], }, not_windows: { static_libs: ["libicuuc_stubdata"], }, }, host_supported: true, } cc_defaults { name: "linkerconfig_test_defaults", defaults: ["linkerconfig_defaults"], cflags: [ "-g", "-Wunused", ], test_suites: ["general-tests"], } cc_library_static { name: "linkerconfig_modules", defaults: [ "linkerconfig_defaults" ], export_include_dirs: [ "modules/include" ], srcs: [ "modules/*.cc", ], generated_sources: ["apex-info-list-tinyxml"], apex_available: [ "com.android.runtime", ], } cc_library_static { name: "linkerconfig_contents", defaults: [ "linkerconfig_defaults" ], export_include_dirs: [ "contents/include" ], static_libs: [ "linkerconfig_modules", ], srcs: [ "contents/namespace/*.cc", "contents/section/*.cc", "contents/configuration/*.cc", "contents/context/*.cc", "contents/common/*.cc", ], apex_available: [ "com.android.runtime", ], } cc_library_static { name: "linkerconfig_generator", defaults : [ "linkerconfig_defaults" ], export_include_dirs: [ "generator/include" ], static_libs: [ "linkerconfig_modules", "linkerconfig_contents", ], srcs: [ "generator/*.cc", ], apex_available: [ "com.android.runtime", ], } cc_binary { name: "linkerconfig", defaults: [ "linkerconfig_defaults" ], static_libs: [ "linkerconfig_modules", "linkerconfig_contents", "linkerconfig_generator", ], srcs: [ "main.cc", ], required: [ // files from /system/etc "sanitizer.libraries.txt", ], target: { host: { // Link libc++ and libbase statically on host for convenience(no need to set library paths) stl: "c++_static", static_libs: [ "libbase", ], exclude_shared_libs: [ "libbase", ], }, }, apex_available: [ "com.android.runtime", ], sanitize: { // linkerconfig should be able to run at the very early stage of boot process when // /data/asan is not ready. So linkerconfig can't run with ASAN. address: false, }, } cc_test_host { name: "linkerconfig_modules_unittest", defaults: [ "linkerconfig_test_defaults" ], srcs: [ "modules/tests/*_test.cc", ], static_libs: [ "libgmock", "linkerconfig_modules", ], data: [ "modules/tests/data/linker.config.*", ], test_options: { unit_test: true, }, } cc_test_host { name: "linkerconfig_backward_compatibility_test", defaults: [ "linkerconfig_test_defaults" ], srcs: [ "contents/tests/backward_compatibility/*_test.cc", ], static_libs: [ "linkerconfig_modules", "linkerconfig_contents", ], test_options: { unit_test: true, }, } cc_test_host { name: "linkerconfig_generator_unittest", defaults: [ "linkerconfig_test_defaults" ], srcs: [ "generator/tests/*_test.cc", ], static_libs: [ "linkerconfig_modules", "linkerconfig_contents", "linkerconfig_generator", ], data: [ "generator/tests/data/*.txt", ], test_options: { unit_test: true, }, } cc_test_host { name: "linkerconfig_contents_fulltest", defaults: [ "linkerconfig_test_defaults" ], // TODO(b/231993627): Reenable isolated:true by deleting the explicit disable below isolated: false, local_include_dirs: [ "contents/tests/configuration/include", ], srcs: [ "contents/tests/configuration/*_test.cc", ], static_libs: [ "libgmock", "linkerconfig_modules", "linkerconfig_contents", ], test_options: { unit_test: true, }, } prebuilt_etc { name: "ld.config.recovery.txt", recovery: true, filename: "ld.config.txt", src: ":generate_recovery_linker_config", } genrule { name: "generate_recovery_linker_config", recovery: true, out: ["ld.config.txt"], tools: ["linkerconfig"], cmd: "$(location linkerconfig) --recovery --target $(genDir)", } sh_test_host { name: "linkerconfig_diff_test", src: "rundiff.sh", filename: "linkerconfig_diff_test.sh", test_config: "linkerconfig_diff_test.xml", data: [ "testdata/root/**/*", "testdata/root/**/.*", // copy .keep files "testdata/golden_output/**/*", "testdata/prepare_root.sh", ], data_bins: [ "conv_apex_manifest", "conv_linker_config", "linkerconfig", ], test_options: { unit_test: true, }, }