// Copyright (C) 2020 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. // ---------------------------------------------------------------------------- // CDM top level makefile // // ---------------------------------------------------------------------------- // Copies move script to /system/bin. // // The move script is only needed for existing devices that // are running Widevine DRM and are upgrading to Pi or later // Android releases. New devices release with Pi and future // Android releases do not need to run this script. // // To run this script, vendor must add the dependency to the // corresponding device.mk file and build from ANDROID_ROOT. // // For example: // PRODUCT_PACKAGES += \ // android.hardware.drm@1.0-impl \ // android.hardware.drm@1.0-service \ // android.hardware.drm@1.0-service.widevine \ // move_widevine_data.sh // // In addition, vendor needs to update device SELinux policy. // // The mv command preserves SELinux labels(i.e. media_data_file). // We need to run restorecon to put the correct context after the move. // However, restorecon is not implemented for /vendor/bin, so we put // the script in /system/bin. // // *** THIS PACKAGE HAS SPECIAL LICENSING CONDITIONS. PLEASE // CONSULT THE OWNERS AND opensource-licensing@google.com BEFORE // DEPENDING ON IT IN YOUR PROJECT. *** package { default_team: "trendy_team_media_framework_drm", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "vendor_widevine_license" // to get the below license kinds: // SPDX-license-identifier-Apache-2.0 // legacy_by_exception_only (by exception only) // legacy_proprietary (by exception only) default_applicable_licenses: ["vendor_widevine_license"], } sh_binary { name: "move_widevine_data", src: "move_widevine_data.sh", owner: "widevine", } // ---------------------------------------------------------------------------- soong_config_module_type { name: "common_widevine_service", module_type: "cc_defaults", config_namespace: "ANDROID", bool_variables: ["TARGET_ENABLE_MEDIADRM_64"], properties: ["compile_multilib"], } common_widevine_service { name: "common_widevine_service-multilib-both", compile_multilib: "prefer32", soong_config_variables: { TARGET_ENABLE_MEDIADRM_64: { compile_multilib: "both", }, }, } common_widevine_service { name: "common_widevine_service-multilib-first", compile_multilib: "prefer32", soong_config_variables: { TARGET_ENABLE_MEDIADRM_64: { compile_multilib: "first", }, }, } cc_defaults { name: "common_widevine_service-multilib-defaults-aidl", owner: "widevine", proprietary: true, min_sdk_version: "34", relative_install_path: "hw", include_dirs: [ "vendor/widevine/libwvdrmengine/cdm/core/include/", "vendor/widevine/libwvdrmengine/cdm/util/include/", "vendor/widevine/libwvdrmengine/include", "vendor/widevine/libwvdrmengine/mediadrm/include", "vendor/widevine/libwvdrmengine/oemcrypto/include", ], header_libs: ["libstagefright_foundation_headers"], shared_libs: [ "libbinder_ndk", "libcrypto", "libcutils", "liblog", ], static_libs: [ "android.hardware.common-V2-ndk", "android.hardware.drm-V1-ndk", "libaidlcommonsupport", "libbase", "libcdm_protos", "libcdm_utils", "libcdm", "libjsmn", "libjsoncpp", "libprotobuf-cpp-lite", "libutils", "libwv_odk", "libwvaidl", "libwvdrmcryptoplugin_aidl", "libwvdrmdrmplugin_aidl", "libwvlevel3", "lib_apex_manifest_minimal_proto_lite", "libPlatformProperties", ], } // ---------------------------------------------------------------------------- // Builds android.hardware.drm-service.widevine // cc_binary { name: "android.hardware.drm-service.widevine", defaults: [ "common_widevine_service-multilib-first", "common_widevine_service-multilib-defaults-aidl", ], stl: "c++_shared", srcs: ["src/service.cpp"], include_dirs: [ "frameworks/native/libs/binder/include", ], shared_libs: [ "libbinder_ndk", "wv_media_drm_flags_c_lib", ], init_rc: ["src/android.hardware.drm-service.widevine.rc"], vintf_fragments: ["manifest_android.hardware.drm-service.widevine.xml"], } // ---------------------------------------------------------------------------- // Builds android.hardware.drm-service-lazy.widevine // cc_binary { name: "android.hardware.drm-service-lazy.widevine", defaults: [ "common_widevine_service-multilib-first", "common_widevine_service-multilib-defaults-aidl", ], stl: "c++_shared", srcs: ["src/serviceLazy.cpp"], include_dirs: [ "frameworks/native/libs/binder/include", ], shared_libs: [ "libbinder_ndk", "wv_media_drm_flags_c_lib", ], init_rc: ["src/android.hardware.drm-service-lazy.widevine.rc"], vintf_fragments: ["manifest_android.hardware.drm-service-lazy.widevine.xml"], } // ---------------------------------------------------------------------------- // Builds libcdm_utils.a // cc_library_static { name: "libcdm_utils", proprietary: true, srcs: [ "cdm/core/src/properties.cpp", "cdm/src/properties_android.cpp", "cdm/src/timer.cpp", "cdm/util/src/cdm_random.cpp", "cdm/util/src/clock.cpp", "cdm/util/src/file_store.cpp", "cdm/util/src/file_utils.cpp", "cdm/util/src/log.cpp", "cdm/util/src/platform.cpp", "cdm/util/src/rw_lock.cpp", "cdm/util/src/string_conversions.cpp", "cdm/util/src/string_format.cpp", ], include_dirs: [ "vendor/widevine/libwvdrmengine/cdm/core/include", "vendor/widevine/libwvdrmengine/cdm/include", "vendor/widevine/libwvdrmengine/cdm/util/include", "vendor/widevine/libwvdrmengine/oemcrypto/include", ], header_libs: [ "libbase_headers", "libutils_headers", ], generated_headers: [ "wv_android_build_id", ], shared_libs: [ "libbinder_ndk", "libcrypto", "liblog", "wv_media_drm_flags_c_lib", ], static_libs: [ "libprotobuf-cpp-lite", "lib_apex_manifest_minimal_proto_lite", "libPlatformProperties", ], min_sdk_version: "34", } filegroup { name: "libwvdrmengine_src", srcs: [ "src/WVCDMSingleton.cpp", "src/Utils.cpp", ], } // ---------------------------------------------------------------------------- // Builds libwvaidl.so // cc_library { name: "libwvaidl", srcs: [ "src/WVCDMSingleton.cpp", "src/WVUUID.cpp", "src/wv_metrics.cpp", "src/Utils.cpp", "src/WVCreatePluginFactories.cpp", "src/WVDrmFactory.cpp", ], include_dirs: [ "frameworks/av/include", "frameworks/native/include", "vendor/widevine/libwvdrmengine/cdm/core/include", "vendor/widevine/libwvdrmengine/cdm/metrics/include", "vendor/widevine/libwvdrmengine/cdm/util/include", "vendor/widevine/libwvdrmengine/cdm/include", "vendor/widevine/libwvdrmengine/include", "vendor/widevine/libwvdrmengine/mediacrypto/include", "vendor/widevine/libwvdrmengine/mediadrm/include", "vendor/widevine/libwvdrmengine/oemcrypto/include", ], static_libs: [ "android.hardware.common-V2-ndk", "android.hardware.drm-V1-ndk", "libaidlcommonsupport", "libbase", "libcdm_protos", "libcdm_utils", "libcdm", "libjsmn", "libjsoncpp", "libprotobuf-cpp-lite", "libutils", "libwv_odk", "libwvdrmcryptoplugin_aidl", "libwvdrmdrmplugin_aidl", "libwvlevel3", "lib_apex_manifest_minimal_proto_lite", "libPlatformProperties", ], shared_libs: [ "libbinder_ndk", "libcrypto", "libcutils", "libdl", "liblog", "wv_media_drm_flags_c_lib", ], header_libs: ["libstagefright_foundation_headers"], owner: "widevine", proprietary: true, min_sdk_version: "34", } phony { name: "android.hardware.drm@latest-service.widevine", required: [ "android.hardware.drm-service.widevine", ], } phony { name: "android.hardware.drm@latest-service-lazy.widevine", required: [ "android.hardware.drm-service-lazy.widevine", ], } cc_fuzz { name: "android.hardware.drm-service.widevine.aidl_fuzzer", defaults: [ "common_widevine_service-multilib-first", "common_widevine_service-multilib-defaults-aidl", "service_fuzzer_defaults", "fuzzer_disable_leaks", ], shared_libs: [ "libcutils", "wv_media_drm_flags_c_lib", ], static_libs: [ "libbase", "libbinder_random_parcel", "libutils", ], target: { android: { shared_libs: [ "libbinder_ndk", "libbinder", ], }, host: { static_libs: [ "libbinder_ndk", "libbinder", ], }, darwin: { enabled: false, }, }, srcs: ["src/fuzzer/fuzzer.cpp"], fuzz_config: { cc: [ "widevine-android@google.com", ], }, } python_binary_host { name: "wv-android-genrule", srcs: [ "wv-android-genrule.py", ], version: { py3: { embedded_launcher: true, }, }, } genrule { name: "wv_android_build_id", srcs: ["version.txt"], tools: ["wv-android-genrule"], cmd: "$(location wv-android-genrule) build_id_header $(in) > $(out)", out: ["wv_android_build_id.h"], } genrule { name: "widevine_apex_manifest.json", srcs: ["version.txt"], tools: ["wv-android-genrule"], cmd: "$(location wv-android-genrule) apex_manifest $(in) > $(out)", out: ["gen_wv_apex_manifest.json"], } genrule { name: "widevine_lazy_apex_manifest.json", srcs: ["version.txt"], tools: ["wv-android-genrule"], cmd: "$(location wv-android-genrule) apex_manifest --name com.google.android.widevine.lazy $(in) > $(out)", out: ["gen_wv_lazy_apex_manifest.json"], }