| # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI="4" |
| |
| CROS_WORKON_INCREMENTAL_BUILD=1 |
| CROS_WORKON_LOCALNAME=( |
| "common-mk" |
| "cros-disks" |
| "libchromeos" |
| "metrics" |
| "system_api" |
| ) |
| CROS_WORKON_PROJECT=("${CROS_WORKON_LOCALNAME[@]/#/chromiumos/platform/}") |
| CROS_WORKON_DESTDIR=("${CROS_WORKON_LOCALNAME[@]/#/${S}/}") |
| |
| inherit cros-board cros-debug cros-workon eutils |
| |
| DESCRIPTION="Platform2 for Chromium OS: a GYP-based incremental build system" |
| HOMEPAGE="http://www.chromium.org/" |
| SRC_URI="" |
| |
| LICENSE="BSD" |
| SLOT="0" |
| KEYWORDS="~amd64 ~arm ~x86" |
| IUSE="cros_host gdmwimax +incremental platform2 test" |
| |
| LIBCHROME_VERS=( 180609 ) |
| |
| LIBCHROME_DEPEND=$( |
| printf \ |
| 'chromeos-base/libchrome:%s[cros-debug=] ' \ |
| ${LIBCHROME_VERS[@]} |
| ) |
| |
| RDEPEND_cros_disks=" |
| !cros_host? ( |
| app-arch/unrar |
| chromeos-base/chromeos-minijail |
| sys-apps/util-linux |
| sys-block/parted |
| sys-fs/avfs |
| sys-fs/exfat-utils |
| sys-fs/fuse-exfat |
| sys-fs/ntfs3g |
| sys-fs/udev |
| ) |
| " |
| |
| RDEPEND=" |
| platform2? ( |
| $(for v in ${!RDEPEND_*}; do echo "${!v}"; done) |
| |
| ${LIBCHROME_DEPEND} |
| dev-cpp/gflags |
| dev-libs/dbus-c++ |
| dev-libs/dbus-glib |
| >=dev-libs/glib-2.30 |
| dev-libs/openssl |
| dev-libs/protobuf |
| sys-apps/dbus |
| sys-apps/rootdev |
| |
| !chromeos-base/cros-disks |
| !chromeos-base/libchromeos |
| !chromeos-base/metrics |
| !chromeos-base/system_api |
| ) |
| !platform2? ( |
| chromeos-base/libchromeos |
| chromeos-base/system_api |
| chromeos-base/metrics |
| !cros_host? ( |
| chromeos-base/cros-disks |
| ) |
| ) |
| " |
| |
| DEPEND="${RDEPEND} |
| platform2? ( |
| $(for v in ${!DEPEND_*}; do echo "${!v}"; done) |
| |
| chromeos-base/protofiles |
| |
| test? ( |
| app-shells/dash |
| dev-cpp/gmock |
| dev-cpp/gtest |
| ) |
| ) |
| " |
| |
| # |
| # Platform2 common helper functions |
| # |
| |
| platform2() { |
| local platform2_py="${S}/common-mk/platform2.py" |
| |
| local action="$1" |
| |
| "${platform2_py}" \ |
| $(platform2_get_target_args) \ |
| --use_flags="${USE}" \ |
| --action="${action}" \ |
| || die |
| } |
| |
| platform2_get_target_args() { |
| if use cros_host; then |
| echo "--host" |
| else |
| echo "--board=$(get_current_board_with_variant)" |
| fi |
| } |
| |
| platform2_test() { |
| local platform2_test_py="${S}/common-mk/platform2_test.py" |
| |
| local action="$1" |
| local bin="$2" |
| local run_as_root="$3" |
| local gtest_filter="$4" |
| |
| local run_as_root_flag="" |
| if [[ "${run_as_root}" == "1" ]]; then |
| run_as_root_flag="--run_as_root" |
| fi |
| |
| "${platform2_test_py}" \ |
| --action="${action}" \ |
| --bin="${bin}" \ |
| $(platform2_get_target_args) \ |
| --gtest_filter="${gtest_filter}" \ |
| --use_flags="${USE}" \ |
| ${run_as_root_flag} \ |
| || die |
| |
| } |
| |
| platform2_multiplex() { |
| # Runs a step (ie platform2_{test,install}) for a given subdir. |
| # Sets up two variables to be used by the step: |
| # OUT = the build output directory, contains binaries/libs |
| # SRC = the path to subdir we're running the step for |
| |
| local phase=$1 |
| local OUT="$(cros-workon_get_build_dir)/out/Default" |
| local pkg |
| for pkg in "${CROS_WORKON_LOCALNAME[@]}"; do |
| local SRC="${S}/${pkg}" |
| pushd "${SRC}" >/dev/null |
| platform2_${phase}_${pkg} |
| popd >/dev/null |
| done |
| } |
| |
| # |
| # These are all the repo-specific install functions. |
| # Keep them sorted by name! |
| # |
| |
| platform2_install_common-mk() { |
| return 0 |
| } |
| |
| platform2_install_cros-disks() { |
| use cros_host && return 0 |
| |
| exeinto /opt/google/cros-disks |
| doexe "${OUT}"/disks |
| |
| # Install USB device IDs file. |
| insinto /opt/google/cros-disks |
| doins usb-device-info |
| |
| # Install seccomp policy file. |
| newins avfsd-seccomp-${ARCH}.policy avfsd-seccomp.policy |
| |
| # Install upstart config file. |
| insinto /etc/init |
| doins cros-disks.conf |
| |
| # Install D-Bus config file. |
| insinto /etc/dbus-1/system.d |
| doins org.chromium.CrosDisks.conf |
| } |
| |
| platform2_install_libchromeos() { |
| ./platform2_preinstall.sh "${OUT}" "${LIBCHROME_VERS}" |
| |
| local v |
| insinto /usr/$(get_libdir)/pkgconfig |
| for v in "${LIBCHROME_VERS[@]}"; do |
| dolib.so "${OUT}"/lib/lib{chromeos,policy}*-${v}.so |
| doins "${OUT}"/lib/libchromeos-${v}.pc |
| done |
| |
| local dir dirs=( . dbus glib ) |
| for dir in "${dirs[@]}"; do |
| insinto /usr/include/chromeos/${dir} |
| doins chromeos/${dir}/*.h |
| done |
| |
| insinto /usr/include/policy |
| doins chromeos/policy/*.h |
| } |
| |
| platform2_install_metrics() { |
| dobin "${OUT}"/metrics_{client,daemon} syslog_parser.sh |
| |
| dolib.so "${OUT}/lib/libmetrics.so" |
| |
| insinto /usr/include/metrics |
| doins c_metrics_library.h \ |
| metrics_library{,_mock}.h \ |
| timer{,_mock}.h |
| } |
| |
| platform2_install_system_api() { |
| local dir dirs=( dbus switches ) |
| for dir in "${dirs[@]}"; do |
| insinto /usr/include/chromeos/${dir} |
| doins -r ${dir}/* |
| done |
| } |
| |
| # |
| # These are all the repo-specific test functions. |
| # Keep them sorted by name! |
| # |
| |
| platform2_test_common-mk() { |
| return 0 |
| } |
| |
| platform2_test_cros-disks() { |
| use cros_host && return 0 |
| |
| local gtest_filter_qemu_common="" |
| gtest_filter_qemu_common+="DiskManagerTest.*" |
| gtest_filter_qemu_common+=":ExternalMounterTest.*" |
| gtest_filter_qemu_common+=":UdevDeviceTest.*" |
| gtest_filter_qemu_common+=":MountInfoTest.RetrieveFromCurrentProcess" |
| gtest_filter_qemu_common+=":GlibProcessTest.*" |
| |
| local gtest_filter_user_tests="-*.RunAsRoot*:" |
| use arm && gtest_filter_user_tests+="${gtest_filter_qemu_common}" |
| |
| local gtest_filter_root_tests="*.RunAsRoot*-" |
| use arm && gtest_filter_root_tests+="${gtest_filter_qemu_common}" |
| |
| platform2_test "run" "${OUT}/disks_testrunner" "1" \ |
| "${gtest_filter_root_tests}" |
| platform2_test "run" "${OUT}/disks_testrunner" "0" \ |
| "${gtest_filter_user_tests}" |
| } |
| |
| platform2_test_libchromeos() { |
| ! use x86 && ! use amd64 && return 0 |
| |
| local v |
| for v in "${LIBCHROME_VERS[@]}"; do |
| platform2_test "run" "${OUT}/libchromeos-${v}_unittests" |
| platform2_test "run" "${OUT}/libpolicy-${v}_unittests" |
| done |
| } |
| |
| platform2_test_metrics() { |
| local tests=( |
| metrics_library_test |
| metrics_daemon_test |
| counter_test |
| timer_test |
| ) |
| |
| local test_bin |
| for test_bin in "${tests[@]}"; do |
| platform2_test "run" "${OUT}/${test_bin}" |
| done |
| } |
| |
| platform2_test_system_api() { |
| return 0 |
| } |
| |
| # |
| # These are the ebuild <-> Platform2 glue functions. |
| # |
| |
| src_unpack() { |
| # If we don't create the source directory when Platform2 is disabled |
| # prepare complains. Once Platform2 is default, this isn't needed. |
| mkdir -p "${S}" |
| |
| use platform2 && cros-workon_src_unpack |
| } |
| |
| src_configure() { |
| use platform2 && platform2 "configure" |
| } |
| |
| src_compile() { |
| use platform2 && platform2 "compile" |
| } |
| |
| src_test() { |
| use platform2 || return 0 |
| |
| platform2_test "pre_test" |
| platform2_multiplex test |
| platform2_test "post_test" |
| } |
| |
| src_install() { |
| use platform2 && platform2_multiplex install |
| } |