| /* |
| * 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. |
| */ |
| |
| cc_defaults { |
| name: "linkerconfig_defaults", |
| cflags: [ |
| "-Wall", |
| "-Werror", |
| "-Wextra", |
| ], |
| defaults: ["libapexutil-deps"], |
| static_libs: [ |
| "libapexutil", |
| "libbase", |
| "liblog", |
| "libprotobuf-cpp-lite", |
| "libxml2", |
| "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"], |
| } |
| |
| 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", |
| ], |
| } |
| |
| cc_library_static { |
| name: "linkerconfig_generator", |
| defaults : [ "linkerconfig_defaults" ], |
| export_include_dirs: [ "generator/include" ], |
| static_libs: [ |
| "linkerconfig_modules", |
| "linkerconfig_contents", |
| "libc++fs", |
| ], |
| srcs: [ |
| "generator/*.cc", |
| ], |
| } |
| |
| 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", |
| "vndkcorevariant.libraries.txt", |
| "system_linker_config", |
| // Note that even thought linkerconfig requires at least one version of VNDK APEXes, |
| // we can't list it here because the exact version is unknown at build-time. It is decided |
| // at runtime according to ro.vndk.version (or ro.product.vndk.version) |
| ], |
| target: { |
| android: { |
| // This binary needs to be static on device, but it's also packaged |
| // as a host prebuilt in runtime-module-host-exports. On host it |
| // should link all libraries statically except libc and other system |
| // libraries, so enable this only on device. |
| static_executable: true, |
| }, |
| host: { |
| stl: "c++_static", // Link libc++ statically. |
| }, |
| }, |
| |
| // Device does not boot when global ThinLTO is enabled for linkerconfig. |
| // http://b/170573443 |
| lto: { |
| never: true, |
| }, |
| } |
| |
| cc_test { |
| name: "linkerconfig_modules_unittest", |
| defaults: [ "linkerconfig_test_defaults" ], |
| srcs: [ |
| "modules/tests/*_test.cc", |
| ], |
| static_libs: [ |
| "libgmock", |
| "linkerconfig_modules", |
| ], |
| data: [ |
| "modules/tests/data/linker.config.*", |
| ], |
| } |
| |
| cc_test { |
| name: "linkerconfig_backward_compatibility_test", |
| defaults: [ "linkerconfig_test_defaults" ], |
| srcs: [ |
| "contents/tests/backward_compatibility/*_test.cc", |
| ], |
| static_libs: [ |
| "linkerconfig_modules", |
| "linkerconfig_contents", |
| ], |
| } |
| |
| cc_test { |
| 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", |
| ], |
| } |
| |
| cc_test { |
| name: "linkerconfig_contents_fulltest", |
| defaults: [ "linkerconfig_test_defaults" ], |
| local_include_dirs: [ |
| "contents/tests/configuration/include", |
| ], |
| srcs: [ |
| "contents/tests/configuration/*_test.cc", |
| ], |
| static_libs: [ |
| "linkerconfig_modules", |
| "linkerconfig_contents", |
| ], |
| } |
| |
| 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)", |
| } |
| |
| genrule { |
| name: "linkerconfig_diff_test_host_tools", |
| out: ["linkerconfig_diff_test_host_tools.zip"], |
| tools: ["conv_apex_manifest", "conv_linker_config", "linkerconfig", "soong_zip"], |
| cmd: "HOST_OUT_BIN=$$(dirname $(location conv_apex_manifest)) && " + |
| "HOST_SOONG_OUT=$$(dirname $$HOST_OUT_BIN) && " + |
| "LIBCPLUSPLUS=$$(find $${HOST_SOONG_OUT}/lib64 -name \"libc++.*\") && " + |
| "mkdir -p $(genDir)/tools/bin && " + |
| "mkdir -p $(genDir)/tools/lib64 && " + |
| "cp $(location conv_apex_manifest) $(genDir)/tools/bin && " + |
| "cp $(location conv_linker_config) $(genDir)/tools/bin && " + |
| "cp $(location linkerconfig) $(genDir)/tools/bin && " + |
| "cp $$LIBCPLUSPLUS $(genDir)/tools/lib64 && " + |
| "$(location soong_zip) -C $(genDir)/tools -D $(genDir)/tools -o $(out)", |
| } |
| |
| sh_test_host { |
| name: "linkerconfig_diff_test", |
| src: "rundiff.sh", |
| filename: "linkerconfig_diff_test.sh", |
| test_suites: ["general-tests"], |
| test_config: "linkerconfig_diff_test.xml", |
| data: [ |
| "testdata/**/*", |
| "testdata/**/.*", // copy .keep files |
| // workaround to use host tools(conv_apex_manifest, linkerconfig) on build server |
| // ":conv_apex_manifest", |
| // ":linkerconfig", |
| ":linkerconfig_diff_test_host_tools", |
| ], |
| } |