| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI="4" |
| CROS_WORKON_PROJECT="chromiumos/platform/vboot_reference" |
| |
| inherit cros-debug cros-workon cros-au |
| |
| DESCRIPTION="Chrome OS verified boot tools" |
| |
| LICENSE="GPL-3" |
| SLOT="0" |
| KEYWORDS="~amd64 ~arm ~x86" |
| IUSE="32bit_au minimal rbtest tpmtests cros_host" |
| |
| LIBCHROME_VERS="125070" |
| |
| RDEPEND="app-crypt/trousers |
| chromeos-base/libchrome:${LIBCHROME_VERS}[cros-debug=] |
| !minimal? ( dev-libs/libyaml ) |
| dev-libs/glib |
| dev-libs/openssl |
| sys-apps/util-linux |
| !<=chromeos-base/vboot_reference-firmware-0.0.1-r307" |
| DEPEND="${RDEPEND} |
| dev-cpp/gflags |
| dev-cpp/gtest" |
| |
| # We need the config in place before we run, but don't need to rebuild this |
| # package every time. |
| RDEPEND="${RDEPEND} |
| !cros_host? ( chromeos-base/vboot_reference-config )" |
| |
| _src_compile_main() { |
| mkdir "${S}"/build-main |
| tc-export CC AR CXX PKG_CONFIG |
| cros-debug-add-NDEBUG |
| export BASE_VER=${LIBCHROME_VERS} |
| # Vboot reference knows the flags to use |
| unset CFLAGS |
| emake BUILD="${S}"/build-main \ |
| ARCH=$(tc-arch) \ |
| MINIMAL=$(usev minimal) all \ |
| $(usev rbtest rbtest "") |
| unset CC AR CXX |
| } |
| |
| _src_compile_au() { |
| mkdir "${S}"/build-au |
| if use 32bit_au ; then |
| AU_TARGETS="libcgpt_cc libdump_kernel_config" |
| einfo "Building 32-bit AU_TARGETS: ${AU_TARGETS}" |
| board_setup_32bit_au_env |
| else |
| AU_TARGETS="libcgpt_cc libdump_kernel_config cgptmanager_tests" |
| einfo "Building native AU_TARGETS: ${AU_TARGETS}" |
| fi |
| tc-export CC AR CXX PKG_CONFIG |
| emake BUILD="${S}"/build-au/ \ |
| CC="${CC}" \ |
| CXX="${CXX}" \ |
| ARCH=$(tc-arch) MINIMAL=$(usev minimal) \ |
| ${AU_TARGETS} |
| use 32bit_au && board_teardown_32bit_au_env |
| } |
| |
| src_compile() { |
| _src_compile_main |
| _src_compile_au |
| } |
| |
| src_install() { |
| local dst_dir |
| |
| if use minimal ; then |
| # Installing on the target. Cherry pick programs generated |
| # by src_compile in the source tree build-main/ subdirectory |
| einfo "Installing target programs" |
| local progs='utility/dump_kernel_config' |
| progs+=' utility/crossystem' |
| progs+=' utility/dev_sign_file' |
| progs+=' utility/tpm_init_temp_fix' |
| progs+=' utility/tpmc' |
| progs+=' utility/vbutil_key' |
| progs+=' utility/vbutil_keyblock' |
| progs+=' utility/vbutil_kernel' |
| progs+=' utility/vbutil_firmware' |
| progs+=' utility/vbutil_what_keys' |
| progs+=' utility/gbb_utility' |
| progs+=' utility/dump_fmap' |
| progs+=' utility/dev_debug_vboot' |
| progs+=' cgpt/cgpt' |
| |
| into /usr |
| for prog in ${progs}; do |
| dobin build-main/"${prog}" |
| done |
| |
| einfo "Installing TPM tools" |
| exeinto /usr/sbin |
| doexe "utility/tpm-nvsize" |
| doexe "utility/chromeos-tpm-recovery" |
| |
| einfo "Installing boot tools" |
| exeinto /sbin |
| doexe build-main/utility/mount-encrypted |
| |
| einfo "Installing dev tools" |
| dst_dir='/usr/share/vboot/bin' |
| local src_dir='scripts/image_signing' |
| dodir "${dst_dir}" |
| exeinto "${dst_dir}" |
| doexe "${src_dir}/common_minimal.sh" |
| doexe "${src_dir}/resign_firmwarefd.sh" |
| doexe "${src_dir}/make_dev_firmware.sh" |
| doexe "${src_dir}/make_dev_ssd.sh" |
| |
| # TODO(hungte) Since we now install all keyset into |
| # /usr/share/vboot/devkeys, maybe SAFT does not need to install |
| # its own keys anymore. |
| einfo "Installing keys for SAFT" |
| local keys_to_install='recovery_kernel_data_key.vbprivk' |
| keys_to_install+=' firmware.keyblock ' |
| keys_to_install+=' firmware_data_key.vbprivk' |
| keys_to_install+=' kernel_subkey.vbpubk' |
| keys_to_install+=' kernel_data_key.vbprivk' |
| |
| dst_dir='/usr/sbin/firmware/saft' |
| dodir "${dst_dir}" |
| insinto "${dst_dir}" |
| for key in ${keys_to_install}; do |
| doins "tests/devkeys/${key}" |
| done |
| else |
| # Installing on host. |
| emake BUILD="${S}"/build-main \ |
| DESTDIR="${D}/usr/bin" install |
| # EC firmware needs to compile directly from source |
| dodir /usr/src/vboot |
| insinto /usr/src/vboot |
| doins -r firmware/include firmware/lib |
| fi |
| if use rbtest; then |
| emake BUILD="${S}"/build-main DESTDIR="${D}/usr/bin" -C tests \ |
| install-rbtest |
| fi |
| if use tpmtests; then |
| into /usr |
| # copy files starting with tpmtest, but skip .d files. |
| dobin "${S}"/build-main/tests/tpm_lite/tpmtest*[^.]? |
| dobin "${S}"/build-main/utility/tpm_set_readsrkpub |
| fi |
| |
| # Install devkeys to /usr/share/vboot/devkeys |
| # (shared by host and target) |
| einfo "Installing devkeys" |
| dst_dir='/usr/share/vboot/devkeys' |
| dodir "${dst_dir}" |
| insinto "${dst_dir}" |
| doins tests/devkeys/* |
| |
| einfo "Installing header files and libraries" |
| |
| # Install firmware/include to /build/${BOARD}/usr/include/vboot |
| local dst_dir='/usr/include/vboot' |
| dodir "${dst_dir}" |
| insinto "${dst_dir}" |
| doins -r firmware/include/* |
| |
| insinto /usr/include/vboot/${subdir} |
| doins "utility/include/kernel_blob.h" |
| doins "utility/include/dump_kernel_config.h" |
| doins "cgpt/CgptManager.h" |
| doins "firmware/lib/cgptlib/include/gpt.h" |
| |
| # Install static library needed by install programs. |
| # we need board_setup_32bit_au_env again so dolib.a installs to the |
| # correct location |
| use 32bit_au && board_setup_32bit_au_env |
| |
| einfo "Installing dump_kernel_config library" |
| dolib.a build-au/libdump_kernel_config.a |
| |
| einfo "Installing C++ version of cgpt static library:libcgpt-cc.a" |
| dolib.a build-au/cgpt/libcgpt-cc.a |
| |
| use 32bit_au && board_teardown_32bit_au_env |
| } |